2010-01-29 128 views
2

什么是检查客户端有一个开放端口的最佳方式,并且如果它进正常检查客户端端口是开放的,并转发[C#,ASP.NET]

这个应用程序是这样的目前:

  1. 客户端创建传入连接插座,并希望大家通知关于他的开放端口。客户端也尝试使用UPnP设置端口转发(但它并不总是存在并启用)。
  2. 然后客户端将其端口发送到“中央”已知服务器。
  3. 服务器应检查端口是否打开(正确转发)并返回其状态。
  4. 如果有转发问题,客户端会通知用户。

目标是让服务器上保存的IP +端口信息能够提供给其他客户端。我可以尝试从服务器到客户端打开一个Socket,看看它是否失败,但有没有更容易(更快)的方式来做到这一点?

例如,该网站确实类似的东西:http://www.canyouseeme.org/

+0

“ping”这个词在这里可能有点令人困惑。您无法ping特定的端口,因为ping涉及ICMP数据包而不是TCP。他们没有任何端口号的概念。 – Thorarin 2010-01-29 13:48:07

+0

正确,不是单词的最佳选择。 – Groo 2010-01-29 14:42:27

回答

1

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

您可以通过检查机器是否具有公共IP地址或本地IP地址来跳过某些客户端的此步骤。尽管如此,公司防火墙和类似的东西仍然存在,所以试图开通连接是最安全的方式。

使用ICMP回显请求(ping)不是一个选项,因为ICMP是与TCP(或UDP)不同的协议,它不具有端口号的概念。 Pinging可用于确定IP地址是否可到达,但这对您的情况没有附加价值。

+0

那么,这是如何工作:http://www.canyouseeme.org/? – Groo 2010-01-29 13:41:57

+0

@格罗:试图按照你所描述的方式打开一个套接字? – Thorarin 2010-01-29 13:45:30

+0

噢,好的,尽管你说过这根本不可能。 ;)好吧,这实际上并不是问题,我认为像ping这样的东西可能是可能的(尽量少用资源)。 – Groo 2010-01-29 13:48:37