Ho una scheda NIC da qualche parte su una macchina Debian. La macchina è spenta, ma ho bisogno di sapere se la scheda NIC è accesa in modo da poter inviare un pacchetto magico wake-on-lan più tardi (da unaltra macchina Debian) per riattivarla. Ho lindirizzo MAC della carta. Esiste un modo per eseguire il ping della scheda Ethernet tramite MAC per vedere se è attiva?
Ho provato a creare una voce ARP:
arp -s 192.168.2.2 00-0c-0d-ef-02-03 ping 192.168.2.2
Non ha funzionato, poiché la scheda NIC non ha questo indirizzo IP. Quindi la scheda NIC avrebbe ricevuto la richiesta di ping ma non avrebbe risposto ad essa. Cè un modo per aggirare questo?
I sto usando il pacchetto etherwake per inviare un messaggio wake-on-lan.
Answer
Potresti avere più fortuna usando lo strumento arping
. Lo strumento ping
funziona a livello di livello 3 del modello OSI , mentre arping
funziona a livello 2.
Tuttavia, con questo strumento è necessario conoscere lIP del sistema. Esistono 2 versioni di quella standard inclusa con la maggior parte degli Unix (quelli di Alexey Kuznetsov) è la versione che può gestire solo indirizzi IP. L altra versione (Thomas Habets “) presumibilmente può eseguire query utilizzando indirizzi MAC.
$ sudo arping 192.168.1.1 -c 1 ARPING 192.168.1.1 from 192.168.1.218 eth0 Unicast reply from 192.168.1.1 [00:90:7F:85:BE:9A] 1.216ms Sent 1 probes (1 broadcast(s)) Received 1 response(s)
arping
funziona in modo simile a ping
tranne che invece di inviare pacchetti ICMP, invia pacchetti ARP.
Recupero di un sistema ” s IP utilizzando solo il MAC
Ecco un paio di metodi per eseguire la ricerca inversa da MAC a IP.
-
nmap
$ nmap -sP 192.168.1.0/24
Quindi cerca nella cache arp la macchina corrispondente
arp -an
. -
fping
$ fping -a -g 192.168.1.0/24 -c 1
Quindi guarda nella cache arp, come sopra.
-
ping
$ ping -b -c1 192.168.1.255
Quindi cerca nella cache arp, come sopra.
-
nbtscan (host solo per Windows)
$ nbtscan 192.168.1.0/24 Doing NBT name scan for addresses from 192.168.1.0/24 IP address NetBIOS Name Server User MAC address ------------------------------------------------------------------------------ 192.168.1.0 Sendto failed: Permission denied 192.168.1.4 MACH1 <server> <unknown> 00-0b-12-60-21-dd 192.168.1.5 MACH2 <server> <unknown> 00-1b-a0-3d-e7-be 192.168.1.6 MACH3 <server> <unknown> 00-21-9b-12-b6-a7
Commenti
Rispondi
Non è possibile eseguire il ping di una normale NIC perché la NIC da sola non invia alcuna risposta.
Solo un computer in esecuzione è in grado di inviare risposte
Le normali schede di interfaccia di rete non inviano alcuna risposta da sole. Hanno sempre bisogno di un software in esecuzione sul computer per farlo.
Quando la CPU del computer è spenta, non è presente alcun software in esecuzione che invii una risposta a un ping.
Wake-on-LAN è unidirezionale
Wake-on-LAN consente al computer di accendere solo parzialmente la scheda NIC per ricevere Frame Ethernet e cerca la sequenza di attivazione magica in essi, ma la NIC non invierà comunque alcuna risposta. Wake-on-LAN è strettamente unidirezionale. Non ci sono risposte inviate.
Eccezioni
Ci sono alcune NIC speciali che potrebbero inviare risposte da sole come ad esempio quelle che implementano un offload di handshake TCP completo .
Commenti
- +1 – questa è lunica risposta che affronta veramente lOP ‘ div Domanda. ” Wake-on-LAN è unidirezionale “.
Risposta
Il comando ether-wake
funzionerà con lindirizzo mac, quindi sicuramente (a) non avrai bisogno di un indirizzo IP e (b) può inviare il comando senza danni (se è già attivo, il risveglio non avrà alcun impatto?)
Puoi vedere lelenco della tua cache arp esistente usando arp -an
e grepping per il tuo MAC per ottenere lIP dellhost di destinazione. Tuttavia, poiché arp è una cache, potrebbe essere stato “scaduto” dalla cache (ed essere ancora “sveglio”). Potrebbe quindi essere necessario utilizzare un metodo di forza bruta per trovarlo, ad esempio:
sudo nmap -sP 192.168.2.0/24 | less
(e quindi cercare 00: 0c: 0d: ef: 02: 03) – i firewall forniti e altre cose simili non intralciano!
Commenti
- Io non ‘ Non voglio riattivare la macchina adesso. Ma voglio assicurarmi che la NIC possa ricevere i miei messaggi in modo che quando vado fuori sede e accendo la macchina tramite un pacchetto WOL, so che si accenderà. Questo è ‘ perché voglio eseguire il ping tramite IP o MAC e non riattivarlo.
- Le macchine in sospensione non rispondono al ping. Se la macchina è accesa e si esegue il ping tramite IP (e lhost risponde), inserirà una voce nella cache arp. Se la voce lì dentro corrisponde allindirizzo MAC dellhost, cè una ragionevole possibilità che funzioni (esclusi altri firewall di rete, router e altri problemi fisici che potrebbero impedire a
ether-wake
raggiungerlo). Avrei effettivamente accesso a un altro host in loco, avrei messo la macchina di destinazione in stato di stop e avrei tentato di eseguireether-wake
. Per la natura del funzionamento di WOL, la richiesta dovrà essere inviata comunque sulla stessa sottorete dellhost - @DravSloan il Bonjour Proxy disponibile ad es. Apples Time Capsule è un modo abbastanza ingegnoso per gestire questo problema. La macchina dorme ma il router risponde e la riattiva solo quando il proxy ‘ non può più gestirla.
- Non ‘ t fare affidamento su WOL senza averlo prima testato. In tal caso, procurati piuttosto una scheda IPMI.
Risposta
La mia applicazione era un server RSYNC collegato a una stazione di lavoro per ottenere la directory dei documenti della workstation … ma la workstation non aveva un indirizzo IP garantito ma aveva un indirizzo MAC noto (lindirizzo IP è stato fatto da DHCP). questo codice utilizza SOLO ping.
export COUNTER=1 while [ $COUNTER -lt 255 ] do #ping $1$COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" & # activate all 254 addresses in the subnet.. dont really need to grep the ping output ping 192.168.0.$COUNTER -c 1 -w 4 2> /dev/null | grep -B 1 " 0\% packet loss" > /dev/null & COUNTER=$(( $COUNTER + 1 )) done # wait till 254 background processes finished wait # the arp cache will automatically flush it"s incomplete entries in about 10 minutes... #echo "finished" # #SRC_SERVER_IP="192.168.0.160:873" SRC_SERVER_IP=$(arp -a | grep "00:22:4d:81:8f:76" | awk "{print $2}" | sed "s/[()]//g")":873" if [ $SRC_SERVER_IP == ":873" ] ; then echo "ws1.example.com is not on the network... exiting..." exit 0 fi
Risposta
Ecco un semplice script per eseguire il ping tramite indirizzo Mac. Basta salvare ed eseguire, ad esempio,
macping aa:bb:cc:dd:ee:ff
Puoi anche concatenare il risultato in modo condizionale per fare altre cose, ad esempio:
macping aa:bb:cc:dd:ee:ff && echo do something if online || echo do something if offline
–
#!/bin/bash network=192.168.1.1/24 if [ "$#" -ne 1 ]; then echo Usage example: $0 aa:bb:cc:dd:ee:ff; exit 2; fi; nmap -sP $network >& /dev/null ip=$(arp -n | grep $1 | awk " { print $1 }") ping $ip -n -q -c 2 -i 0.2 -w 1 >& /dev/null if [ $? -eq 0 ]; then echo Device is online \($ip\) else echo Device is offline exit 1 fi;
Risposta
Questo non si basa su differenze versioni di arping né su script bash complessi:
ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7 | awk " { printf $1 } ")
Ho utilizzato arp-scan invece di arp perché sembra funzionare molto più velocemente.
arping
può prendere un indirizzo MAC come parametro:arping -c 5 38:e7:d8:63:5e:a6
arping
a un indirizzo MAC: Sì, ci sono due implementazioni di arping 1. da Linux iputils 2. arping di Thomas Habets . — Solo limplementazione 2. può eseguire il ping di un indirizzo MAC, ma tale ping è molto complicato: la macchina su cui è stato eseguito il ping deve ancora avere TCP / IP configurato (almeno un indirizzo IP) e deve essere in grado di rispondere a un ping a un indirizzo IP di trasmissione.