Come utilizzare il comando arping su Linux
Pubblicato: 2022-07-28 Il comando Linux arping
è come ping
, ma solo per reti locali. Il suo vantaggio è che opera a un livello di rete inferiore, a volte ricevendo risposte quando non è possibile eseguire il ping
. Ecco come usarlo.
Il protocollo ARP
Un indirizzo IP è un'etichetta numerica per un dispositivo in rete. Viene utilizzato come indirizzo in modo che il traffico di rete appropriato arrivi al dispositivo corretto. Ma la maggior parte dei dispositivi sulle reti locali ha indirizzi IP dinamici . Cioè, il loro indirizzo IP potrebbe cambiare al prossimo avvio.
Per poter instradare correttamente il traffico di rete al dispositivo appropriato, è necessario utilizzare uno schema che mappi gli indirizzi IP agli indirizzi MAC (Media Access Control). L'indirizzo MAC è un'identità univoca stabilita nel punto di produzione di un dispositivo. Un indirizzo IP è un indirizzo logico . L'indirizzo MAC è un indirizzo fisico .
L'Address Resolution Protocol è l'intermediario che associa gli indirizzi IP agli indirizzi MAC. Il dispositivo responsabile del marshalling e dell'indirizzamento dei pacchetti di rete nella rete, in genere il router, crea e mantiene una tabella ARP che lega gli indirizzi IP agli indirizzi MAC.
Se il router ha bisogno di instradare i dati a un dispositivo che non conosce, fa una richiesta ARP per ottenere l'indirizzo MAC per il nuovo dispositivo.
Quando un nuovo dispositivo è connesso alla tua rete, gli viene assegnato un indirizzo IP, ma questo non è sufficiente per instradare effettivamente il traffico verso di esso. Il router deve ottenere l'indirizzo MAC che è il pezzo mancante del puzzle. Ma poiché l'indirizzo IP da solo non è informazioni sufficienti per instradare i pacchetti al dispositivo, il Catch-22 non può utilizzare l'indirizzo IP per interrogare l'hardware per ottenere l'indirizzo MAC.
Il modello Open Systems Interconnection raggruppa le tecnologie che compongono una rete funzionante come una serie di livelli. I livelli superiori non possono funzionare senza i livelli inferiori. Ci sono sette livelli nel modello OSI.
- Il livello 7 è il livello più in alto, il livello dell'applicazione . Fornisce informazioni all'utente del computer e riceve le informazioni da loro.
- Il livello 6 è il livello di presentazione . Ciò assicura che i dati siano nel formato o nello stato corretto mentre si spostano da e verso il formato di rete. La crittografia e la decrittografia avvengono a questo livello.
- Il livello 5 è il livello della sessione . Una sessione è una connessione di rete tra due o più dispositivi. Questo livello si occupa di questioni come l'avvio di una connessione, l'handshaking, i timeout e l'interruzione delle connessioni che non sono più necessarie.
- Lo strato 4 è lo strato di trasporto . Questo è il livello che sposta i dati nella rete in modo coordinato. Questo livello riguarda cose come velocità di trasferimento e volumi di dati. Il Transmission Control Protocol, il TCP in TCP/IP, opera a questo livello.
- Il livello 3 è il livello di rete . È qui che avviene il routing e l'inoltro dei pacchetti. È il livello in cui opera il protocollo Internet, l'IP in TCP/IP.
- Il livello 2 è il livello di collegamento dati . Viene utilizzato per inviare pacchetti tra dispositivi indirizzabili direttamente utilizzando trasmissioni a ogni dispositivo o unicast a indirizzi MAC specifici.
- Il livello 1 è il livello fisico . Ciò riguarda l'infrastruttura fisica, inclusi cablaggio, router e switch di rete. Anche le onde radio utilizzate nel Wi-Fi rientrerebbero in questa categoria.
Quando il router riceve un pacchetto per un indirizzo IP che non è nella sua tabella, invia un pacchetto broadcast all'intera rete. Chiede effettivamente "Chi ha questo indirizzo IP?" Questo è un messaggio di livello due, quindi non si basa sull'instradamento IP.
Il dispositivo con l'indirizzo corrispondente risponde restituendo il proprio indirizzo MAC. L'indirizzo IP e l'indirizzo MAC di quel dispositivo possono essere aggiunti alla tabella di mappatura. Il traffico IP regolare può ora essere instradato al dispositivo perché la relazione tra il suo indirizzo IP e il suo indirizzo MAC è stata stabilita e registrata.
CORRELATI: La fondazione di Internet: TCP/IP compie 40 anni
Il comando arpeggiando
Tutte le cose intelligenti di ARP vengono eseguite automaticamente in background, costruendo e mantenendo la tabella ARP. Il comando arping
porta alcune delle funzionalità della query ARP nella finestra del terminale. Funziona a livello OSI due e può richiedere una risposta da un dispositivo quando il ping
non lo fa.
Su Fedora 36, arping
era già installato, ma dovevamo installarlo su Manjaro 21 e Ubuntu 22.04.
Su Ubuntu il comando è:
sudo apt install arping
Su Manjaro devi digitare:
sudo pacman -Sy arping
Il modo più semplice per utilizzare l' arping
è con un indirizzo IP. Deve essere l'indirizzo di un dispositivo indirizzabile direttamente, connesso alla rete locale. Poiché arping
opera al livello due, non è possibile alcun instradamento. Dovrai usare sudo
con arping
.
sudo arping 192.168.1.17
Premi Ctrl+C per interrompere. Le informazioni restituite sono l'indirizzo MAC del dispositivo che risponde, il numero di indice della richiesta di arping
e il tempo di andata e ritorno per il completamento della richiesta di arping
.
Confronta l'output con quello del comando ping
, di seguito. Il comando ping
restituisce ulteriori informazioni sulla tempistica del viaggio di andata e ritorno del pacchetto di rete. Il comando arping
fornisce meno statistiche di temporizzazione, ma include l'indirizzo MAC del dispositivo.
ping 192.168.1.17
È inoltre possibile utilizzare il nome di rete del dispositivo con arping
.
sudo arping fedora-36.local
È possibile utilizzare l'opzione -c
(count) per dire arping
di interrompersi dopo un determinato numero di richieste. Questo comando dice ad arping
di provare due volte e poi di fermarsi.
sudo arping -c 2 192.168.1.18
Se hai più interfacce di rete nel tuo computer, puoi usare l'opzione -I
(interfaccia) per dire ad arping
quale interfaccia usare.
Puoi usare il comando ip link
per elencare le tue interfacce di rete.
collegamento IP
Questo computer ha tre interfacce. L'interfaccia virtuale lo
viene utilizzata come loopback per le connessioni interne tra software sullo stesso computer. Non ci serve qui. Possiamo utilizzare sia la connessione ethernet enp3s0
che l'interfaccia wireless wlan0
.
Questo comando dice ad arping
di usare l'interfaccia che scegliamo e di non effettuare la propria selezione.
sudo arping -c 2 -I enp3s0 manjaro-21.local
Usare l'arping negli script
Avvolgendo l' arping
in un ciclo in uno script, possiamo farlo funzionare su un intervallo di indirizzi IP. Copia il testo da questo script e salvalo in un file chiamato "scan-range.sh".
Dovrai modificare lo script e sostituire tutte le occorrenze di 192.168.1 con l'indirizzo IP della tua rete.
#!/bin/bash for (( device = $1 ; device <= $2 ; device ++ )) do arping -c 1 192.168.1. $device | grep -E "1 response|1 packets received" > /dev/null if [ $? == 0 ] ; then echo "192.168.1. $device responded." else echo "192.168.1. $device didn't respond." fi done
Lo script accetta due parametri della riga di comando. Questi sono usati come l'ultimo ottetto degli indirizzi IP dell'intervallo su cui si desidera utilizzare l' arping
. Quindi, se passi 20 e 30 allo script, il ciclo inizierà a 192.168.1. 20 e terminerebbe dopo aver utilizzato l'indirizzo IP 192.168.1. 30 .
I parametri sono accessibili all'interno dello script come $1
e $2
. Questi sono usati in un ciclo for
in stile C. Ad ogni giro del ciclo for
, $device
viene impostato sull'indirizzo IP successivo nell'intervallo.
Lo script utilizza lo stesso formato arping -c
che abbiamo già visto, ma questa volta chiediamo solo di inviare una singola richiesta ARP a ciascun dispositivo nell'intervallo.
L'output del comando arping
viene inviato tramite pipe tramite grep
.
La sintassi di grep
può essere semplificata nel tuo script. grep
sta cercando una delle due stringhe, "1 risposta" o "1 pacchetto ricevuto". Questo perché i computer di prova avevano versioni diverse di arping
su di essi e utilizzano una terminologia diversa. Se grep
trova una di queste frasi, il suo valore di uscita sarà zero.
Quando sai quale delle frasi usa la tua versione di arping
, puoi semplificare la sintassi di grep
rimuovendo l'altra frase.
L'istruzione if
verifica $?
—una variabile che contiene il codice di uscita dell'ultimo processo terminato—per vedere se è zero. Se lo è, usa echo
per stampare un messaggio di successo nella finestra del terminale. Se il test fallisce, grep
non ha trovato nessuna delle stringhe, il che significa che la richiesta ARP non è riuscita.
Rendi eseguibile il tuo script usando il comando chmod
e l'opzione +x
.
chmod +x scan-range.sh
Lo eseguiremo e analizzeremo l'intervallo IP da 15 a 20. Alcuni di questi indirizzi non hanno dispositivi collegati, quindi dovremmo vedere alcuni errori. Ricordati di usare sudo
. Proveremo anche a eseguire il ping
del dispositivo su 192.168.1.15.
sudo ./scan-range.sh 15 20
ping 192.168.1.15
Otteniamo un misto di successi e fallimenti, come faresti su qualsiasi rete. Ma si noti che sebbene il dispositivo in 192.168.1.15 risponda alla richiesta ARP di livello due, non risponde alla richiesta ping
di livello tre.
Se avessi eseguito il ping del dispositivo e notato l'errore, probabilmente saresti propenso a verificare che fosse collegato, online e se è possibile eseguire il ping
dal dispositivo 192.168.1.15.
Ma con arping
puoi verificare che sia connesso, online e accessibile dalla rete. Ciò guiderebbe la risoluzione dei problemi per iniziare a esaminare i problemi di routing e tabella ARP.
Una visione più profonda
Ci sono molti livelli nella cipolla di rete. Se il ping
non ti porta da nessuna parte, scendi un livello e guarda cosa può dirti arping
.
CORRELATI: Come gestire le reti Wi-Fi Linux con Nmtui