2013-03-21 2 views
0

Я пытаюсь сделать сканер портов на Android, и я немного застрял. Я хочу посмотреть, открыт ли порт на маршрутизаторе/шлюзе по умолчанию, но ничего не работает. Я пытался использовать доступный, но я чувствую, что это может быть неправильно.Сканер порта Android

import java.net.InetAddress; 
import java.net.UnknownHostException; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.net.DhcpInfo; 
import android.net.wifi.WifiInfo; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 
import android.widget.TextView; 

public class portscan extends Activity { 

String targetHost; 
public int startPort = 1; //(for uses in later programming) 
public int endPort = 1000; 
private Intent scanIntent; 
InetAddress targetAddress; 
String targetHostName; 
WifiManager networkd; 
DhcpInfo details; 
public String gateway; 
TextView GW; 


protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    try { 
    setContentView(R.layout.port); 
    GW = (TextView)findViewById(R.id.gateway); 
    networkd = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    details = networkd.getDhcpInfo(); 
    String test = intToIp(details.gateway); 

    gateway = "Default Gateway: "+String.valueOf(details.gateway); 
    boolean isAvailable = false; 

     isAvailable = InetAddress.getByName(test).isReachable(80); //trying to see if port open 
     if (isAvailable == true) { 
      GW.setText("port 21 is up"); 

     } 
    } catch (Exception e) { 

    } 


} 

public String intToIp(int i) { //this converts the DHCP information (default gateway) into a readable network address 

     return (i & 0xFF)+ "." + 
       ((i >> 8) & 0xFF) + "." + 
       ((i >> 16) & 0xFF)+ "." + 
       ((i >> 24) & 0xFF); 
    } 
+0

Глядя на 'isReachbable (80)', я считаю необходимым указать, что аргумент представляет собой значение времени ожидания, а не номер порта_. Но неважно, просто не используйте его. –

ответ

0

Используя код, указанный ниже, вы можете добавить тайм-аут.

try { 
    Socket socket = new Socket(); 
    SocketAddress address = new InetSocketAddress(ip, port); 
    socket.connect(address, TIMEOUT); 
    //OPEN 
    socket.close(); 
} catch (UnknownHostException e) { 
    //WRONG ADDRESS 
} catch (SocketTimeoutException e) { 
    //TIMEOUT 
} catch (IOException e) { 
    //CLOSED 
} 
1

Не используйте isReachable, он не предназначен для сканирования портов (и ненадежен для чего-то еще тоже, на самом деле).

Для сканирования портов вы используете sockets. Псевдо-пример:

for (int port = 0; port <= 9999; port++) 
    { 
     try 
     { 
      // Try to create the Socket on the given port. 
      Socket socket = new Socket(localhost, port); 

      // If we arrive here, the port is open! 
      GW.setText(GW.getText() + String.Format("Port %d is open. Cheers!\n", port)); 

      // Don't forget to close it 
      socket.close(); 
     } 
     catch (IOException e) 
     { 
      // Failed to open the port. Booh. 
     } 
    } 
+0

спасибо за это, я попытаюсь использовать это в ближайшее время, но я должен спросить, что я попробовал что-то вроде этого, и ни один из портов не был открыт на 192.168.0.1 (путь по умолчанию по умолчанию), который я знаю, это загрузка plop? будет ли код, который вы предоставили, работать при чтении портов шлюзов по умолчанию ??? – user215470

Смежные вопросы