arping

Für was benötigt man arping überhaupt?

Nun … z.B. um mit diesem Utility feststellen zu können ob ein bestimmter Rechner bzw. eine IP-Adresse im LAN an ist oder nicht. Dafür ist zwar eigentlich ping das übliche Utility aber falls der betreffende Rechner ICMP-Echo-Requests über eine Firewall sperrt erhält man keine Antwort mehr. Diese Firewall-Einstellung ist z.B. bei Windows XP mit Service-Pack 2 und allen neueren Versionen von Windows die Default-Einstellung.

Hier ein Beispiel:

r-andreas:~ # ping 172.16.0.201
PING 172.16.0.201 (172.16.0.201) 56(84) bytes of data.
^C
--- 172.16.0.201 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 5999ms

Es sieht also so aus als ob dieses Rechner derzeit nicht am Netz ist.

Aber: Für die Zustellung eines IP-Pakets wird in einem Ethernet-LAN die MAC-Adresse des Zielrechners benötigt. Ist diese nicht bekannt wird diese im Hintergrund über eine ARP-Anfrage in Erfahrung gebracht. Genau das passiert auch bei einem ICMP-ping. Der ICMP-Echo-Request wird in einem IP-Paket an den Zielrechner gesendet und um diese IP-Paket in einen Ethernet-Frame zu verpacken wird die MAC-Adresse des Zielrechners über ARP in Erfahrung gebracht. Das kann man über Einsicht in den ARP-Cache unmittelbar nach dem ICMP-ping auch sehen:

r-andreas:~ # arp -n
Address                  HWtype  HWaddress           Flags Mask  Iface
172.16.0.132             ether   00:0f:1f:ca:76:dc   C           eth0
172.16.0.1               ether   00:0d:88:fc:c0:5f   C           eth0
172.16.0.201             ether   00:0c:29:1b:a1:2c   C           eth0

Hier ist der Rechner 172.16.0.201 sehr wohl aufgeführt. Da ARP ein unbedingt notwendiges Protokoll ist, wird es über die Firewall nicht gesperrt. Ohne ARP könnten die Clients im Netz nicht untereinander kommunizieren. Die Idee von arping ist es den ICMP-ping gleich zu umgehen, mit ARP-Requests zu arbeiten und dabei das altbekannt e ping-Utility nachzuahmen.

arping am Beispiel openSUSE 11.2

openSUSE 11.2 bringt im Paket „iputils“ bereits ein arping-Utility mit. Damit kann man nun in einem Schritt feststellen ob eine bestimmte IP-Adresse im LAN aktuell vorhanden ist und dabei im Gegensatz zum vorherigen Ansatz wieder die Round-Trip-Zeiten wie beim normalen ping sehen.

r-andreas:~ # arping 172.16.0.201
ARPING 172.16.0.201 from 172.16.0.131 eth0
Unicast reply from 172.16.0.201 [00:0C:29:1B:A1:2C]  1.046ms
Unicast reply from 172.16.0.201 [00:0C:29:1B:A1:2C]  0.809ms
Unicast reply from 172.16.0.201 [00:0C:29:1B:A1:2C]  1.156ms
Unicast reply from 172.16.0.201 [00:0C:29:1B:A1:2C]  0.753ms
^CSent 4 probes (1 broadcast(s))
Received 4 response(s)

Das betreffende arping-Utility ist die Variante von Alexey Kuznetsov.

Alternative arping-Version

Es gibt im Internet auch noch eine arping-Version von Thomas Habets. Diese Version ermöglicht es als Zielangabe auch eine MAC-Adresse statt einer IP-Adresse anzugeben. Die Idee dahinter ist es zu einem unbekannten Rechner von dem aber die MAC-Adresse bekannt ist die zugehörige IP-Adresse in Erfahrung zu bringen. Dafür verwendet arping von Thomas Habets dann wieder einen ICMP-Echo-Request der aber wie schon oben erwähnt z.B. von Windows XP SP2+ gesperrt und somit nicht beantwortet wird. Als Ziel-Adresse wird die Non-directed-Broadcast-Adresse 255.255.255.255 verwendet.

Schreibe einen Kommentar