【问题标题】:Check remote UDP socket检查远程 UDP 套接字
【发布时间】:2015-04-27 10:06:51
【问题描述】:

我正在尝试基于 this question 创建 UDP 端口检查器,但是在端口范围 1-100 上测试(例如)www.google.com 时,我收到每个端口的异常“连接尝试失败,因为连接方一段时间后没有正确响应,或者连接的主机没有响应,建立连接失败”。下面是我测试端口的代码:

try {
        UdpClient udpClient = new UdpClient(Port);
        Socket uSocket = udpClient.Client;
        uSocket.ReceiveTimeout = 5000;
        uSocket.Connect(Adress, Port);
        udpClient.Connect(Adress, Port);
        IPEndPoint RemoteIpEndPoint = new IPEndPoint(Adress, Port);
        Byte[] sendBytes = Encoding.ASCII.GetBytes("?");
        udpClient.Send(sendBytes, sendBytes.Length);
        Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
} catch (SocketException e) {
        if (e.ErrorCode == 10054) {
             return false;
        } else {
             return false;
        }
}
return true;

【问题讨论】:

标签: c# .net sockets


【解决方案1】:

UDP 是一种无连接协议。由于您没有收到错误 10054(这是端口已关闭的明确指示)但确实收到了 TimeoutException,因此您应该假设端口已打开,但远程主机只是不关心发送任何确认你的消息。但是,如果路由器或防火墙正在过滤该端口,您也会收到TimeoutException。由于 UDP 是无连接的,因此无法知道。快速参考:

有回复吗? 端口打开。

有错误 10054 的 SocketException端口关闭。

TimeoutException?如果您和目标之间有防火墙或 NAT 路由器,则端口可能会被过滤(实际上关闭)。如果您确定没有过滤 UDP 流量,则端口打开

另见the Wikipedia page on UDPconnectionless communication

【讨论】:

  • 我从来没有得到任何回放,基于此我应该认为所有测试的端口都已关闭,但是我知道一个事实,例如端口 80 是打开的,但它仍然不会回复我。跨度>
  • @user3290117 Web 服务器侦听 TCP 端口 80。我认为 Google 不会公开任何 UDP 服务。 TCP 和 UDP 是完全不同的协议,如果一个使用 TCP,另一个使用 UDP,同一台机器上的两个服务可以使用相同的端口号。
  • 谢谢你的回答我以为是 80 端口上的 UDP,这就解释了一切。
猜你喜欢
  • 2013-03-23
  • 2020-02-21
  • 1970-01-01
  • 2015-02-18
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
相关资源
最近更新 更多