建立连接后,Websocket能否访问防火墙/路由器后面的设备?

时间:2018-11-23 15:18:32

标签: javascript node.js websocket socket.io firewall

我想知道一旦该设备建立了连接(因为该设备可以访问服务器),我的服务器是否可以使用Web套接字访问防火墙后面的设备?

我已经读过this answer,其中提到了相同的情况,但是从答案中还不清楚服务器是否可以访问路由器后面的设备。

如果可能的话,我想使用socket.io首先启动客户端到服务器的连接,然后使客户端可从服务器访问以进行进一步的通信。

我本来可以尝试的,但是现在没有这样的设置。谢谢!

2 个答案:

答案 0 :(得分:0)

只要客户端建立了连接,服务器就可以推送消息(最后,websocket是TCP连接)。

您可能遇到的唯一问题是,由于某些代理/防火墙,客户端无法使用websocket连接,在这种情况下,您可以尝试使用安全的websocket(wss)。这些通常被允许通过,因为websockets层被TLS屏蔽,而TLS通常不会被防火墙/代理阻止。

答案 1 :(得分:0)

当客户端与服务器建立WebSocket连接时,将启用客户端与服务器之间的双向通信。客户端可以将数据包发送到服务器,或者服务器可以随时将数据包发送到客户端。

这不能使服务器连接到客户端网络上的任何其他设备。因此,例如,如果运行Web浏览器的用户加载了与您的服务器建立webSocket连接的网页,则您的服务器将无法再连接到该客户端的专用网络上的任何其他设备(例如打印机或计算机)或其他专用设备)。还要谢天谢地,因为如果这样做的话,那将是一个巨大的安全漏洞。

当然,您可以使用“代理”访问其他设备的智能客户端。这可能必须是Web App之外的东西,但是您可以在连接到服务器的防火墙后面安装一个客户端应用程序,然后该服务器发送客户端消息,它希望客户端将该消息传递到服务器后的各种设备。防火墙。从本质上讲,它将要求客户端从客户端连接到防火墙后的其他设备,然后代表服务器执行某些操作(发送数据,执行某些命令等)。这样做有明显的安全隐患/风险,因此必须非常非常小心地进行以确保安全。此代理方案不特定于webSocket。可以使用客户端和服务器之间的任何协议来完成此操作。