如何在Java中加速端口443扫描

时间:2012-07-04 08:30:00

标签: java sockets network-programming

我有以下代码检查端口443是否在给定主机中打开。

import java.net.*;
import java.io.IOException;

public class Scan {

    public static void main (String[] args) {
        String host="put hostname here";
        int port=443;

        try{
            Socket s = new Socket(host,port);
            System.out.println("Can listen on port "+port+
                       " in host "+host+" is open");

        } //end try
        catch (IOException ex)
        {
            //remote host is not listening on port 443
            System.out.println("Can not listen on port "+port+
                       " of host "+host);
        } //end catch
    }
}

我的问题是:如果端口443未在某个主机中打开,这会使我的程序非常慢,因为我需要检查主机组。有没有办法改进代码,使扫描端口443更快,同时保持可靠性?有没有办法使用java编程进行端口扫描而不是使用套接字?

请不要在扫描之前ping不会,因为我连接的主机名已经连接,我只需要检查端口443是打开还是关闭。

1 个答案:

答案 0 :(得分:2)

如果您必须扫描一组主机,只需在一个单独的线程中运行每个检查。这将确保一个主机不会阻止您处理其他主机。

长而独立的IO操作是多线程的经典用例。您甚至不必担心计算机上的CPU数量,因为它们在等待网络响应时几乎不会做任何事情。按照其他人的建议添加超时也是一种合理的补充,除了多线程之外还可以使用。