在这里,我正在开发端口扫描程序,TCP运行良好,但我不知道如何对UDP端口进行扫描.假设我想知道此LAN中另一台主机上的UDP端口XXXX是否已打开.这段代码会完成这项工作吗?如果没有,问题是什么?
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"; }
只是一个新手,还在学习.谢谢!
UDP是无连接的,因此您无法期望响应数据包.如果端口关闭,您可能会收到ICMP错误消息,但不能保证这一点(例如防火墙可以静默丢弃数据包).