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.