testingUDP端口连接

我试图testing是否可以通过UDP到达远程服务器上的特定端口(我可以访问这两个端口)。

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

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

Iptables已closures。

任何build议,为什么这可能是? 我最终将build立一个VPN隧道,但是因为我对隧道很陌生,所以我想在推进之前确保在端口UDP 1194上有连接。

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

UDP端口只有两种状态:听还是不听。 这通常意味着“通过进程打开一个套接字”或“没有任何套接字打开”。 后一种情况应该很容易检测,因为系统应该使用代码= 3(端口不可达)的ICMP目的不可达分组来响应。 不幸的是,许多防火墙可能会削减这些数据包,所以如果你没有得到任何回报,你不知道端口是否处于这种状态。 而且我们不要忘记,ICMP也是会话较less,不会重传的:端口不可达的数据包很可能会丢失在networking的某个地方。

处于“监听”状态的UDP端口无法做出任何响应(监听它的进程只接收到数据包,不会传输任何内容),或者可以发回一些内容(如果进程的行为对接收产生影响 UDP到原始的发送者IP:端口),所以如果你没有得到任何回报,那么你再也不能确切知道什么是状态。

你说你可以控制接收主机:这使得你可以构build你自己的协议来检查UDP端口的可达性:只要在接收主机上放一个进程,监听给定的UDP端口回应(或者发送给你一个电子邮件,或只是吓坏了,并unlink()主机文件系统上的所有东西…任何会引起你注意的事情)。

要testingudp端口是否响应,请使用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 ,在处理面向networking的网关时通常是这样,您将不会收到ICMP响应。

  1. 都在客户端ans服务器上安装nc: yum install nc (for centos)
  2. 在服务器上侦听UDP端口: nc -ul 6111
  3. 在客户端nc -u <server> 6111
  4. 在客户端键入任何内容,然后按回车 – 您应该在服务器上看到这个文本

使用nmaptesting打开的UDP端口充满了危险 – 没有三方握手来表示开放性。 除非侦听进程响应nmap发送的任何内容,否则nmap无法区分未响应的打开端口和已过滤的端口。

更简单的方法是用netcat监听一端,并在另一端使用netcat发送数据包,并看到它们到达另一端。 做到这一点,只要确定。 您也可以通过tcpdump来查看数据包到达他们需要去的地方。

我有一个类似的问题,并find一个很好的解决scheme使用netcat在这里: http : //en.wikipedia.org/wiki/Netcat#Test_if_UDP_port_is_open : _simple_UDP_server_and_client

nc -vzu <host> <port>

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

你可以用netcat (nc)或iperf来做这件事,假设你有另一台机器在networking外部进行testing。 我的select是从环境以外的系统进行nmap UDP扫描。 你的nmap命令行是什么? 组合中是否有硬件防火墙或其他设备?

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

 nmap -sU -v <hostname or ip> 

我有一个简单的方法。 如果UDP服务器不返回预期的数据,我只是停止收集dgrams,假设它下降了:

 LINE: while(1) { my $line; my $flags; local $SIG{ALRM} = sub {die "exceeded timeout for recv"}; alarm 5; eval { $socket->recv($line,2024,$flags); }; unless($line =~ /\{.*\}/){ if($verbose){ print STDERR "Invalid or empty dgram:\n",'"', $line, '"',"\n"; } last LINE; } }