Bagaimana menemukan semua perangkat (Alamat IP, Nama Host, Alamat MAC) di jaringan lokal?

13

Saya sudah membaca hampir setiap utas yang terkait dengan ini, namun belum ada yang membuatnya mudah untuk mengakses tabel seperti berikut ini.

  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

Sebagian besar waktu saya gunakan arp -adan ada juga dns-sb, tetapi tidak satu pun dari mereka yang membuatnya mudah untuk menemukan 3 informasi kunci setiap kali saya bermain-main di jaringan, yaitu, Alamat IP, Hostname dan Alamat MAC. Saya terkejut bahwa tidak ada utilitas yang menyelesaikan ini!

Spectramax
sumber
Informasi semacam ini terutama akan berada di router
user151019

Jawaban:

12

Jika menggunakan utilitas pihak ketiga bukan masalah bagi Anda, maka saya sarankan mencoba ini:

arp-scan (tersedia via Homebrew )

brew install arp-scan
arp-scan --localnet

fing (unduh dan instal paket "Desktop Embedded CLI" dari fing.com atau via Homebrew brew cask install fing)

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

Kedua utilitas memiliki sejumlah mode dan fitur tambahan. Saya sarankan membaca manual sepenuhnya untuk mendapatkan yang terbaik dari mereka.

Jika Anda perlu menghindari menggunakan alat pihak ketiga maka inilah cara untuk melakukan sesuatu yang mirip dengan perintah bawaan. Anda dapat menjalankan ini secara interaktif, tetapi mungkin lebih mudah untuk menyimpannya sebagai skrip. NB agar singkat, skrip ini tidak memeriksa kesalahan, dan hanya berfungsi pada / 24 subnet. Memodifikasi untuk bekerja pada subnet dari ukuran lain dibiarkan sebagai latihan untuk pembaca :)

#!/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}}'

Ini akan menghasilkan sesuatu seperti:

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)
luckman212
sumber