【问题标题】:How to test a remote UDP Port如何测试远程 UDP 端口
【发布时间】:2012-03-05 03:48:40
【问题描述】:

我正在寻找一种简单的方法来查看服务器上是否打开了远程 UDP 端口

【问题讨论】:

  • UDP port open check C#的可能重复
  • @Joe 这个问题肯定是不同的......该答案中的方法不适用于仅本地机器的远程服务器!
  • udp 不会像 tcp/ip 那样发送 AWK 响应……必须在某处进行初始握手。尝试向端口发送一些数据,看看会发生什么。
  • 将套接字连接到目标并向其发送多个数据报。如果您没有收到任何异常,要么端口在防火墙处关闭,要么主机中绑定了某些东西。

标签: c# .net windows udp


【解决方案1】:

注意几个防火墙/网络设置/IDS 等可能会影响结果...以下方法不是 100% 可靠的,但它是 UDP 恕我直言的唯一方法(因为 UDP 是无连接的)。

您可以在底层的socket 上使用UdpClientset a receive timeoutmake a connection 到远程服务器/端口,Send 一些小消息(byte[]!)并调用Receive

如果端口关闭,您会收到一个异常,指出连接被强制关闭(SocketExceptionErrorCode 10054 = WSAECONNRESET)...这意味着端口未打开。

否则,您要么收到答复,要么收到超时异常 - 两者都应解释为“UDP 端口已打开”。

【讨论】:

  • @ralu 我知道这很荒谬,但这就是那个例外的实际措辞......
  • 我敢肯定,但仍然很有趣。 UdpClient 是不是基于 UDP 的应用程序协议?
  • @ralu UdpClient 是一个内置类,它对 Socket 进行了很好的包装以进行 UDP 处理...
  • @J4N 不存在的主机与关闭的端口不同...没有 100% 的远程诊断 UDP 端口的方法...您的目标到底是什么?
  • 我在我的局域网上的所有东西上都试过了,我总是得到一个超时,无论端口是否打开。太糟糕了。
【解决方案2】:

你不能。这是设计使然,因为 UDP 是无连接的。你必须在应用层解决这个问题。

【讨论】:

  • 可以,但不能“在应用层解决”。
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2011-06-22
相关资源
最近更新 更多