arping – ping auf Layer 2

Arping ist ein Programm welches Benutzt werden kann um Hosts in einem Netzwerk zu finden von denen nur die Mac Adresse bekannt ist. Mit dem Programm kann man auch testen ob eine IP Adresse in einem lokalen Netzwerk verwendet wird oder ob eine IP zweimal vergeben ist.

Arping funktioniert wie das „normale“ Ping Kommando, dieses testet ob ein Host vorhanden ist indem es versucht ihn per ICMP Protokoll anzusprechen. ICMP ist ein routbares Protokoll auf Layer 3/4 des OSI Schichtenmodells. Arping Arbeitet aber auf Layer 2 des OSI Schichtenmodells(Link Layer) und benutzt das ARP Protokoll um Adressen aufzuloesen. Da ARP nicht routebar ist funktioniert das nur auf einem lokalen Netzwerk. Es gibt 2 populaere arping Implementationen. Eine ist Teil der Linux iputils Suite(aber bei Debian anscheinend nicht dabei), diese kann keine Mac Adressen direkt anpingen nur IP Adressen.


arping -I wlan0 192.168.42.1

Die andere Implementation von arping wurde von Thomas Habets geschrieben. Diese kann sowohl IP Adressen als auch Mac Adressen direkt anpingen.
Webseite von THomas Habet


arping -I wlan0 6a:9c:5e:b2:5e:12

Im den Debian Repositorys fuer Wheezy und Jessie gibt es ein extra Paket Namens arping, darin ist die Version von Thomas Habet enthalten. Das Packet muss aber explizit nachinstalliert werden. Die Arping Variante die in der busybox zum Einsatz kommt scheint Identisch mit der iputils Variante zu sein d.h sie kann keine Mac Adresse direkt anpingen. Prinzipiell soll es mit dem arping von Thomas Habet auch moeglich sein eine IP anzupingen die sich zwar im gleichen lokalen Netzwerk befindet aber routingtechnisch eigentlich nicht ereichbar ist. In meiner Umgebung funktionierte das aber nicht. Ich gehe davon aus das der Grund dafuer in der Switch und vlan Konfiguration meines Netzes zu suchen ist. In Netzen mit „einfachen“ Switchen sehe ich da kein Hinderniss. Wichtig: Wenn ein Linux System ueber seine Mac angepingt werden soll funktioniert das nur wenn:
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
auf 0 gesetzt ist. Auch Windows und Mac Systeme antworten nur wenn sie entsprechend konfiguriert sind.

Das arping von Thomas Habet das bei Debian zusaetzlich installiert werden kann, kann mit vlan’s umgehen. Man muss das Interface dann aber mit der Option -i angeben. (z.b -i eth0.10 ) Das in der busybox enthaltene arping kann mit vlan´s anscheinend nichts anfangen. Es sieht fuer mich so aus als ob es nicht moeglich ist ein Device wie eth0.10 manuell anzugeben, da kommt dann nur eine Fehlermeldung. Automatisch angesprochen werden vlan Devices eh nicht, sie muessen immer mit der Option -i explizit angegeben werden.

Beispiel eines Session Outputs der arping Version das die busybox mitbringt:

root@pc1:/home/userx# busybox arping  10.210.210.89
ARPING to 10.210.210.89 from 10.210.210.83 via eth0
Unicast reply from 10.210.210.89 [0:c:5a:3c:f7:70] 0.188ms
Unicast reply from 10.210.210.89 [0:c:5a:3c:f7:70] 1.267ms
Unicast reply from 10.210.210.89 [0:c:5a:3c:f7:70] 0.184ms
Unicast reply from 10.210.210.89 [0:c:5a:3c:f7:70] 1.181ms
^CSent 2 probe(s) (1 broadcast(s))
Received 4 reply (0 request(s), 0 broadcast(s))

Diese Version ist anscheinend nicht in der Lage eine Mac Adresse direkt anzupingen.

Beispiel eines Session Outputs von Thomas Habet´s arping.

root@pc1:~# arping 10.210.210.89
ARPING 10.210.210.89
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=0 time=1.001 sec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=1 time=1.001 sec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=2 time=1.001 sec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=3 time=1.001 sec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=4 time=539.493 msec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=5 time=539.707 msec
^C
--- 10.210.210.89 statistics ---
3 packets transmitted, 6 packets received,   0% unanswered (3 extra)
rtt min/avg/max/std-dev = 539.493/847.282/1001.243/217.564 ms

Direktes Anpingen eines anderen Rechners ueber die Mac Adresse.

root@pc1:/home/userx# arping -i eth0.10 00:1f:f2:72:fe:9a
ARPING 00:1f:f2:72:fe:9a
60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=0 time=1.001 sec
60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=1 time=1.001 sec
60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=2 time=1.001 sec
60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=3 time=1.001 sec
60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=4 time=1.001 sec
60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=5 time=1.001 sec
60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=6 time=1.001 sec
60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=7 time=1.001 sec
60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=8 time=1.001 sec
60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=9 time=1.001 sec
^C60 bytes from 10.210.210.83 (00:1f:f2:72:fe:9a): icmp_seq=10 time=436.525 msec

--- 00:1f:f2:72:fe:9a statistics ---
11 packets transmitted, 11 packets received,   0% unanswered (0 extra)
rtt min/avg/max/std-dev = 436.525/949.717/1001.224/162.285 ms

ACHTUNG: Wenn auf dem Zielrechner ein Linux laeuft dann funktioniert das nur wenn:
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
auf 0 gesetzt wurde. z.b mit:

echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Auch Zielrechner die z.b mit Windows Betrieben werden oder Mac´s muessen zuerst konfiguriert werden damit sie Echo Broadcasts beantworten – siehe Readme Datei von arping!

Nutzung von Thomas Habets Arping um Doppelte IP Adressen in einem Netzwerk zu entdecken.

Hier haben 2 Rechner die gleiche IP Adresse:

root@pc1:/home/userx# arping 10.210.210.89
ARPING 10.210.210.89
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=0 time=326.828 msec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=1 time=327.049 msec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=2 time=327.230 msec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=3 time=327.411 msec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=4 time=37.667 msec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=5 time=37.885 msec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=6 time=1.001 sec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=7 time=1.001 sec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=8 time=1.001 sec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=9 time=1.001 sec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=10 time=1.001 sec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=11 time=1.002 sec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=12 time=1.001 sec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=13 time=1.001 sec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=14 time=1.001 sec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=15 time=1.002 sec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=16 time=647.083 msec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=17 time=647.306 msec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=18 time=647.485 msec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=19 time=647.656 msec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=20 time=197.222 msec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=21 time=197.435 msec
60 bytes from 00:0c:5a:3c:f7:70 (10.210.210.89): index=22 time=197.618 msec
60 bytes from 00:1f:f2:72:fe:9a (10.210.210.89): index=23 time=197.790 msec

--- 10.210.210.89 statistics ---
6 packets transmitted, 24 packets received,   0% unanswered (18 extra)
rtt min/avg/max/std-dev = 37.667/615.675/1001.562/364.642 ms

arping – Duplicate Adress Detection Mode

Das arping der Busybox kennt einen „Duplicate Adress Detection Mode“ mir erschliesst sich allerdings nicht wie das eigentlich funktionieren soll:
Die erkennung ob eine doppelte IP Adresse vorliegt oder nicht soll ueber den Rueckgabewert des Programms an die Shell erfolgen.
$ busybox arping -D -I eth0 10.10.10.89
$ echo $?
1

Rueckgabewert 1 soll heissen das kein Duplikat vorhanden ist. Ein Rueckgabewert 0 wuerde heissen das die IP Adresse mehrmals vorhanden ist. Leider bekomme ich den Rueckgabewert 1 auch wenn definitiv 2 Rechner mit der gleichen IP im Netz sind.

root@pc1:~# busybox arping -D -I eth0  10.210.210.89
ARPING to 10.210.210.89 from 0.0.0.0 via eth0
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 0.199ms
Sent 1 probe(s) (1 broadcast(s))
Received 1 replies (0 request(s), 0 broadcast(s))
root@pc1:~# echo $?
1
root@pc1:~# 

Wenn man das busybox arping normal startet dann sieht man aber das da mehrere Rechner antworten:

Ausgabe von busybox arping wenn zwei Rechner die gleiche IP haben.

root@pc1:~# busybox arping -I eth0 -c 5 10.10.10.89
ARPING to 10.210.210.89 from 10.210.210.83 via eth0
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 0.189ms
Unicast reply from 10.10.10.89 [0:55:a6:9:79:6d] 0.211ms
Unicast reply from 10.10.10.89 [0:55:a6:9:79:6d] 0.942ms
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 1.053ms
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 0.181ms
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 15.967ms
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 0.178ms
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 1.044ms
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 0.177ms
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 0.829ms
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 0.176ms
Unicast reply from 10.10.10.89 [0:c:5a:3c:f7:70] 0.780ms
Sent 5 probe(s) (1 broadcast(s))
Received 12 reply (0 request(s), 0 broadcast(s))
root@pc1:~#