protected String scanUDP(InetAddress IP, int port)
{
try{
byte [] bytes = new byte[128];
DatagramSocket ds = new DatagramSocket();
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, IP, port);
ds.setSoTimeout(1000);
ds.send(dp);
dp = new DatagramPacket(bytes, bytes.length);
ds.receive(dp);
ds.close();
}
catch(InterruptedIOException e){
return "CLOSED";
}
catch(IOException e){
return "CLOSED";
}
return "OPEN";
}
只是一个新手,还在学习。
谢谢!
答案 0 :(得分:8)
UDP是无连接的,因此您无法期望响应数据包。如果端口关闭,您可能会收到ICMP错误消息,但不能保证这一点(例如防火墙可以静默丢弃数据包)。
答案 1 :(得分:3)
UDP Port Scanning is possible,但它比TCP扫描更难。
我在python中使用的一种方法是慢慢扫描三个或四个高编号UDP端口上的主机,并检查来自该主机的ICMP Port Unreachable消息。如果你得到任何一个,你知道路径上允许ICMP消息,所以你可以可靠地推断缺少响应是一个开放的端口。如果所有这些高编号端口都出现故障,您必须采用应用感知技术来保证成功。请注意,这应该缓慢完成(可能每隔一秒左右),以降低主机级ICMP速率限制的可能性。