检查客户端是否有 open port 的最佳方法是什么,如果它是 forwarded properly ?
该应用目前的工作方式如下:
-
客户端为传入连接创建一个套接字,并希望通知每个人他的开放端口 . 客户端还尝试使用UPnP设置端口转发(但它并不总是存在并启用) .
-
客户端然后将其端口发送到"central"已知服务器 .
-
Server should check if the port is open (forwarded properly) and return its status.
-
如果存在转发问题,客户端将通知用户 .
目标是在服务器上保存IP端口信息,以便能够将其提供给其他客户端 . 我可以尝试从服务器到客户端打开 Socket
并查看它是否失败,但有更简单(更快)的方法吗?
例如,这个网站做的是这样的:http://www.canyouseeme.org/
1 回答
不,没有 .
要检查是否可以 Build 连接,您需要尝试 Build 连接:)使用
Socket
是一种明智的方法 .您可以通过检查计算机是否具有公共IP地址或本地IP地址来跳过某些客户端的此步骤 . 仍然存在公司防火墙等可能性,因此尝试打开连接是最安全的方法 .
使用ICMP回应请求(ping)不是一种选择,因为ICMP是与TCP(或UDP)不同的协议,它没有端口号的概念 . Ping可用于确定IP地址是否可访问,但这对您的案例没有任何附加 Value .