2012-05-28 66 views
1

我正在用Java寫一個端口掃描器。我正在使用for循環來計數從0到100的端口,在每個端口上構造一個套接字並查看它是否引發異常。但是,當我嘗試掃描非本地端口(例如「www.google.com」)時,它會掃描第一個端口,然後停止(字面上該程序正在等待),如果有人知道爲什麼我想知道這一點。 以下是掃描方法的代碼。請注意,變量ia是InetAddress對象在非本地主機上掃描端口

private void scan(int low, int high){ 
    for(int port =low; port<high; port++){ 
    try { 
    connection = new Socket(ia, port); 
    r.addPort(port); 
    System.out.println("port "+port+" open"); 
    connection.close(); 
    } catch (IOException e) { 
    System.out.println("port "+port+" not open"); 
    } 
} 
} 
+2

這就是有多少系統針對端口掃描進行辯護。他們在沒有回覆的情況下丟棄你的SYN數據包,所以你的掃描器將永遠等待(或者直到超時),以便永遠不會響應。順便說它叫黑洞。 – biziclop

回答

3

嘗試在套接字上設置超時。它會失敗得更快。

connection.setSoTimeout(10*1000); // milliseconds

+0

沒有工作,它仍然在等待超時我設置了 – lilroo

+0

你必須在調用阻塞操作之前設置它。 – WeMakeSoftware

+0

創建一個空套接字,設置超時時間,嘗試打開它 – WeMakeSoftware