2

使用中のポートを検出するポートスキャナーを設計しています。問題は、一部のポートが使用されていることはわかっていても、すべてのポートが使用されていないことを示していることです。問題を特定するのに助けが必要です。これが私のコードです。


package portscanner;

import java.net.Socket;
import java.util.Scanner;

/**
 *
 * @author DeLL
 */
public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    System.out.println("Enter the range of ports to be scanned:");
    Scanner ob=new Scanner(System.in);
    int start=ob.nextInt();
    int stop=ob.nextInt();
    if(start<0||stop<0||start>65535||stop>65535){
        System.out.println("Invalid Range!!!");
    }
    for(int i=start;i<=stop;i++){
        try{
            Socket sock = new Socket("127.0.0.1",i);
            System.out.println("Port in use :"+i);
            sock.close();
        }
        catch(Exception e){
            System.out.println("Port not in use: "+i);
        }
    }
}

}

4

2 に答える 2

2

そこを見る:http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#Socket%28java.lang.String,%20int%29

Socket コンストラクターは 3 つの例外をスローします。
UnknownHostException - ホストの IP アドレスを判別できなかった場合。
IOException - ソケットの作成時に I/O エラーが発生した場合。
SecurityException - セキュリティーマネージャーが存在し、その checkConnect メソッドが操作を許可しない場合。

ポートがすでに使用されている場合は、いずれもスローされません。ソケットがすでにバインドされている場合は、IOException をスローする bind() メソッドを使用してみることができます。

于 2012-06-27T09:06:50.380 に答える
0

例外処理に無差別すぎます。ConnectExceptionだけが、ポートが使用されていないことを実際に通知します。他のすべての例外は、別の問題を示しています。ConnectExceptionを個別にキャッチして処理します。

于 2012-06-27T11:55:42.937 に答える