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ć.


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ą.


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

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ę.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.