Làm cách nào để tìm tất cả các thiết bị (Địa chỉ IP, Tên máy chủ, Địa chỉ MAC) trên mạng cục bộ?


13

Tôi đã đọc hầu hết các chủ đề liên quan đến vấn đề này, nhưng không ai có thể dễ dàng truy cập một bảng như sau.

  IP Address     Hostname        MAC Address
  192.168.1.10 | myAppleTV     | 02:78:42:9b:bb:12
  192.168.1.10 | myiPhone      | b2:18:4a:3a:42:22
  192.168.1.10 | myiMac        | 09:17:a2:95:c4:00
  192.168.1.10 | myCanonPrinter| a0:ea:72:77:b4:aa

Hầu hết thời gian tôi sử dụng arp -avà cũng có dns-sb, nhưng không ai trong số họ giúp dễ dàng tìm ra 3 thông tin chính bất cứ khi nào tôi gặp rắc rối trên mạng, đó là Địa chỉ IP, Tên máy chủ và Địa chỉ MAC. Tôi ngạc nhiên rằng không có tiện ích nào thực hiện được điều này!


Loại thông tin này chủ yếu sẽ có trên bộ định tuyến
user151019

Câu trả lời:


12

Nếu việc sử dụng tiện ích của bên thứ ba không phải là vấn đề đối với bạn, thì tôi khuyên bạn nên dùng thử:

quét arp (có sẵn qua Homebrew )

brew install arp-scan
arp-scan --localnet

finger (tải xuống và cài đặt gói "CLI nhúng cho máy tính để bàn" từ finger.com hoặc qua Homebrew brew cask install fing)

sudo fing -r 1 -d true -o table,text

Cả hai tiện ích có một số chế độ và tính năng bổ sung. Tôi đề nghị đọc hướng dẫn đầy đủ để tận dụng tối đa chúng.

Nếu bạn cần tránh sử dụng các công cụ của bên thứ ba thì đây là cách để làm điều gì đó tương tự với các lệnh tích hợp. Bạn có thể chạy các tương tác này, nhưng có thể dễ dàng lưu nó dưới dạng tập lệnh. NB để giữ cho nó ngắn, kịch bản này không có kiểm tra lỗi, và chỉ hoạt động trên / 24 mạng con. Sửa đổi nó để làm việc trên các mạng con có kích thước khác là một bài tập cho người đọc :)

#!/usr/bin/env bash
tab=$'\t'
pIF=$(echo "show State:/Network/Global/IPv4" | scutil | awk -F: '/PrimaryInterface/{sub(/ /,"",$2); print $2}')
sn=$(ipconfig getifaddr $pIF | sed -En 's/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/p')
for i in {1..254}; do ping -i0.1 -W100 -c1 $sn.$i | grep from; done
arp -a | grep $pIF | sed -e 's/^\?/unnamed/' -e "s/\ at\ /${tab}/g" -e "s/\ on\ /${tab}/g" -e 's/\ ifscope.*$//g' | awk 'BEGIN { FS="\t"; OFS="\t"; printf "%-17s\t%-15s\t%s\n", "MAC","INTERFACE","HOSTNAME (IP)" } { if($2!="(incomplete)") {printf "%-17s\t%-15s\t%s\n",$2,$3,$1}}'

Điều này sẽ xuất ra một cái gì đó như:

MAC                 INTERFACE       HOSTNAME (IP)
0:90:b:7a:85:62     en0             r1.lan (192.168.20.1)
2c:36:f8:48:2b:47   en0             cisco-sg300-10p.lan (192.168.20.2)
84:78:ac:a6:95:a0   en0             cisco-sg300-20.lan (192.168.20.3)
b4:fb:e4:cb:93:85   en0             wap1.lan (192.168.20.10)
0:11:32:10:cd:c1    en0             nas.lan (192.168.20.20)
0:11:32:3d:99:c9    en0             nas2.lan (192.168.20.21)
0:11:32:10:cd:c1    en0             unnamed (192.168.20.23)
d4:4b:5e:fe:6a:75   en0             brwd44b5efe6a75.lan (192.168.20.90)
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.