Wie finde ich Android-Geräte in Ihrem Netzwerk?
Ich möchte in der Lage sein zu entdecken, die Android-Geräte in meinem Netzwerk und möglicherweise Gerät abrufen, einige Informationen über Sie. Dies ist sehr einfach mit Apple-Geräte, da laufen Sie Bonjour-Dienste. Aber ich kann nicht scheinen zu finden, ein ähnlicher Dienst läuft auf Android.
Diese arbeiten müssen ohne änderungen am Android Gerät, zu installieren einen Dienst, oder öffnen einige port. Es ist gedacht für die Arbeit mit Vanille Android-Geräte in der Weise, dass Bonjour hilft Ihnen, Vanille-Apple-Geräte. In der Lage zu sein einfach nur vergewissern, dass das Gerät mit Android ausreichen würde.
Gewählte Antwort: Obwohl es nicht die top-bewerteten Antwort (noch) nicht, schauen Sie sich bitte die Antwort von Luis. Als er erwähnt, können Sie einen DNS-lookup (mit Ihren lokalen DNS-server) zu entdecken Android-Geräte. Ich habe festgestellt, dass dies eine Erfolgsquote von 100%, als Android-Kräfte-Geräte verwenden ein hostname von android-_____. Dies ist offenbar schwer zu ändern, auf dem Handy, auch wenn es verwurzelt ist. Also ich denke, das ist eine ziemlich genaue Methode. Danke, Luis!
Example:
$ nslookup 192.168.1.104 192.168.1.1
Server: 192.168.1.1
Address: 192.168.1.1#53
104.1.168.192.in-addr.arpa name = android-711c129e251f14cf.\001.
Beispielcode: Wenn Sie wollte implementieren Sie diese in Java (z.B. laufen auf Android), können Sie nicht problemlos verwenden, getHostName (), weil es verwendet die externen DNS-Server. Sie möchten den lokalen DNS-server auf deinem router, zum Beispiel. Luis erwähnt unten, dass könnte man ändern Sie die DNS-Server der Wifi-Verbindung, aber das könnte möglicherweise brechen andere Dinge. Stattdessen habe ich gefunden, die dnsjava
Bibliothek zu äußerst hilfreich sein, senden Sie gezielte DNS-Anfragen. Hier finden Sie einige Beispiel-code mit der Bibliothek:
String ipAddress = "104.1.168.192";
String dnsblDomain = "in-addr.arpa";
Record[] records;
Lookup lookup = new Lookup(ipAddress + "." + dnsblDomain, Type.PTR);
SimpleResolver resolver = new SimpleResolver();
resolver.setAddress(InetAddress.getByName("192.168.1.1"));
lookup.setResolver(resolver);
records = lookup.run();
if(lookup.getResult() == Lookup.SUCCESSFUL) {
for (int i = 0; i < records.length; i++) {
if(records[i] instanceof PTRRecord) {
PTRRecord ptr = (PTRRecord) records[i];
System.out.println("DNS Record: " + records[0].rdataToString());
}
}
} else {
System.out.println("Failed lookup");
}
} catch(Exception e) {
System.out.println("Exception: " + e);
}
Das gibt mir die Ausgabe:
DNS Record: android-711c129e251f14cf.\001.
Bingo.
InformationsquelleAutor der Frage gnychis | 2012-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist eine sehr einfache Methode, die mir positive Ergebnisse in einigen verschiedenen Geräten.
Wenn ein Gerät eine Verbindung zu Ihrem router, den es erhält eine IP (also DHCP) und registrieren Sie einen Namen in DNS. Der name, der registriert ist, scheint zu sein, immer in der form
android_nnnnnnnn
.Natürlich, Sie können den Namen jeder computer mit dem gleichen Ansatz und der trick den check, was false positives ...
Auch, ich kann nicht garantieren, dass alle Geräte-Lieferanten sind nach dem gleichen Ansatz, aber ich habe festgestellt, dass es ordnungsgemäß funktioniert in einigen Geräten von verschiedenen Marken (einschließlich SDK-Ebenen), die ich getestet habe.
--BEARBEITET--
Wie es zu tun
Es hängt davon ab, wo Sie laufen würde, den code zu discovery-die android-Geräte. Unter der Annahme, dass Sie laufen würde, den code in ein Android-Gerät:
Ping
in Ihrem Netzwerk. Sie können den code in meine Antwort zu diesem post: execComd() zum ausführen eines ping-Befehls.Holen Sie sich die Namen der antwortenden Geräte mit dem code:
InetAddress inetAddress = InetAddress.getByName(string_with_ip_addr);
String name = inetAddress.getCanonicalHostName();
--EDIT 2--
Proof-of-concept
Die Methode unten wird nur ein prof-of-concept für was hab ich oben geschrieben.
Ich bin mit
isReachable()
- Methode zu generieren, die ICMP-Anfrage, die gesagt wird, in vielen Beiträgen, dass funktioniert nur mit gerooteten Geräten, was der Fall ist für das Gerät um es zu testen. Ich habe allerdings auch nicht geben, die root-Berechtigungen für die Anwendung dieser code ausgeführt, so glaube ich, konnte es nicht einstellen SIUD bit, das ist der Grund, warum einige clain diese Methode schlägt fehl. Ich möchte hier von jemandem testen Sie es auf einem nicht-gerooteten Gerät.Anrufen verwenden:
Gibt es in
hosts
eine Liste von Namen für Geräte reagieren auf ping-Anfrage.Grüße.
InformationsquelleAutor der Antwort Luis
Android ist nicht so einfach wie iOS. Es gibt keine Bonjour-äquivalent.
Android 4.0, Ice Cream Sandwich, vorgestellt Wi-Fi Direct Peer-to-Peer-Netzwerk. Zuerst hoffte ich, es könnte in der Lage sein, um gescannt werden, in der die Art, wie Ihr denkt, aber es hilft Android-Geräte kommunizieren untereinander ohne einen access point, also sind Sie nicht wirklich "im Netzwerk". Außerdem, ICS läuft auf nur einem Bruchteil der Android-Geräte.
Eher als eine aktive netscan Ansatz, Sie sind Links mit einer passiven monitoring-Ansatz. Wenn Ihr Netz gesichert ist, schnüffeln die verschlüsselte Paket ist möglich, aber unbequem. Sie müssen
Wollen Sie dies in Aktion zu sehen, Wireshark unterstützt WPA-Entschlüsselung.
Sobald Sie in der Lage sind, zum anzeigen der Wi-Fi-Verkehr, beachten Sie, die Android-Geräte neigen dazu, zu kommunizieren, mit bestimmten Google-Servern und deren HTTP-verbindungen haben User-Agent-strings, die identifiziert werden können.
Dies ist die Grundlage für eine brauchbare passive Lösung.
Tenable Network Security Produkte anbieten, scheinen diese Art von Ansatz.
Eine Andere Idee
@Michelle Cannon erwähnt Libelium ist Meshlium Xtreme, deren Ansatz wird nicht bekommen Sie es (nicht ohne guten up-to-date MAC-Adresse range-Tabellen). Aber es könnte ein Teil erreichen ein geringeres Ziel.
Sie können:
Dies ist möglicherweise durchführbar, wenn Ihr bereit, Geräte zu erkennen, die wahrscheinlich Android.
DHCP Fingerprinting
@Michelle Cannon vorgeschlagen, DHCP fingerprinting. Ich war mir nicht sicher, aber ich habe ihm zu danken für die Annahme, was ist sucht, wie die beste Wette für einfache passive Scannen. Als warnende Schwanz, würde ich gerne erklären, warum ich zu spät zur party.
Es gibt Dinge, die wir kennen, denkt, dass wir nicht wissen, und Dinge, die wir denken, wir wissen aber falsch sind.
In eine Menge von Möglichkeiten, es ist gut, dass Android verwendet den Linux-kernel. Aber es ist nicht gut, wenn Sie wollen, entdecken Sie Android-Geräte auf Ihr Netzwerk. Android-TCP/IP-stack von Linux ist HIERFÜR Android-Geräten Aussehen wird, wie Linux oder so dachte ich zunächst. Aber dann merkte ich, Linux hat viel der build-Konfiguration Parameter, so könnte es sein, etwas unverwechselbares über Android, wenn man Sie auf ein Netzwerk, aber was?
DHCP fingerprinting verwendet die genaue DHCP-Optionen angefordert, indem Sie das Gerät plus timing. Damit dies funktioniert, müssen Sie im Allgemeinen ein up-to-date Fingerabdruck-Datenbank, Spiel gegen. Zunächst sah es so aus fingerbank war, krähte Beschaffung dieser Daten, aber dann bemerkte ich, dass Ihre Dateien nicht gewesen aktualisiert seit fast einem Jahr. Mit all den verschiedenen Android-Geräte-Typen, ich glaube nicht, dass es praktisch zu halten aktualisiert Fingerabdrücke für ein einzelnes Projekt.
Aber dann sah ich den eigentlichen DHCP-Signaturen für Android und ich bemerkte dies:
Linux verwendet normalerweise dhclient als DHCP-client, aber Android ist mit dhcpcd. Android hat eine starke Präferenz für die Verwendung der lizenzierten software mit den BSD-Stil, wo möglich und dhcpcd verwendet eine BSD-Lizenz. Es scheint dhcpvendorcode werden könnten, dient als ein starker Indikator, dass ein mobiles Gerät mit Android.
DHCP-überwachung
Client verwendet DHCP, um eine IP-Adresse beim Eintritt in ein Netzwerk, so dass es beginnt, ohne eine IP-Adresse. Es umgeht dieses problem durch die Verwendung von UDP-broadcasts für die erste exchange. Auf Wi-Fi, sogar mit WPA -, broadcast-Datenverkehr wird nicht verschlüsselt. So kann man nur zu hören auf UDP-port 67 client-zu-server-traffic und 68 für die Rückseite. Sie nicht sogar benötigen, um Ihre Netzwerk-interface in den promiscuous-Modus. Sie können leicht überwachen, diesen Verkehr über ein Protokoll-analyzer wie Wireshark.
Zog ich den code schreiben, überwachen den Verkehr und beschlossen, die Python verwenden. Ich wählte pydhcplib um die details kümmern DHCP. Meine Erfahrung mit dieser Bibliothek war nicht glatt. Musste ich manuell herunterladen und speichern IN.py und TYPES.py support-Dateien. Und Ihre Paket-zu-string-Konvertierung beim verlassen des dhcpvendorcode leer. Es hat analysiert DHCP-Pakete korrekt, und so schrieb ich einfach meine eigenen print-code.
Hier der code überwacht den DHCP-Datenverkehr vom client zum server:
Dieser code basiert auf pydhcplib server Beispiel, denn es wartet auf client-Anfragen, wie ein server.
Als mein Nexus 7 Android 4.2 tablet verbindet, diese interessanten Informationen erfasst (redigiert):
Den host-Namen zu haben scheint ein festes format und ist leicht analysiert. Wenn Sie die IP-Adresse können Sie überwachen die server-zu-client-Verkehr. Hinweis: nur der erste exchange, wenn eine neue client zuerst zeigt, ohne eine IP-Adresse, übertragen. Zukunft-lease-Erweiterungen, etc.., nicht übertragen werden.
Reverse-DNS-Lookup
@Luis geschrieben, eine große Lösung, die zeigt, wie einfacher ist besser. Auch nachdem ich die Android-DHCP-client-Einstellung war, host_name, um android-5c1b97cdffffffff, ich glaube nicht, bitten Sie den router, um die Liste der Namen durch die Verwendung von reverse-DNS-lookups. Der router fügt die host_name -, es ist DNS-server, so können Sie immer noch Zugriff auf das Gerät, wenn seine IP-Adresse ändert.
Host_name wird erwartet, um zu bleiben, aufgeführt in DNS für die Dauer des DHCP-lease. Man könnte prüfen, ob das Gerät noch vorhanden ist von Ping.
Einen Nachteil je nach host_name ist, gibt es Möglichkeiten, dies verändert werden könnte. Es ist einfach für den Hersteller des Geräts oder der Träger, ändern Sie die host_name (obwohl nach der Suche, ich habe nicht in der Lage zu finden keine Beweise, die Sie jemals haben). Es gibt apps zur änderung von host-Namenaber Sie erfordern root-also das ist allenfalls ein Grenzfall.
Schließlich gibt es auch einen offenen Android Problem 6111: Ermöglichen ein hostname angegeben werden , hat derzeit 629 Sternen. Es wäre nicht verwunderlich, um zu sehen, konfigurierbare host_name in den Android Einstellungen an einem gewissen Punkt in der Zukunft, vielleicht bald. Also, wenn Sie beginnen, je nach host_name zu identifizieren, die Android-Geräte erkennen, könnte es sein, yanked out from under Sie.
Wenn du tust, live-tracking, ein weiteres potenzielles problem mit DNS-Reverse-Lookup müssen Sie entscheiden, wie Häufig Sie zu Scannen. (Natürlich ist dies nicht ein Problem, wenn Sie einfach nur einen one-time-snapshot.) Häufige Scannen verbraucht die Netzwerk-Ressourcen, seltene Blätter, die Sie mit veralteten Daten. Hier ist, wie das hinzufügen von DHCP-monitoring kann helfen:
Es ist zwar nicht einfach (auch nicht 100% genau), gibt es mehrere Verfahren, die machen es möglich zu entdecken Android-Geräte auf Ihr Netzwerk.
InformationsquelleAutor der Antwort jimhark
AFAIK Android-system bietet keine zeroconf app/Dienst, auf den es gebaut ist-in system app/service-stack. Zum aktivieren der auto-discovery auf dem tatsächlichen Gerät an das lokale Netzwerk, müssen Sie entweder installieren Sie einige Drittanbieter-zeroconf-app oder entwickeln Sie Ihre eigene app/Dienst, und installieren Sie es auf dem tatsächlichen Gerät, einige API-Optionen sind:
Bin ich nicht ganz klar über Ihre Anforderungen, wenn Sie wollen, dass etwas ähnliches (D. H. automatische Erkennung und Verbindung) auf vanilla Android-Geräte, können Sie wahrscheinlich verwenden Wi-Fi direct die steht jetzt auf einige später Gerät mit Android 4.0, allerdings erfordert es beide Geräte unterstützen Wi-Fi Direct und nur eine ad-hoc-P2P-Verbindung mit Wi-Fi ausgeschaltet, ähnlich wie eine bluetooth-Verbindung mit einer längeren Reichweite:
Für Wi-Fi-Direct-API-support, check-out-official guide - Die Verbindung Der Geräte Drahtlos.
InformationsquelleAutor der Antwort yorkw
Ich bin auf der Suche auf dieses eine denken
http://www.libelium.com/smartphones_iphone_android_detection
Besondere Anmerkung zu diesem
Tun, die Benutzer benötigen, um eine bestimmte app installiert oder interagieren, irgendwie erkannt zu werden?
Nein, der scan durchgeführt wird still, Meshlium nur erkennt das "beacon-frames", entstand durch die Wifi-und Bluetooth-radios integriert in Smartphones. Nutzer brauchen nur zu haben, mindestens eine der beiden WLAN-interfaces eingeschaltet ist.
Langer Zeit benutzen ich benutze eine app namens Stolperer auf meinem mac zu finden, wifi-Netze, ich denke, das ist ähnlich
Andere Ideen
Gut, wenn ich brauche, um zu bestimmen, android-Telefone in einem lokalen Netzwerk, wie würde ich es tun. Fehlt ein dns-Dienst läuft, ich habe nur ein paar Möglichkeiten
Die SSID, wenn es sich um ein broadcast - können nicht mir nichts sagen Der ip-Adresse - android können Sie haben eine Menge Kontrolle über die host naming also ich denke, man könnte definieren, die eine bestimmte ip-range auf Ihre android-Geräte. -nicht nützlich.
Alternativ können sagen, sehe ich ein unbekanntes Gerät im Netzwerk, wenn bluetooth eingeschaltet ist, dann bin ich die übertragung ein bluetooth-Gerät-Signatur SDPP, dass ich verwenden können, um abzuleiten mein Gerät geben.
Wenn ich einen Dienst ausführen, unterstützt android und ich wollte herausfinden, bestimmte android-Geräte in meinem Netzwerk, dann könnte ich mich einfach registrieren der mac-Adressen für diese Geräte, und achten Sie auf die Netzwerk.
Andere als die, die Sie würde ausführen müssen, um entweder einen bonjour (dns-sd) oder upnpp dameon auf dem Gerät.
InformationsquelleAutor der Antwort Michelle Cannon
Aktualisierte Antwort
Sorry, habe ich nicht verstanden, die ursprüngliche Frage richtig. Nur dein Kommentar machte es wirklich mir klar, dass Sie nicht wollen, um zu installieren alles auf den Zielgeräten, aber Sie wollen nur einen Weg zu entdecken, random-Telefone in Ihrem Netzwerk.
Ich bin nicht sicher, ob dies wirklich möglich sein, so, wie Sie es wollen. Ohne Netzwerk-discovery-Dienst läuft auf Android, werden Sie nicht finden, das Gerät in den ersten Platz. Natürlich können Sie einige low-level-Netzwerkprotokolle aber das würde Ihnen nur ein Indikator, dass es etwas gibt, aber nicht, was es ist (ein Android-Gerät, PC, was auch immer).
Der vielversprechendste Ansatz wäre zu prüfen, für die vorinstallierten apps, die Netzwerk-Funktionalität in irgendeiner Form. E. g. Samsung-Geräte haben Kies Air (wenn der Benutzer es), Motorola werden mithilfe von UPnP für Ihre Media-Server und HTC hat etwas eigenes, als auch, wenn ich mich richtig erinnere. Es gibt jedoch keine app, die installiert auf allen Android-Geräten von allen Herstellern und Luftfahrtunternehmen. Sie können also nicht darauf verlassen, dass allein eine von denen, aber würde überprüfen müssen, um für die verschiedenen Dienste mit Ihren speziellen Protokollen und Verhaltensweisen, um zusätzliche Informationen über das Gerät. Und natürlich müsste der Benutzer um die Funktionalität zu aktivieren, damit Sie es verwenden.
Alte Antwort
Zusätzliche alternative zu yorkw Liste ist AllJoyn von Qualcomm. Es ist ein open-source-cross-platform-discovery und peer-to-peer-Kommunikation Rahmen, den ich in der Vergangenheit verwendet habe, mich schon.
Obwohl Qualcomm ist ein grosser sponsor von AllJoyn dies bedeutet nicht, dass Sie brauchen, einen Qualcomm-Chipsatz in Ihr definieren. In der Tat AllJoyn funktioniert auf jedem Chipsatz inklusive Intel und nVidia. Es erfordert nicht verwurzelt Telefone oder andere änderungen an der Android-framework und funktioniert einfach "out of the box" verwenden von Wi-Fi und/oder Bluetooth-pairing-Methoden.
InformationsquelleAutor der Antwort André
Lerne ich eine Menge von diesem Thema.
gibt es auch etwas namens dhcp fingerprinting, der scheinbar so unterschiedliche Geräte anders handeln, um die Art von Netzwerk-scans, die wir diskutiert haben, wie diejenigen, die mit NMAP einen linux-scanner. Karten für das Verhalten von diesen Sonden sind über das internet verfügbar.
http://www.enterasys.com/company/literature/device-profiling-sab.pdf
https://media.defcon.org/dc-19/presentations/Bilodeau/DEFCON-19-Bilodeau-FingerBank.pdf
http://community.arubanetworks.com/t5/ArubaOS-and-Mobility-Controllers/COTD-DHCP-Fingerprinting-how-to-ArubaOS-6-0-1-0-and-above/td-p/11164
http://myweb.cableone.net/xnih/
InformationsquelleAutor der Antwort Michelle Cannon
Hier ist ein one-liner, die pings alle Maschinen auf Ihrem Netzwerk (vorausgesetzt, das Netzwerk ist
192.168.1.x
) und macht einen reverse-lookup auf den Namen:Erfordert GNU parallel zu arbeiten. Sie können installieren, unter OSX mit "brew install parallel"
Daraus können Sie schauen Sie sich einfach die Geräte mit dem Namen
android-c40a2b8027d663dd.home.
oder was auch immer.Dann können Sie versuchen, ausgeführt nmap -O auf ein Gerät, um zu sehen, was Sie sonst noch herausfinden können:
Aber es ist nicht wirklich fruchtbar.
InformationsquelleAutor der Antwort Will Schenk