Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何实现UDP端口扫描?_Java_Networking_Udp - Fatal编程技术网

在Java中,如何实现UDP端口扫描?

在Java中,如何实现UDP端口扫描?,java,networking,udp,Java,Networking,Udp,新来的,我正在开发一个端口扫描程序,TCP运行良好,但我不知道如何进行UDP端口扫描。假设我想知道此LAN中另一台主机上的UDP端口XXXX是否打开。这段代码能起作用吗?如果没有,问题是什么 protected String scanUDP(InetAddress IP, int port) { try{ byte [] bytes = new byte[128]; DatagramSocket ds = new DatagramSocket();

新来的,我正在开发一个端口扫描程序,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错误消息,但这无法保证(例如,防火墙可能会自动丢弃数据包)。

,但这比TCP扫描更难


我在python中使用的一种方法是在三个或四个高编号UDP端口上缓慢扫描主机,并检查来自该主机的ICMP端口无法访问的消息。如果您恢复了其中任何一个,您就知道路径上允许ICMP消息,因此您可以可靠地推断缺少响应是一个开放端口。如果所有这些高编号端口都失败,您必须求助于应用程序感知技术来保证成功。请注意,这应该缓慢进行(可能每秒一次左右),以降低主机级ICMP速率限制的可能性。

谢谢,我知道这可以,但我不知道如何在Java中实现,有什么想法吗?DatagramSocket#send会抛出一个您可以捕获的PortUnreachableeException。