java端口扫描程序无法运行

时间:2016-11-04 03:57:54

标签: java sockets

我正在这里免费获取有关网络安全的在线课程https://cybersecuritybase.github.io/

他们希望你创建一个java端口扫描程序的课程,他们提供一些代码,你添加端口扫描程序部分,我遇到了问题。 Java不是我真正熟悉的语言,所以我觉得它很简单,但似乎无法弄明白。

代码在这里

package sec.portscanner;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.InetSocketAddress;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
import java.io.IOException;
public class PortScanner {

    final static int MIN_PORT = 1024;
    final static int MAX_PORT = 49151;

    public static void main(String[] args) throws Exception {
        Scanner reader = new Scanner(System.in);

        System.out.println("Which address should I scan?");
        String address = reader.nextLine();
        System.out.println("Start at port?");
        int start = Integer.parseInt(reader.nextLine());
        System.out.println("End at port?");
        int end = Integer.parseInt(reader.nextLine());

        Set<Integer> ports = getAccessiblePorts(address, start, end);
        System.out.println("");

        if (ports.isEmpty()) {
            System.out.println("None found :(");
        } else {
            System.out.println("Found:");
            ports.stream().forEach(p -> System.out.println("\t" + p));
        }
    }

    public static Set<Integer> getAccessiblePorts(String address, int start, int end) {
        Set<Integer> accessiblePorts = new TreeSet<>();
        start = Math.max(start, MIN_PORT);
        end = Math.min(end, MAX_PORT);

        for (int port = start; port <= end; port++) 
        {
            try {
                Socket socket = new Socket();
                socket.connect(new InetSocketAddress(address, port), 50000);
                socket.close();
            } catch(IOException e) {
                    System.out.println(e);
                    }
            }

        return accessiblePorts;
    }
}

我创建的部分是带套接字扫描的for循环。无论我提供什么地址,它总是打印出来没有找到,我不知道如何解决这个问题。任何指针都会很棒,我已经搜索过,从我看来没有什么是错的(至少我希望)

1 个答案:

答案 0 :(得分:4)

您没有添加到accessiblePorts设置

Socket socket = new Socket();
socket.connect(new InetSocketAddress(address, port), 50000);
socket.close();
accessiblePorts.add (port);