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);
}
}
};
}
Es gibt keine narrensichere Möglichkeit, dies zu tun. –
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. –