Linux
arping
コマンドは
ping
に似ていますが、ローカル ネットワークのみを対象とします。その利点は、より低いネットワーク レベルで動作し、
ping
ができない場合に応答を取得できることです。使用方法は次のとおりです。
ARPプロトコル
IP アドレスは 、ネットワークに接続されたデバイスの数値ラベルです。これは、適切なネットワーク トラフィックが正しいデバイスに到達するためのアドレスとして使用されます。ただし、 ローカル エリア ネットワーク 上のほとんどのデバイスには動的 IP アドレスがあります。つまり、次回起動時に IP アドレスが変更される可能性があります。
ネットワーク トラフィックを適切なデバイスに正しくルーティングできるようにするには、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 トラフィックをデバイスにルーティングできるようになります。
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
スクリプトでの 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 テーブルの問題の調査を開始することができます。
より深い洞察
ネットワーキングには多くの層があります。
ping
何も解決しない場合は、レイヤーをドロップダウンして、
arping
で何がわかるかを確認してください。





