由于UDP协议是非面向连接的,对UDP端口的探测也就不可能像TCP端口的探测那样依赖于连接建立过程(不能使用telnet这种tcp协议类型命令),这也使得UDP端口扫描的可靠性不高。所以虽然UDP协议较之TCP协议显得简单,但是对UDP端口的扫描却是相当困难的。下面具体介绍一下UDP扫描方案:
方案1:利用ICMP端口不可达报文进行扫描
本方案的原理是当一个UDP端口接收到一个UDP数据报时,如果它是关闭的,就会给源端发回一个ICMP端口不可达数据报;如果它是开放的,那么就会忽略这个数据报,也就是将它丢弃而不返回任何的信息。
优点:可以完成对UDP端口的探测。
缺点:需要系统管理员的权限。扫描结果的可靠性不高。因为当发出一个UDP数据报而没有收到任何的应答时,有可能因为这个UDP端口是开放的,也有可能是因为这个数据报在传输过程中丢失了。另外,扫描的速度很慢。原因是在RFC1812的中对ICMP错误报文的生成速度做出了限制。例如Linux就将ICMP报文的生成速度限制为每4秒钟80个,当超出这个限制的时候,还要暂停1/4秒。
方案2:UDP recvfrom()和write()扫描
本方案实际上是对前一个方案的一些改进,目的在于解决方案1中所需要的系统管理员的权限问题。由于只有具备系统管理员的权限才可以查看ICMP错误报文,那么在不具备系统管理员权限的时候可以通过使用recvfrom()和write()这两个系统调用来间接获得对方端口的状态。对一个关闭的端口第二次调用write()的时候通常会得到出错信息。而对一个UDP端口使用recvfrom调用的时候,如果系统没有收到ICMP的错误报文通常会返回一个EAGAIN错误,错误类型码13,含义是“再试一次(Try Again)”;如果系统收到了ICMP的错误报文则通常会返回一个ECONNREFUSED错误,错误类型码111,含义是“连接被拒绝(Connect refused)”。通过这些区别,就可以判断出对方的端口状态如何。
优点:不需要系统管理员的权限。
缺点:除去解决了权限的问题外,其他问题依然存在。
Java 探测udp端口是否打开 如何探测udp端口
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
如何探测UDP端口是否开放
如何探测UDP端口是否开放
linux ip协议 windows系统 -
探测核心端口是否down
探测核心端口是否down
服务器 核心交换机