Làm cách nào để lấy tên máy từ IP qua Multicast DNS?


17

Tôi có một danh sách các địa chỉ IP trên mạng và hầu hết chúng đều hỗ trợ DNS phát đa hướng. Tôi muốn có thể phân giải tên máy chủ thay vì chỉ có địa chỉ 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

Hoạt động, nhưng tôi muốn xác định tên đó từ IP. Ngoài ra, các thiết bị không nhất thiết phải phát bất kỳ dịch vụ nào, nhưng chắc chắn hỗ trợ phát mDNS. Vì vậy, xem qua các dịch vụ sẽ không hoạt động.


1
Bạn đang sử dụng hệ điều hành nào? mdns-scan dường như là một tùy chọn trên linux.
Zoredache

1
OS X, nhưng nếu tôi có thể có một giải pháp linux, tôi chắc chắn rằng tôi có thể tìm thấy một sự tương tự trong thế giới mac. mdns-scan tìm kiếm các dịch vụ được phát sóng, vì vậy điều đó sẽ không hoạt động. Một số thiết bị không phát bất kỳ dịch vụ nào, nhưng sẽ giải quyết địa chỉ của chúng khi được truy vấn bằng tên.
Adam

Câu trả lời:


23

Vì bạn đã biết các địa chỉ IP, bạn có thể tra cứu mục nhập ngược cho từng địa chỉ IP để nhận địa chỉ chuyển tiếp được liên kết:

$ 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

Để có đầu ra thân thiện với tập lệnh shell hơn, hãy sử dụng '+ short':

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

Tùy thuộc vào trường hợp sử dụng dự định của bạn, có thể có một phương pháp phù hợp hơn để thực hiện truy vấn. Hãy liên hệ với tôi nếu bạn cần thêm thông tin.


2
Bạn có biết tại sao điều này có thể thất bại với thiết bị iOS không chạy bất kỳ dịch vụ Bonjour nào không? Nó hoạt động chống lại máy Mac không chạy bất kỳ dịch vụ Bonjour nào.
John Wright

Đáng lưu ý rằng bạn cũng có thể tìm ra địa chỉ IP nào trên mạng bằng cách arp-scancài đặt từ homebrew hoặc macports. Hoặc, nếu bạn chỉ muốn cảm nhận về các máy chủ trên mạng, bạn có thể xem bảng ARP hiện tại của mình bằng lệnh đã có trên OS X : arp. Cụ thể, bạn có thể sử dụng lệnh arp -n -i <interface> -l -a, nơi <interface>sẽ là tên của giao diện mạng mà bạn tò mò (ví dụ en0).
Bắn Parthian

5

Trên Linux, bạn có thể sử dụng lệnh getent từ libc:

getent hosts 192.168.0.52

Hoặc cài đặt avahi-utils và chạy

avahi-resolve-address 192.168.0.52

Gói này nằm avahi-toolstrên Fedora và đó là thứ duy nhất trên trang này hoạt động :)
Navin


-1

Vâng, tôi đã nghiên cứu thêm một chút về cái này, và xem qua mDNDS và giao thức, có vẻ như điều này thực sự không thể. Có một yêu cầu tra cứu trên giao thức để lấy tên, vì vậy khi bạn hỏi tên, khách hàng thích hợp sẽ trả lời, nhưng không có yêu cầu tra cứu cho IP. Không có cửa hàng trung tâm cho địa chỉ.

Hy vọng điều này sẽ giúp người khác, vì tôi đã dành quá nhiều thời gian để theo dõi điều này.

Nếu bất cứ ai có bất kỳ ý tưởng nào khác về vấn đề này, tôi rất thích nghe em.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.