我正在这里免费获取有关网络安全的在线课程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循环。无论我提供什么地址,它总是打印出来没有找到,我不知道如何解决这个问题。任何指针都会很棒,我已经搜索过,从我看来没有什么是错的(至少我希望)
答案 0 :(得分:4)
您没有添加到accessiblePorts
设置
试
Socket socket = new Socket();
socket.connect(new InetSocketAddress(address, port), 50000);
socket.close();
accessiblePorts.add (port);