我在 Java 中编写一个端口扫描器作为一个教育练习,我遇到了一个问题。当我扫描本地计算机上的端口时,我的程序运行良好,但是当我尝试扫描外国计算机上的端口时,进程就会冻结。这是我的扫描方法的代码:
public void scan(InetAddress ad, int start, int end){
for(int i=start; i<=end; i++){
try{
socket = new Socket(ad, i);
System.out.println("Port "+i+"is open");
}catch(Exception e){
System.out.println("Port "+i+"is not open");
}
}
}
到目前为止,当主机名是我的环回地址或只是“localhost”时它可以工作,它甚至可以与我的 IP 地址一起工作。但是,例如当我解析 www.google.com 的 IP 甚至给它在同一网络上的另一台计算机的 IP 地址时,程序将在扫描第一个端口后冻结。
我正在解析这样的IP地址:
inetAddressObject = InetAddress.getByName(hostNameString);
谁能告诉我我是否遗漏了在本地计算机上扫描端口和在外部主机上扫描端口之间的巨大差异?还是我的代码有一些简单的问题?