私は教育用の演習として 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);
ローカル マシンでのポートのスキャンと外部ホストでのポートのスキャンの大きな違いを見逃しているかどうか、誰か教えてもらえますか? それとも、私のコードに単純な問題がありますか?