2016-11-04 118 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