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 构造函数抛出三个异常:
UnknownHostException - 如果无法确定主机的 IP 地址。
IOException - 如果创建套接字时发生 I/O 错误。
SecurityException - 如果存在安全管理器并且其 checkConnect 方法不允许该操作。

当端口已经在使用时,它们都不会被抛出。您可以尝试使用 bind() 方法,如果套接字已绑定,则会引发 IOException。

于 2012-06-27T09:06:50.380 回答
0

你对异常处理太不加选择了。只有 ConnectException 真正告诉您该端口未在使用中。所有其他例外都表明存在不同的问题。分别捕获和处理 ConnectException。

于 2012-06-27T11:55:42.937 回答