我试图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响应。
yum install nc
(for centos) nc -ul 6111
nc -u <server> 6111
使用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; } }