如何发现侦听端口x的Ip地址

时间:2012-10-04 21:27:43

标签: java sockets local-network port-scanning

我想扫描子网中的IP范围。 我想保存IP地址,这将在特定端口上听到。我使用这段代码:

        for (int host = 1; host < 255; host++) {
            String ip = networkAddress + host;

            Socket socket;
            try {
                socket = new Socket(ip, port);
                System.out.println(ip + "  +");
                serverList.add(ip);
                socket.close();
            }
            catch (Exception e) {
                System.out.println(ip + "  -");
            }
        }

但我的问题是需要花费太多时间...... 有没有更快的方法?

2 个答案:

答案 0 :(得分:1)

使用多线程。由于大部分时间实际上都花在等待响应上,因此您可以安全地创建100个(甚至200个)线程,将总时间减少两个数量级。使用Executors类创建一个线程池,并为每个主机提交一个任务。

请记住,serverList集合必须是线程安全的。使用shutdown()awaitTermination()对等待结果。或者,使用CompletionService收集结果。

答案 1 :(得分:0)

使用new Socket()(无参数),然后用短暂的超时时间调用Socket.connect(),比如几秒钟。

相关问题