检查客户端端口是否已打开并转发[C#,ASP.NET]

时间:2010-01-29 12:51:31

标签: c# asp.net sockets tcp

检查客户端是否有开放端口,以及正确转发的最佳方法是什么?

该应用目前的工作方式如下:

  1. 客户端为传入连接创建套接字,并希望通知所有人有关其开放端口的信息。客户端还尝试使用UPnP设置端口转发(但它并不总是存在并启用)。
  2. 客户端然后将其端口发送到“中央”已知服务器。
  3. 服务器应检查端口是否已打开(正确转发)并返回其状态。
  4. 如果存在转发问题,客户端将通知用户。
  5. 目标是在服务器上保存IP +端口信息,以便能够将其提供给其他客户端。我可以尝试从服务器到客户端打开Socket并查看它是否失败,但有更简单(更快)的方法吗?

    例如,此网站执行类似的操作:http://www.canyouseeme.org/

1 个答案:

答案 0 :(得分:1)

不,没有。
要检查是否可以建立连接,您需要尝试建立连接:)使用Socket是一种合理的方法。

通过检查计算机是否具有公共IP地址或本地IP地址,您可以跳过某些客户端的此步骤。仍然存在公司防火墙等可能性,因此尝试打开连接是最安全的方法。

使用ICMP回送请求(ping)不是一种选择,因为ICMP是与TCP(或UDP)不同的协议,没有端口号的概念。 Ping可用于确定IP地址是否可访问,但这对您的案例没有任何附加价值。