我正在尝试测试是否可以通过 UDP 访问远程服务器(我都可以访问)上的特定端口。
两台服务器都面向互联网。我正在使用 netcat 来监听某个端口。
然后我使用 nmap 检查该端口是否打开,但它似乎没有打开。
Iptables 已关闭。
有什么建议为什么会这样吗?我最终要设置一个 VPN 隧道,但因为我对隧道很陌生,所以我想确保在继续之前我在端口 UDP 1194 上有连接。
我正在尝试测试是否可以通过 UDP 访问远程服务器(我都可以访问)上的特定端口。
两台服务器都面向互联网。我正在使用 netcat 来监听某个端口。
然后我使用 nmap 检查该端口是否打开,但它似乎没有打开。
Iptables 已关闭。
有什么建议为什么会这样吗?我最终要设置一个 VPN 隧道,但因为我对隧道很陌生,所以我想确保在继续之前我在端口 UDP 1194 上有连接。
要测试 udp 端口是否响应,请使用
netcat
.手册页中的示例:
当然,如果防火墙正在
DROP
运行(处理面向 Internet 的网关时通常是这种情况),您将不会收到 ICMP 响应。yum install nc
(for centos)nc -ul 6111
添加该选项)-6
nc -u <server> 6111
注意:当您
nc -ul
在服务器上运行该命令时,它只会连接到它的第一个连接。正如我发现的那样,您不能在不停止和重新启动的情况下在对它执行 ping 操作的服务器之间切换nc -ul
。事实上,如果您 ^C 停止客户端 (nc -u ...
),您也无法在不首先重新启动服务器侦听器的情况下重新启动客户端。没有“开放的”UDP 端口这样的东西,至少在大多数人习惯于思考的意义上不是这样的(它正在回答诸如“好的,我已经接受你的连接”之类的东西)。UDP 是无会话的,因此“端口”(阅读:操作系统 IP 堆栈中的 UDP 协议)永远不会自行响应“成功”。
UDP 端口只有两种状态:监听或不监听。这通常转化为“进程在其上打开一个套接字”或“没有打开任何套接字”。后一种情况应该很容易检测到,因为系统应该使用代码 = 3(端口无法访问)的ICMP 目标无法访问数据包进行响应。不幸的是,许多防火墙可能会丢弃这些数据包,所以如果您没有收到任何东西,您就不确定端口是否处于这种状态。我们不要忘记 ICMP 也是无会话的,并且不进行重传:端口不可达数据包很可能在网络上的某个地方丢失。
处于“侦听”状态的 UDP 端口可能根本不响应(侦听它的进程只接收数据包并且不传输任何东西)或者它可以发回一些东西(如果进程确实在接收到动作并且它通过通过 UDP 响应原始发件人 IP:端口)。所以再一次,如果你没有得到任何回报,你永远无法确定状态是什么。
您说您可以控制接收主机:这使您能够构建自己的协议来检查 UDP 端口可达性:只需在接收主机上放置一个进程,该进程将侦听给定的 UDP 端口并响应(或发送给您一封电子邮件,或者只是吓坏了
unlink()
主机文件系统上的所有内容……任何会引起您注意的东西都可以)。我遇到了类似的问题,并在此处使用 netcat 找到了一个很好的解决方案:http://en.wikipedia.org/wiki/Netcat#Test_if_UDP_port_is_open: _simple_UDP_server_and_client
nc -vzu <host> <port>
我能够确认我的 UDP 端口已打开,然后可以继续测试我的实际代码。
使用 nmap 测试开放的 UDP 端口充满了危险——没有三向握手来指示开放性。除非侦听进程响应 nmap 发送的任何内容,否则 nmap 无法区分未响应的开放端口和过滤端口。
更简单的方法是在一端使用 netcat 侦听并在另一端使用 netcat 发送数据包,并查看它们到达另一端。两种方式都要确定。您还
tcpdump
可以看到数据包到达他们需要去的地方。您可以使用以下命令扫描udp端口
您可以使用
netcat
(nc) 或执行此操作iperf
,假设您有另一台机器可以在网络外部进行测试。我的选择是nmap
从您环境之外的系统进行 UDP 扫描。你的 nmap 命令行是什么?混合中是否有任何硬件防火墙或其他设备?我有一个简单的方法。如果 UDP 服务器没有返回预期的数据,我就停止收集 dgram,假设它发生故障:
实际上,如果服务器侦听端口 6111 netcat 明确指出: