Si può eseguire il ping di una scheda NIC tramite MAC

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.

  1. nmap

    $ nmap -sP 192.168.1.0/24 

    Quindi cerca nella cache arp la macchina corrispondente arp -an.

  2. fping

    $ fping -a -g 192.168.1.0/24 -c 1 

    Quindi guarda nella cache arp, come sopra.

  3. ping

    $ ping -b -c1 192.168.1.255 

    Quindi cerca nella cache arp, come sopra.

  4. 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

  • arping può prendere un indirizzo MAC come parametro: arping -c 5 38:e7:d8:63:5e:a6
  • @MichaelMr ozek – Lho fatto dopo che qualcuno aveva praticamente pubblicato la mia risposta come commento e ‘ non aveva letto quello che avevo detto sulle 2 versioni di arping. Laltra risposta sembra essere stata cancellata, quindi grazie per aver eliminato le mie audaci frustrazioni.
  • Grazie per laiuto. Contrassegnare questo come risolto. Non siamo riusciti ‘ a trovare unopzione WOL nella configurazione del BIOS. Questa è la mia ipotesi: il BIOS non aveva WOL attivato, ma la NIC sì. Quindi la NIC si stava svegliando con il primo pacchetto WOL e stava inviando un messaggio al BIOS. Ma poiché non è stato attivato nel BIOS, il BIOS non ha eseguito alcuna operazione. Da questo momento in poi, la scheda NIC ha risposto al ping poiché era attiva, ma la macchina non lo è stata. Domanda così veloce: è possibile che il BIOS abbia WOL disattivato e la NIC lo abbia attivato contemporaneamente?
  • @AlastorMoody – Direi che ‘ probabilmente è consentito disattivare il BIOS WOL con il ‘ WOL della NIC attivato. Tuttavia, se il BIOS ‘ t supporta WOL, allora non ‘ penso che ‘ Sarò in grado di usarlo anche se lo fa la NIC. Consulta larticolo di wikipedia su WOL: en.wikipedia.org/wiki/Wake-on-LAN . Dice la stessa cosa di me nella sezione ” risoluzione dei problemi relativi ai pacchetti magici “.
  • @niervol: 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.

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 eseguire ether-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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *