Wie erhalte ich den Computernamen von einer IP über Multicast-DNS?

17

Ich habe eine Liste von IP-Adressen in einem Netzwerk und die meisten unterstützen Multicast-DNS. Ich möchte in der Lage sein, den Servernamen aufzulösen, anstatt nur die IP-Adresse zu haben.

ping computer.local
64 bytes from 192.168.0.52: icmp_seq=1 ttl=64 time=5.510 ms
64 bytes from 192.168.0.52: icmp_seq=2 ttl=64 time=5.396 ms
64 bytes from 192.168.0.52: icmp_seq=3 ttl=64 time=5.273 ms

Funktioniert, aber ich möchte diesen Namen anhand der IP ermitteln können. Auch die Geräte strahlen nicht unbedingt Dienste aus, unterstützen aber definitiv mDNS-Broadcasts. Das Durchsuchen von Diensten wird also nicht funktionieren.

Adam
quelle
1
Welches Betriebssystem verwenden Sie? mdns-scan scheint unter linux eine option zu sein.
Zoredache
1
OS X, aber wenn ich eine Linux-Lösung bekomme, finde ich sicher ein Analogon in der Mac-Welt. mdns-scan sucht nach gesendeten Diensten, das wird also nicht funktionieren. Einige der Geräte senden keine Dienste, lösen jedoch ihre Adresse auf, wenn sie nach dem Namen abgefragt werden.
Adam

Antworten:

23

Da Sie die IP-Adressen bereits kennen, können Sie den umgekehrten Eintrag für jede IP-Adresse nachschlagen, um die zugehörige Weiterleitungsadresse zu erhalten:

$ dig -x 10.0.0.200 @224.0.0.251 -p 5353

; <<>> DiG 9.6.0-APPLE-P2 <<>> -x 10.0.0.200 @224.0.0.251 -p 5353
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54300
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;200.0.0.10.in-addr.arpa.   IN  PTR

;; ANSWER SECTION:
200.0.0.10.in-addr.arpa. 10 IN  PTR atj-mbp.local.

;; ADDITIONAL SECTION:
atj-mbp._device-info._tcp.local. 10 IN  TXT "model=MacBookPro3,1"

;; Query time: 2 msec
;; SERVER: 10.0.0.200#5353(224.0.0.251)
;; WHEN: Sat Jun 26 07:53:44 2010
;; MSG SIZE  rcvd: 126

Verwenden Sie für eine Shell-Skript-freundlichere Ausgabe '+ short':

$ dig +short -x 10.0.0.200 @224.0.0.251 -p 5353
atj-mbp.local.

Abhängig von Ihrem beabsichtigten Anwendungsfall gibt es möglicherweise eine geeignetere Methode zum Ausführen der Abfrage. Bitte kontaktieren Sie mich, wenn Sie weitere Informationen benötigen.

andrewtj
quelle
2
Irgendeine Idee, warum dies auf einem iOS-Gerät fehlschlagen könnte, auf dem keine Bonjour-Dienste ausgeführt werden? Es funktioniert auf einem Mac, auf dem sonst keine Bonjour-Dienste ausgeführt werden.
John Wright
Erwähnenswert ist, dass Sie auch herausfinden können, welche IP-Adressen sich im Netzwerk befinden, indem Sie arp-scanvon Homebrew oder Macports installiert werden. Oder, wenn Sie nur ein Gefühl für die Hosts im Netzwerk erhalten möchten, können Sie an Ihrem aktuellen ARP - Tabelle suchen einen Befehl bereits auf OS X: arp. Insbesondere können Sie den Befehl verwenden arp -n -i <interface> -l -a, wobei <interface>der Name der Netzwerkschnittstelle sein sollte, auf die Sie neugierig sind (z en0. B. ).
Parthian Shot
5

Unter Linux können Sie den Befehl getent aus der libc verwenden:

getent hosts 192.168.0.52

Oder installiere avahi-utils und starte

avahi-resolve-address 192.168.0.52
Tobu
quelle
Das Paket ist avahi-toolsauf Fedora und es ist das einzige, was auf dieser Seite funktioniert hat :)
Navin
-1

Nun, ich habe ein bisschen mehr darüber recherchiert, und als ich mDNDS und das Protokoll durchgesehen habe, sieht es so aus, als wäre das eigentlich nicht möglich. Es gibt eine Suchanforderung für das Protokoll zum Abrufen von Namen. Wenn Sie also nach einem Namen fragen, antwortet der entsprechende Client, es gibt jedoch keine Suchanforderung für eine IP. Es gibt auch keinen zentralen Speicher für Adressen.

Hoffe, dass dies jemand anderem hilft, da ich viel zu viel Zeit damit verbracht habe, dies aufzuspüren.

Wenn jemand andere Ideen zu diesem Thema hat, höre ich sie gerne.

Adam
quelle