1. 概要

arping は、ネットワーク内のホストをプローブするためのツールです。 ネットワーク層で動作するpingコマンドとは異なり、 arping はデータリンク層で動作し、アドレス解決プロトコル( ARP )を使用します。 これを使用するには、宛先ホストにARP要求を送信し、ARP応答を待機する必要があります。

このチュートリアルでは、arpingの使用方法を調べます。 さまざまなLinuxディストリビューションにはさまざまな実装がありますが、ここで検討するのはiputilsパッケージからのものです。

2. セットアップ例

ローカルホストと宛先ホストの2つのホストを使用してarpingを調べます。 ローカルホストのIPアドレスは192.39.59.16、であり、宛先ホストのIPアドレスは192.39.59.17です。 ローカルホストには、eth0という1つのネットワークインターフェイスしかありません。

arpingを使用するには、rootユーザーである必要があります。

3. arpingの基本的な使用法

オプションなしでarpingを使用して、宛先ホストをプローブすることから始めましょう。

$ arping 192.39.59.17
ARPING 192.39.59.17 from 192.39.59.16 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.754ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.668ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.676ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.672ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.663ms
^CSent 5 probes (1 broadcast(s))
Received 5 response(s)

宛先ホストへのpingの結果は成功しているようです。 出力の最初の行は、送信元IPアドレス 192.39 .59.16を使用して宛先IPアドレス192.39.59.17にARP要求を送信することを示しています。 eth0はネットワークインターフェースの名前です。 arping は、このネットワークデバイスを使用してARP要求を送信します。

arping に5つのARP要求を送信させてから、 Control +Cでキャンセルしました。 オプションを指定しない場合、arpingはARP要求を永久に送信します。

出力からわかるように、すべてのARP要求に対するARP応答を受信しました。 [00:50:56:B2:AB:CD]は宛先ホストのMACアドレスです。 各行の終わりのミリ秒単位の時間は、各ARP要求と応答の間に経過した時間です。

通常、arpingは最初にブロードキャストメッセージを送信します。 ARP応答を受信すると、ユニキャストに切り替わります。 この動作をラインで観察しました 5つのプローブを送信しました(1つのブロードキャスト) 。 ただし、ユニキャスト応答from ステートメントを含む出力行が示すように、宛先ホストからのすべてのARP応答はユニキャストです。

または、宛先IPアドレスの代わりに宛先ホスト名を渡すこともできます。

4. 特定の数のARP要求を送信する

すでに見てきたように、宛先を arping にのみ提供すると、ARP要求が宛先に永久に送信されます。 ただし、-cオプションを使用して必要な数のARP要求を渡すことができます:

$ arping –c 2 192.39.59.17
ARPING 192.39.59.17 from 192.39.59.16 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.765ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.676ms
Sent 2 probes (1 broadcast(s))
Received 2 response(s)

ここでは、2回目のリクエストの後、arpingが自動的に終了しました。 したがって、 Control +Cを使用して終了する必要はありませんでした。

5. 最初の応答後のARP要求の停止

-f オプションを使用すると、 arping に、宛先から最初の応答を受信するとすぐにARP要求の送信を停止するように指示できます。

$ arping –f 192.39.59.17
ARPING 192.39.59.17 from 192.39.59.16 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.663ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

6. 一定期間後のARP要求の停止

–w オプションを使用すると、arpingが特定の期間の後にARP要求の送信を停止することもできます。

$ date; arping –w 5 192.39.59.17; date
Tue May 24 16:44:17 +03 2022
ARPING 192.39.59.17 from 192.39.59.16 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.674ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.682ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.653ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.661ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.652ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.657ms
Sent 6 probes (1 broadcast(s))
Received 6 response(s)
Tue May 24 16:44:23 +03 2022

ここでは、 -w5arpingに渡しました。 これは、arpingに5秒間ARP要求を送信するように指示します。

arpingの直前と直後に2つのdateコマンドを実行して、arpingの実行時間を測定しました。 出力からわかるように、arpingは約5秒の間に6つのARP要求を送信しました。

–cオプションと–wオプションを同時に使用するとどうなりますか? その場合、arpingは、–wオプションで指定された期間が満了するか、–cオプションで指定された数の要求が送信されるまでpingを続行します。

$ date; arping –w 5 –c 15 192.39.59.17; date
Tue May 24 17:26:55 +03 2022
ARPING 192.39.59.17 from 192.39.59.16 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.660ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.616ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.616ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.636ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.638ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.632ms
Sent 6 probes (1 broadcast(s))
Received 6 response(s)
Tue May 24 17:27:01 +03 2022

ここでは、 –w 5 –c15オプションをarpingに渡しました。 arping は、5秒の時間が15のARP要求を送信する時間よりも短かったため、約5秒後にpingを停止しました。

それでは、より長い時間を使用してarpingを実行してみましょう。

$ date; arping –w 15 –c 5 192.39.59.17; date
Tue May 24 17:27:30 +03 2022
ARPING 192.39.59.17 from 192.39.59.16 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.719ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.625ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.665ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.656ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.626ms
Sent 5 probes (1 broadcast(s))
Received 5 response(s)
Tue May 24 17:27:35 +03 2022

15秒の期間は、5つのARP要求を送信するための期間よりも長くなりました。 そのため、 arping は、5つのARP要求を送信した後にpingを停止しました。

7. ネットワークインターフェイスの指定

ローカルホストに複数のネットワークインターフェイスがある場合は、–Iオプションを使用してインターフェイスを明示的に指定する必要があります。それ以外の場合、arpingはエラーを返します。

$ arping –f 192.39.59.17
arping: Suitable device could not be determined. Please, use option –I.

ここでは、複数のネットワークインターフェイスを持つホストでarpingを実行しました。 したがって、ARP要求に使用するインターフェイスを明示的に指定する必要があります。

$ arping –f –I ens192 192.39.59.17
ARPING 192.39.59.17 from 192.39.59.18 ens192
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.626ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

–Iens192オプションを使用してインターフェイスを指定しました。 今回は、ARPリクエストの送信に成功しました。

8. MACレベルのブロードキャストのみを送信する

通常、arpingは最初にARP要求をMACブロードキャストとして送信します。 ただし、ブロードキャストされたARP要求への応答を受信すると、ユニキャストに切り替わります。 次のARP要求を宛先ホストにのみ送信し始めます。

-b オプションを使用すると、この動作を変更して、ブロードキャストのみを送信することができます。

$ arping -b –c 2 192.39.59.17
ARPING 192.39.59.17 from 192.39.59.16 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.773ms
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.825ms
Sent 2 probes (2 broadcast(s))
Received 2 response(s)

出力ラインから明らかなように、送信された2つのプローブ(2つのブロードキャスト)arpingは両方のARP要求をブロードキャストします。

9. 未承諾ARPモードでの実行

-U オプションを使用して、arpingを非送信請求ARPモードで実行できます。

未承諾のARPは、GratuitousARPとも呼ばれます。 未承諾ARPは、隣接ホストが要求する前に、隣接ホストのARPテーブルを更新します。

これは、たとえば、フェイルオーバーのためにローカルホストのMACアドレスまたはIPアドレスが更新された場合に役立つことがあります。 未承諾のARPは、この変更を他のホストに伝播します。 この場合、ARP応答は期待されていません。

arping-Uオプションを使用して、宛先ホストのARPテーブルを更新してみましょう。

$ arping –U -c 1 192.39.59.17
ARPING 192.39.59.17 from 192.39.59.17 eth0
Sent 1 probes (1 broadcast(s))
Received 0 response(s)

上記のコマンド実行の結果、宛先ホストのARPテーブルにローカルホストのエントリがない場合は、追加されます。 ARPテーブルにすでにエントリがある場合は、更新されます。

出力の最後の行であるReceived0 response(s)は、期待どおりにARP応答が得られなかったことを示しています。 これに加えて、 arping は、出力の最初の行にある ARPING 192.39.59.17 from 192.39.59.17 eth0 に示すように、送信元IPアドレスを宛先IPアドレスに設定します。

デフォルトでは、一方的なARPアップデートを使用してARPテーブルに新しいエントリを作成することは許可されていません。 したがって、 sysctl コマンドを使用して、宛先ホストのarp_acceptカーネルパラメーターを1に設定する必要があります。 デフォルトでは0と同じです。

$ sysctl net.ipv4.conf.all.arp_accept # Unsolicited ARP isn’t allowed
net.ipv4.conf.all.arp_accept = 0 
$ sysctl -w net.ipv4.conf.all.arp_accept=1 # Now, unsolicited ARP is allowed
net.ipv4.conf.all.arp_accept = 1

10. ARP返信のみを送信する

arping-Aオプションとともに使用すると、宛先ホストのARPテーブルも更新されます。 ただし、一方的なARPは使用しませんが、ARP要求が行われたかのようにARP応答を使用します。

$ arping –A -c 1 192.39.59.17
ARPING 192.39.59.17 from 192.39.59.17 eth0
Sent 1 probes (1 broadcast(s))
Received 0 response(s)

arping はARP応答を送信するため、この場合、応答はありません。 この動作は、出力の最後の行である Received 0 response(s)で観察されました。 arping は、 –U オプションの場合と同様に、送信元IPアドレスを宛先IPアドレスに設定します。

11. 送信元IPアドレスの指定

arping は、ARPパケットの送信元IPアドレスを自動的に割り当てます。 ただし、 –s[X63X]オプションを使用して手動で設定することもできます。

まず、 –s オプションを使用せずに、宛先192.39.59.17にpingを実行してみましょう。

$ arping –c 1 192.39.59.17
ARPING 192.39.59.17 from 192.39.59.16 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.697ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

出力の最初の行にあるように、192.39.59.16 からのという用語は、arping192.39.59.16を送信元IPアドレスとして使用することを示します。 これはローカルホストのIPアドレスです。

次に、 –s オプションを使用して、宛先192.39.59.17にpingを実行してみましょう。

$ arping –c 1 –s 192.39.59.20 192.39.59.17
ARPING 192.39.59.17 from 192.39.59.20 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.697ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

ここでは、 –s 192.39.59.20 を使用して、送信元IPアドレスを192.39.59.20に設定します。 出力の最初の行の192.39.59.20からのという用語は、arpingが実際に指定された送信元アドレスを使用したことを示しています。

–s オプションを使用して送信元IPアドレスを設定できるようにするには、マシンに対してローカルではないアドレスにバインドできる必要があります。 通常、これは無効になっています。 ただし、net.ipv4.ip_nonlocal_bindカーネルパラメーターを1に設定することで有効にできます。

$ sysctl net.ipv4.ip_nonlocal_bind
net.ipv4.ip_nonlocal_bind = 0
$ arping –c 1 –s 192.39.59.20 192.39.59.17
bind: Cannot assign requested address
$ sysctl –w net.ipv4.ip_nonlocal_bind=1
net.ipv4.ip_nonlocal_bind = 1
$ arping –f –s 192.39.59.20 192.39.59.17
ARPING 192.39.59.17 from 192.39.59.20 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD]  0.697ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

ご覧のとおり、カーネルパラメータが 0 に等しいため、指定したIPアドレスを送信元IPアドレスとして使用できませんでした。 ただし、カーネルパラメータを 1. に設定すると、送信元IPアドレスと同じIPアドレスを使用できます。

12. 重複アドレス検出モードでの実行

-Dオプションをarpingに渡して、重複アドレス検出(DAD)モードで実行します。 ネットワーク内の別のホストが宛先IPアドレスを使用している場合、 arping はこれを検出し、1を返します。 重複するIPアドレスがない場合は、0を返します。

すでに使用されているIPアドレス192.39.59.17をDADモードでテストしてみましょう。

$ arping –D –c 1 192.39.59.17
ARPING 192.39.59.17 from 0.0.0.0 eth0
Unicast reply from 192.39.59.17 [00:50:56:B2:AB:CD] 0.970ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
$ echo $?
1

IPアドレス192.39.59.17はリモートホストのIPアドレスであるため、arpingは終了ステータスとして1を返しました。

次に、-Dオプションを使用して使用されていないIPアドレスにpingを実行しましょう。

$ arping -D –c 1 192.39.59.20
ARPING 192.39.59.20 from 0.0.0.0 eth0
Sent 1 probes (1 broadcast(s))
Received 0 response(s)
$ echo $?
0

ここで、IPアドレス 192.39.50.20 のホストがないため、arpingの終了ステータスは0でした。

DADモードでarpingを使用すると、送信元IPアドレスが0.0.0.0に自動的に設定されます。

13. 結論

この記事では、arpingコマンドについて説明しました。 そのオプションを説明し、いくつかの例でそれらの使用方法を示しました。