2016-06-07 23 views
1

Ich entwickle zwei mobile Anwendung (Android und iOS) scannen und zu entdecken, ich habe alle Host im Netzwerk zu entdecken.Wie alle Host im Netzwerk

Ich habe eine Funktion implementiert, die alle IP-Adressen in einem bestimmten Bereich pingt, zum Beispiel, wenn meine IP-Adresse 192.168.1.3 ist. Ich scanne diesen Bereich 192.168.1.1/192.168.1.255.

Die Funktion discorver einige Host, aber nicht alle und ich verstehe nicht den Grund, ich verwendete "Fing" -Anwendung, um meine Ergebnisse zu vergleichen, in diesem Fall meine Funktion entdecken 18/20 Hosts aber Fing 43 Host (alle).

Ein weiteres Problem ist die Rechenzeit, verwende ich Threads aber ping Lösung Abfall mehr Zeit, um „ping“ alle Adresse.

Wie ich alle Gastgeber in meinem Netzwerk entdecken?

Könnte jemand mir den Grund erklären, weil ich nicht alle Gastgeber wie Fing entdecken können?

Quellcode, die ich verwendet:

private static final int NB_THREADS = 10; 

public void doScan() { 
    Log.i(LOG_TAG, "Start scanning"); 

    ExecutorService executor = Executors.newFixedThreadPool(NB_THREADS); 
    for(int dest=0; dest<255; dest++) { 
     String host = "192.168.1." + dest; 
     executor.execute(pingRunnable(host)); 
    } 

    Log.i(LOG_TAG, "Waiting for executor to terminate..."); 
    executor.shutdown(); 
    try { executor.awaitTermination(60*1000, TimeUnit.MILLISECONDS); } catch (InterruptedException ignored) { } 

    Log.i(LOG_TAG, "Scan finished"); 
} 

private Runnable pingRunnable(final String host) { 
    return new Runnable() { 
     public void run() { 
      Log.d(LOG_TAG, "Pinging " + host + "..."); 
      try { 
       InetAddress inet = InetAddress.getByName(host); 
       boolean reachable = inet.isReachable(1000); 
       Log.d(LOG_TAG, "=> Result: " + (reachable ? "reachable" : "not reachable")); 
      } catch (UnknownHostException e) { 
       Log.e(LOG_TAG, "Not found", e); 
      } catch (IOException e) { 
       Log.e(LOG_TAG, "IO Error", e); 
      } 
     } 
    }; 
} 
+0

Es gibt keine narrensichere Möglichkeit, dies zu tun. –

+0

Sie sollten sich [nmaps Port-Scan-Techniken] (https://nmap.org/book/man-port-scanning-techniques.html) ansehen, wenn Sie diese Art von Funktion implementieren möchten. –

Antwort

1

lief ich eine Paketerfassung (siehe unten), während Fing wurde mein Heimnetzwerk scannen, es scheint, es nicht Pings nicht verwendet, sondern arp-Anfragen. Es scannt die gesamte IP in der Reihenfolge, also müssen Sie vielleicht nur Ihren Code anpassen, um ARP-Anfragen zu verwenden.

(192.168.1.167 ist die IP von meinem Handy).

sudo tcpdump -ni eth0 Host 192.168.1.167

tcpdump: ausführliche Ausgabe unterdrückt, verwenden -v oder vv für die vollständige Protokolldekodierung auf eth0 hören, kulissenartige EN10MB (Ethernet), Capture-Größe 65535 Bytes

...

01: 18: 32,695316 ARP, Antrag wer-hat 192.168.1.167 192.168.1.2 sagen, Länge 46 01: 18: 32,715596 ARP, Antrag wer-hat 192.168.1.4 sagen 192.168.1.167, Länge 46 01:18 : 32.725965 ARP, Anfrage who-hat 192.168.1.5 sagen 192.168.1.167, Länge 46 01: 18: 32.736293 ARP, Anfrage who-hat 192.168.1.6 sagen 192.168.1.167, Länge 46 01: 18: 32.746567 ARP, Anfrage wer -hat 192.168.1.7 sagen 192.168.1.167, Länge 46 01: 18: 32,761394 ARP, anfordern 192.168.1.8 192.168.1.167 sagen, wer-hat, Länge 46 01: 18: 32,769972 ARP, anfordern 192.168.1.9 wer-hat sagen 192.168.1.167, Länge 46 01: 18: 32,777456 ARP, Antrag wer-hat 192.168.1.10 192.168.1.167 sagen, Länge 46

...

UPDATE: ich habe vergessen, dass Fing zu erwähnen auch Läuft ein Mac Klo kup, Sie können jeden Mac von fing bekommen und bestätigen Sie es auf der folgenden Website: https://www.wireshark.org/tools/oui-lookup.html. Es scheint, dass die App andere Anfragen und Lookups durchführt, aber das Grundlegende wird hier erklärt, glaube ich.