测试 UDP 端口连通性

Loc*_*ock 67 networking centos udp

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

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

然后我使用 nmap 检查该端口以查看它是否打开,但它似乎没有。

iptables 已关闭。

任何建议为什么会这样?我最终要设置一个 VPN 隧道,但是因为我对隧道很陌生,所以我想确保在推进之前我在端口 UDP 1194 上有连接。

mot*_*bói 79

要测试 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.
Run Code Online (Sandbox Code Playgroud)

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

  • 这个回答给了我一个误报,相比之下,Sasha 的回答展示了我的期望。 (4认同)

Luk*_*404 60

没有“开放”UDP 端口这样的东西,至少在大多数人习惯认为的意义上不是(这是回答“好的,我已经接受了你的连接”)。UDP 是无会话的,因此“端口”(读作:操作系统 IP 堆栈中的 UDP 协议)永远不会自行响应“成功”。

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

处于“侦听”状态的 UDP 端口可能根本不响应(侦听它的进程只接收数据包而不传输任何内容)或者它可以发回一些东西(如果进程确实在接收时采取行动,并且它按照通过 UDP 响应原始发件人 IP:port)。再说一次,如果你没有得到任何东西,你永远无法确定状态是什么。

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


Sas*_*sha 54

  1. 都在客户端和服务器上安装 nc:( yum install nc对于centos)
  2. 在服务器上监听 UDP 端口: nc -ul 6111
  3. 在客户端 nc -u <server> 6111
  4. 在客户端上输入任何内容并按 Enter - 您应该在服务器上看到此文本

注意:当您nc -ul在服务器上运行该命令时,它只会连接到它的第一个连接。正如我发现的那样,您不能在不停止和重新启动的情况下在 ping 它的服务器之间切换nc -ul。事实上,如果你 ^C 停止客户端 ( nc -u ...),你也不能在没有首先重新启动服务器侦听器的情况下重新启动客户端。

  • 我喜欢这个聪明的答案,因为它满足了我自己对 UDP 如何“发送和忘记”的理解(和误解!),并且所有确认只能从正确的配置中获得。因素太多。这个响应给出了一个非常简单、明确的调用和响应,它要么工作要么不工作,改变配置、冲洗和重复。 (3认同)
  • $ sudo apt install netcat(适用于 ubuntu) (2认同)

小智 14

我遇到了类似的问题,并在这里使用 netcat 找到了一个很好的解决方案:http : //en.wikipedia.org/wiki/Netcat#Test_if_UDP_port_is_open : _simple_UDP_server_and_client

nc -vzu <host> <port>

我能够确认我的 UDP 端口已打开,然后可以继续测试我的实际代码。


wom*_*ble 10

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

简单得多的只是在一端使用 netcat 侦听并在另一端使用 netcat 发送数据包,然后看到它们到达另一端。两种方式都可以确保。您还tcpdump可以看到数据包到达它们需要去的地方。


小智 6

您可以使用以下命令扫描 udp 端口

nmap -sU -v <hostname or ip>
Run Code Online (Sandbox Code Playgroud)