我想知道一旦该设备建立连接(因为该设备可以访问服务器),我的服务器是否可以使用 Web 套接字访问防火墙后面的设备?
我已经阅读了这个答案,它提到了同样的场景,但是从答案中不清楚服务器是否可以访问路由器后面的设备。
如果可能的话,我想使用socket.io首先启动客户端到服务器的连接,然后使客户端可以从服务器访问以进一步通信。
我会自己尝试一下,但我现在没有这样的设置。谢谢!
当客户端与服务器建立 webSocket 连接时,客户端和服务器之间可以进行双向通信。 客户端可以随时向服务器发送数据包,服务器也可以随时向客户端发送数据包。
这不会使服务器能够连接到客户端网络上的任何其他设备。 因此,举例来说,如果运行 Web 浏览器的用户加载了与您的服务器建立 WebSocket 连接的网页,那么您的服务器将无法再连接到该客户端专用网络上的任何其他设备(例如打印机或计算机)或其他一些专用设备)与 webSocket 连接发生之前相比。 也谢天谢地,因为如果这样做的话,这将是一个巨大的安全漏洞。
当然,您可以使用“代理”访问其他设备的智能客户端。 这可能不是 Web 应用程序,但您可以在防火墙后面安装一个客户端应用程序,该应用程序连接到服务器,然后该服务器发送它希望客户端发送的客户端消息,然后将其传递到防火墙后面的各种设备。防火墙。 它本质上是要求客户端建立从客户端到防火墙后面的某些其他设备的连接,然后代表服务器执行某些操作(向其发送数据、执行某些命令等......)。 这样做会带来明显的安全隐患/风险,因此必须非常非常小心才能安全。 此代理方案并非特定于 webSocket。 它可以通过客户端和服务器之间的任何协议来完成。
只要客户端建立了连接,服务器就可以推送消息(说到底,websocket是TCP连接)。
您可能遇到的唯一问题是,如果客户端由于某些代理/防火墙而无法使用 Websocket 连接,在这种情况下您可以尝试安全 Websockets (wss)。这些通常会被允许通过,因为 Websockets 层被 TLS 屏蔽,而 TLS 通常不会被防火墙/代理阻止。
以这种方式进行的 Websocket 行为与任何标准 HTTP/HTTPS 连接没有什么不同——只有两个端点可以通信。客户端可以向服务器发送字节,服务器也可以向客户端发送字节。服务器可以使用该机制与客户端网络上的其他机器通信的唯一方法是客户端是专门为此编写的。
因此,可以编写一个 HTTP 代理,将出站连接到 websocket,然后执行服务器推送到它的任何 http 请求,但这需要您显式实现这样的事情。人们可以通过多种协议做同样的事情。关键是它是客户端必须显式实现的东西,而不是您意外启用的东西。