2016-08-27 5 views
1

Ich schrieb ein Skript, das alle lokalen IPs im '0' Netzwerk (192.168.0. *) Durchläuft..Gethostbyaddr() funktioniert nicht auf allen Geräten. Warum? (Python)

Ich verwende eine Schleife mit socket.gethostbyaddr(ip_modified_by_the_loop_each_time).

Die Schleife gibt mir 3 Geräte ihre Hostnamen zurück. Jetzt habe ich festgestellt, dass es nicht mindestens 4 Geräte findet.

  • Es wickelt meinen Windows Laptop, nicht mein Android Phone. Es findet
  • ein MacBook, nicht der iMac, nicht das andere MacBook. Es ist auch nicht
  • finden Sie ein Telefon.

Ich weiß, dass alle Geräte online sind und eine IPv4-Adresse haben.

Ich kann sie sehr gut anpingen, es reagiert gut. Aber wenn ich socket.gethostbyaddr(ip_modified_by_the_loop_each_time) benutze, wird ein Fehler ausgegeben.

Ich habe eine try:/except: Anweisung verwendet, um den Fehler zu umgehen, aber es kann immer noch nicht mein Telefon nach IP finden und den Hostnamen, aber ich weiß, dass es da ist. Ich benutze Python 3.3

Warum ist das passiert, wie das zu beheben?

Vielen Dank.

Antwort

0

gethostbyaddr versucht, den Hostnamen für eine bestimmte IP-Adresse herauszufinden, indem entweder lokal gespeicherte Informationen (d. H. /etc/hosts) verwendet oder eine umgekehrte DNS-Suche durchgeführt wird. Das Ergebnis hängt nicht davon ab, ob der Host online ist oder nicht, sie hängen nur von der Verfügbarkeit dieser Informationen ab.

Und diese Informationen können auch nicht vertraut werden. Zum Beispiel könnte der DNS Betreiber einer Domain die folgenden Datensätze hinzu:

test.example.com  A public.ip.of.test 
    public.ip.of.test  PTR localhost. 

In diesem Fall eine Lookup (gethostbyname) von test.example.com würde die IP-Adresse dieses Rechners zurückzukehren, während ein Reverse-Lookup (gethostbyaddr) behaupten würde, dass die Hostname ist localhost. Und wenn der PTR-Datensatz fehlt würde gethostbyaddr fehlschlagen, auch wenn der Host online ist.

Siehe auch wikipedia: reverse dns lookup.

Verwandte Themen