技術ノート Linux Linux で arping コマンドを使用する方法

Linux で arping コマンドを使用する方法

Linux で arping コマンドを使用する方法

Linux arping コマンドは ping に似ていますが、ローカル ネットワークのみを対象とします。その利点は、より低いネットワーク レベルで動作し、 ping ができない場合に応答を取得できることです。使用方法は次のとおりです。

ARPプロトコル

Linux で arping コマンドを使用する方法

IP アドレスは 、ネットワークに接続されたデバイスの数値ラベルです。これは、適切なネットワーク トラフィックが正しいデバイスに到達するためのアドレスとして使用されます。ただし、 ローカル エリア ネットワーク 上のほとんどのデバイスには動的 IP アドレスがあります。つまり、次回起動時に IP アドレスが変更される可能性があります。

Linux で arping コマンドを使用する方法

ネットワーク トラフィックを適切なデバイスに正しくルーティングできるようにするには、IP アドレスを メディア アクセス コントロール (MAC) アドレス にマッピングするスキームを採用する必要があります。 MAC アドレスは、デバイスの製造時点で確立される一意の ID です。 IP アドレスは論理アドレスです。 MAC アドレスは物理アドレスです。

アドレス解決プロトコルは、IP アドレスを MAC アドレスにマッピングする仲介者です。ネットワーク内のネットワーク パケット のマーシャリングと方向付けを担当するデバイス (通常はルーター) は、IP アドレスを MAC アドレスに結び付ける ARP テーブルを構築および維持します。

ルータは 、未知のデバイスにデータをルーティングする必要がある場合、ARP リクエストを作成して新しいデバイスの MAC アドレスを取得します。

新しいデバイスがネットワークに接続されると、IP アドレスが割り当てられますが、実際にトラフィックをルーティングするにはそれだけでは十分ではありません。ルーターは、ジグソーの欠落部分である MAC アドレスを取得する必要があります。しかし、IP アドレスだけではパケットをデバイスにルーティングするのに十分な情報がないため、 Catch-22 は IP アドレスを使用してハードウェアにクエリを実行して MAC アドレスを取得することができません。

オープン システム相互接続モデルは、動作中のネットワークを構成するテクノロジーを一連の層としてグループ化します。上位層は下位層なしでは動作できません。 OSI モデルには 7 つの層があります。

  • レイヤ 7 は最上位のレイヤ、つまり アプリケーション レイヤです。コンピュータ ユーザーに情報を提供し、ユーザーから情報を受け取ります。
  • レイヤ 6 は プレゼンテーション レイヤです。これにより、ネットワーク形式との間でデータが移動する際に、データが正しい形式または状態になることが保証されます。 暗号化 と復号化はこの層で行われます。
  • レイヤ 5 は セッション 層です。セッションは、2 つ以上のデバイス間のネットワーク接続です。この層は、接続の開始、ハンドシェイク、タイムアウト、不要になった接続の切断などの処理に関与します。
  • レイヤ 4 は トランスポート 層です。これは、ネットワーク上でデータを調整された方法で移動させる層です。この層は、転送速度やデータ量などに関係します。伝送制御プロトコル ( TCP/IP の TCP) は、この層で動作します。
  • レイヤ 3 は ネットワーク 層です。ここでルーティングとパケット転送が行われます。これは、インターネット プロトコル (TCP/IP の IP) が動作する層です。
  • レイヤ 2 は データリンク 層です。これは、すべてのデバイスへのブロードキャストまたは特定の MAC アドレスへのユニキャストを使用して、直接アドレス指定可能なデバイス間でパケットを送信するために使用されます。
  • レイヤ 1 は 物理 層です。これは、ケーブル配線、ルーター、ネットワーク スイッチなどの物理インフラストラクチャに関係します。 Wi-Fi で使用される電波もこれに該当します。

ルーターは、テーブルにない IP アドレスのパケットを受信すると、ネットワーク全体にブロードキャスト パケットを送信します。これは事実上、「この IP アドレスを持っているのは誰ですか?」と尋ねます。これはレイヤー 2 メッセージであるため、IP ルーティングには依存しません。

一致するアドレスを持つデバイスは、その MAC アドレスを送り返すことで応答します。そのデバイスの IP アドレスと MAC アドレスをマッピング テーブルに追加できます。 IP アドレスと MAC アドレスの関係が確立され、記録されているため、通常の IP トラフィックをデバイスにルーティングできるようになります。

Linux で arping コマンドを使用する方法

arping コマンド

賢い ARP 機能はすべてバックグラウンドで自動的に実行され、ARP テーブルの構築と維持が行われます。 arping コマンドは、ARP クエリの機能の一部を端末ウィンドウにもたらします。これは OSI レイヤ 2 で動作し、 ping 送信されない場合にデバイスからの応答を要求できます。

Fedora 36 では、 arping すでにインストールされていましたが、Manjaro 21 と Ubuntu 22.04 ではインストールする必要がありました。

Ubuntu の場合、コマンドは次のとおりです。

 sudo apt install arping

Manjaro では次のように入力する必要があります。

 sudo pacman -Sy arping

arping 使用する最も簡単な方法は、IP アドレスを使用することです。これは、ローカル ネットワークに接続された、直接アドレス指定可能なデバイスのアドレスである必要があります。 arping レイヤー 2 で動作するため、ルーティングはできません。 arping sudo を使用する必要があります。

 sudo arping 192.168.1.17

Ctrl+C を押して停止します。返される情報は、応答デバイスの MAC アドレス、 arping 要求のインデックス番号、 arping 要求が完了するまでの往復時間です。

以下の出力を ping コマンドの出力と比較してください。 ping コマンドは、ネットワーク パケットの往復のタイミングに関する詳細情報を返します。 arping コマンドで得られるタイミング統計は少なくなりますが、デバイスの MAC アドレスが含まれます。

 ping 192.168.1.17

arping デバイスのネットワーク名 を使用することもできます。

 sudo arping fedora-36.local

-c (カウント) オプションを使用すると、設定された数のリクエストの後に arping を停止するように指示できます。このコマンドは arping に 2 回試行してから停止するように指示します。

 sudo arping -c 2 192.168.1.18

コンピュータに複数のネットワーク インターフェイスがある場合は、 -I (インターフェイス) オプションを使用して、どのインターフェイスを使用するかを arping に指示できます。

ip link コマンドを 使用すると、ネットワーク インターフェイスを一覧表示できます。

 IPリンク

このコンピュータには 3 つのインターフェイスがあります。 lo 仮想インターフェイスは、同じコンピュータ上のソフトウェア間の内部接続のループバックとして使用されます。ここではそれは役に立ちません。イーサネット接続 enp3s0 またはワイヤレス インターフェイス wlan0 いずれかを使用できます。

このコマンドは、 arping 、独自の選択を行うのではなく、選択したインターフェイスを使用するように指示します。

 sudo arping -c 2 -I enp3s0 manjaro-21.local 

Linux で arping コマンドを使用する方法

スクリプトでの arping の使用

スクリプト内のループで arping をラップすることにより、一定範囲の IP アドレス上で arping を動作させることができます。このスクリプトからテキストをコピーし、「scan-range.sh」という名前のファイルに保存します。

スクリプトを編集し、出現する 192.168.1 をすべて ネットワークの IP アドレス に置き換える必要があります。

 #!/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

スクリプトは 2 つのコマンド ライン パラメータを受け入れます。これらは、 arping を使用する範囲の IP アドレスの最後のオクテットとして使用されます。したがって、20 と 30 をスクリプトに渡すと、ループは 192.168.1 から始まります。 20 で あり、IP アドレス 192.168.1 を使用した後に終了します。 30

パラメータはスクリプト内で $1 および $2 としてアクセスされます。これらは C スタイルの for ループで使用されます。 for ループがスピンするたびに、 $device 範囲内の次の IP アドレスに設定されます。

このスクリプトでは、これまでに説明したものと同じ arping -c 形式を使用しますが、今回は範囲内の各デバイスに 1 つの ARP リクエストを送信することだけを要求しています。

arping コマンドからの出力は、 grep を介して パイプ処理 されます。

スクリプト内の grep 構文を簡略化できます。 grep 、「1 応答」または「1 パケット受信」の 2 つの文字列のうちの 1 つを探します。これは、テスト コンピューターに異なるバージョンの arping 搭載されており、使用する用語も異なるためです。 grep これらのフレーズのいずれかを見つけた場合、その終了値は 0 になります。

ご使用のバージョンの arping でどのフレーズが使用されているかがわかっている場合は、他のフレーズを削除して grep 構文を簡素化できます。

if ステートメントは $? をテストします。 —終了した最後のプロセスの終了コードを保持する変数—それがゼロかどうかを確認します。成功した場合は、 echo を使用して成功のメッセージを端末ウィンドウに出力します。テストが失敗した場合、 grep どちらの文字列も見つけられなかったことになり、ARP リクエストが失敗したことを意味します。

chmod コマンドと +x オプションを使用して、スクリプトを実行可能にします。

 chmod +x スキャン範囲.sh

これを実行して、15 ~ 20 の IP 範囲をスキャンします。これらのアドレスの一部にはデバイスが接続されていないため、いくつかの障害が発生することがわかります。 sudo 忘れずに使用してください。また、192.168.1.15 でデバイスに ping を実行してみます。

 sudo ./scan-range.sh 15 20

 ping 192.168.1.15

他のネットワークと同様に、成功と失敗が混在しています。ただし、192.168.1.15 のデバイスはレイヤー 2 の ARP 要求には応答しますが、レイヤー 3 の ping 要求には応答しないことに注意してください。

デバイスに ping を実行して障害に気付いた場合は、デバイスが接続されているか、オンラインであるか、デバイス 192.168.1.15 から ping 実行できるかどうかを確認する傾向があるでしょう。

しかし、 arping 使用すると、接続されていて、オンラインであり、ネットワークにアクセス可能であることを確認できます。これにより、トラブルシューティングでルーティングと ARP テーブルの問題の調査を開始することができます。

Linux で arping コマンドを使用する方法

より深い洞察

ネットワーキングには多くの層があります。 ping 何も解決しない場合は、レイヤーをドロップダウンして、 arping で何がわかるかを確認してください。

「 Linux で arping コマンドを使用する方法」に関するベスト動画選定!

【Webサーバー講座】第10回 Linuxでよく使うコマンドと操作【独り言】
【ゆっくりIT】sarコマンドとは? 絶対覚えろ!Linuxコマンド! システム統計情報の取得コマンド ~ゆっくりコマンド解説~ No.057