Jak uzyskać nazwę komputera z adresu IP za pośrednictwem usługi DNS multiemisji?

17

Mam listę adresów IP w sieci i większość z nich obsługuje DNS multiemisji. Chciałbym móc rozpoznać nazwę serwera zamiast mieć tylko adres IP.

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

Działa, ale chciałbym móc określić tę nazwę na podstawie adresu IP. Również urządzenia niekoniecznie transmitują jakiekolwiek usługi, ale zdecydowanie obsługują transmisję mDNS. Dlatego przeglądanie usług nie będzie działać.

Adam
źródło
1
Z jakiego systemu operacyjnego korzystasz? mdns-scan wydaje się być opcją dla Linuksa.
Zoredache
1
OS X, ale jeśli uda mi się uzyskać rozwiązanie linux, jestem pewien, że znajdę analogię w świecie Mac. mdns-scan szuka rozgłaszanych usług, więc to nie zadziała. Niektóre urządzenia nie emitują żadnych usług, ale rozpoznają swój adres, gdy są pytane o nazwę.
Adam

Odpowiedzi:

23

Ponieważ znasz już adresy IP, możesz wyszukać odwrotny wpis dla każdego adresu IP, aby uzyskać powiązany adres przekazania:

$ 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

Aby uzyskać wyniki bardziej przyjazne skryptom powłoki, użyj „+ short”:

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

W zależności od zamierzonego przypadku użycia może być bardziej odpowiednia metoda wykonania zapytania. Jeśli potrzebujesz dodatkowych informacji, skontaktuj się ze mną.

andrewtj
źródło
2
Wiesz, dlaczego może się to nie powieść na urządzeniu z systemem iOS, na którym nie działają żadne usługi Bonjour? Działa z komputerem Mac, który w innym przypadku nie obsługuje żadnych usług Bonjour.
John Wright,
Warto zauważyć, że możesz również dowiedzieć się, które adresy IP są w sieci, używając arp-scanzainstalowanego z homebrew lub macports. Lub jeśli po prostu chcesz poczuć hostów w sieci, można spojrzeć na bieżącej tabeli za pomocą polecenia ARP już na OS X: arp. W szczególności możesz użyć polecenia arp -n -i <interface> -l -a, gdzie <interface>powinna być nazwa interfejsu sieciowego, który Cię interesuje (np en0.).
Parthian Shot
5

W systemie Linux możesz użyć polecenia getent z libc:

getent hosts 192.168.0.52

Lub zainstaluj avahi-utils i uruchom

avahi-resolve-address 192.168.0.52
Tobu
źródło
Pakiet znajduje się avahi-toolsw Fedorze i to jedyna rzecz na tej stronie, która zadziałała :)
Navin
-1

Cóż, zrobiłem o wiele więcej badań na tym, a patrząc na mDNDS i protokół, wygląda na to, że tak naprawdę nie jest to możliwe. Protokół żąda wyszukania w celu pobrania nazwy, więc gdy poprosisz o nazwę, odpowiedni klient odpowie, ale nie ma żądania adresu IP. Nie ma też centralnego sklepu z adresami.

Mam nadzieję, że pomoże to komuś innemu, ponieważ spędziłem zbyt wiele czasu na śledzeniu tego.

Jeśli ktoś ma jakieś inne pomysły na ten temat, chętnie je usłyszę.

Adam
źródło