Wie finde ich alle Geräte (IP-Adresse, Hostname, MAC-Adresse) im lokalen Netzwerk?


13

Ich habe fast jeden Thread gelesen, der damit zusammenhängt, aber niemand hat es so einfach gemacht, auf eine Tabelle wie die folgende zuzugreifen.

  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

Die meiste Zeit benutze ich arp -aund es gibt auch dns-sb, aber keine von ihnen macht es einfach, 3 wichtige Informationen herauszufinden, wenn ich im Netzwerk herumspiele, dh IP-Adresse, Hostname und MAC-Adresse. Ich bin überrascht, dass es kein Dienstprogramm gibt, das dies erreicht!


Diese Art von Informationen wird hauptsächlich auf dem Router sein
user151019

Antworten:


12

Wenn die Verwendung eines Dienstprogramms eines Drittanbieters für Sie kein Problem darstellt, empfehle ich, Folgendes auszuprobieren:

Arp-Scan (über Homebrew erhältlich )

brew install arp-scan
arp-scan --localnet

fing ( lade das "Desktop Embedded CLI" -Paket von fing.com oder über Homebrew herunter und installiere es brew cask install fing)

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

Beide Dienstprogramme verfügen über eine Reihe zusätzlicher Modi und Funktionen. Ich empfehle, die Handbücher vollständig zu lesen, um das Beste aus ihnen herauszuholen.

Wenn Sie die Verwendung von Tools von Drittanbietern vermeiden müssen, finden Sie hier eine Möglichkeit, mit integrierten Befehlen etwas Ähnliches zu tun. Sie können diese interaktiv ausführen, aber es ist wahrscheinlich einfacher, sie als Skript zu speichern. NB um es kurz zu machen, dieses Skript führt keine Fehlerprüfung durch und funktioniert nur in / 24-Subnetzen. Das Ändern für Subnetze anderer Größen wird dem Leser als Übung überlassen :)

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

Dies sollte ungefähr Folgendes ausgeben:

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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.