测试 UDP 端口连通性

测试 UDP 端口连通性

我正在尝试测试是否可以通过 UDP 访问远程服务器上的特定端口(我都可以访问)。

两台服务器都面向互联网。我使用 netcat 来监听某个端口。

然后我使用 nmap 检查该端口是否打开,但似乎并未打开。

Iptables 已关闭。

有什么建议可以解释为什么会这样吗?我最终要设置一个 VPN 隧道,但由于我对隧道还很陌生,因此在继续之前,我想确保在端口 UDP 1194 上具有连接性。

答案1

不存在所谓的“开放”UDP 端口,至少不是大多数人习惯认为的那种端口(即回答“好的,我已接受您的连接”之类的问题)。UDP 是无会话的,因此“端口”(即操作系统 IP 堆栈中的 UDP 协议)永远不会自行响应“成功”。

UDP 端口只有两种状态:监听或不监听。这通常意味着“进程在其上打开套接字”或“未打开任何套接字”。后一种情况应该很容易检测,因为系统应该用ICMP 目标不可达数据包代码为 3(端口不可达)。不幸的是,许多防火墙可能会丢弃这些数据包,因此如果您没有收到任何回复,您就无法确定端口是否处于此状态。而且,我们不要忘记 ICMP 也是无会话的,并且不会进行重传:端口不可达数据包很可能在网络上的某个地方丢失。

处于“侦听”状态的 UDP 端口可能根本没有响应(侦听该端口的进程只接收数据包,并不传输任何内容),或者可能会发回一些内容(如果该进程在接收后确实采取行动如果它通过 UDP 响应原始发送方 IP:端口)。因此,如果您没有收到任何回复,那么您永远无法确切知道状态如何。

您说您可以控制接收主机:这使您能够构建自己的协议来检查 UDP 端口的可达性:只需在接收主机上放置一个进程,该进程将监听给定的 UDP 端口回复(或向您发送电子邮件,或只是惊慌失措,unlink()主机文件系统上的所有内容……任何能够引起您注意的事情都可以)。

答案2

要测试 udp 端口​​是否响应,请使用netcat

一个例子手册页

nc -v -u -z -w 3 example.host 20-30
    Send UDP packets to ports 20-30 of example.host, and report which ones
    did not respond with an ICMP packet after three seconds.

当然,如果防火墙正在DROP运行(处理面向互联网的网关时通常会出现这种情况),您将不会收到 ICMP 响应。

答案3

  1. 在客户端和服务器上安装 nc:( yum install nc适用于 centos)
  2. 在服务器上监听 UDP 端口:(如果您正在测试 IPv6 连接,nc -ul 6111请添加该选项)-6
  3. 在客户端上nc -u <server> 6111
  4. 在客户端输入任何内容并按回车键 - 您应该在服务器上看到此文本

笔记:当你nc -ul在服务器上运行该命令时,它将仅有的连接第一个到达的连接。据我所知,如果不停止并重新启动,则无法在 ping 它的服务器之间切换nc -ul。事实上,如果您 ^C 停止客户端 ( nc -u ...),您也无法在不先重新启动服务器侦听器的情况下重新启动客户端。

答案4

使用 nmap 测试开放的 UDP 端口充满风险——没有三次握手来指示开放性。除非侦听进程响应 nmap 发送的任何内容,否则 nmap 无法区分未响应的开放端口和已过滤的端口。

更简单的方法是在一端使用 netcat 监听,在另一端使用 netcat 发送数据包,并查看它们是否到达另一端。确保两种方式都进行。您还可以tcpdump查看数据包是否到达了它们需要去的地方。

相关内容