2016-11-04 82 views
-1

我正在一个免费的在线课程,网络安全在这里,他们要你创建一个Java端口扫描过程的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

IM这样做当然,我不知道s ** t关于java :)即时通讯有错误'java.net.ConnectException:连接被拒绝:连接',这意味着我的服务器没有运行(谷歌搜索后),你遇到这种问题呢? – rockStar

+0

'socket.connect()'中的50000是什么?不要只说“端口”,因为端口已经在'InetSocketAddress()'中。为什么不是这样写的:'socket.connect(new InetSocketAddress(address,port),port);'? – atonus

回答

4

您不添加到accessiblePorts设置

尝试

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

真棒似乎工作谢谢我会确保这是我以后看。 – synking