Linuxのarping
コマンドはping
に似ていますが、ローカルネットワークでのみ使用できます。その利点は、ネットワークレベルが低いため、ping
が応答しない場合でも応答が得られることです。使用方法を説明します。
ARPプロトコル
IPアドレスは、ネットワークデバイスの数字のラベルです。適切なネットワークトラフィックが正しいデバイスに到着するように、アドレスとして使用されます。しかし、ローカルエリアネットワーク上のほとんどのデバイスは動的IPアドレスを持っています。つまり、次回起動したときにIPアドレスが変わる可能性があります。
ネットワークトラフィックを適切なデバイスに正しくルーティングできるようにするには、IPアドレスをメディアアクセス制御(MAC)アドレスにマッピングするスキームを使用する必要があります。MACアドレスは、デバイスの製造時に確立された一意のIDです。IPアドレスは論理アドレスです。MACアドレスは物理アドレスです。
アドレス解決プロトコルは、IPアドレスをMACアドレスにマッピングする仲介役です。ネットワーク内でネットワークパケットをマーシャリングしてルーティングするデバイス(通常はルーター)は、IPアドレスとMACアドレスを結びつけるARPテーブルを構築して維持します。
ルーターが知らないデバイスにデータをルーティングする必要がある場合、ルーターはARP要求を行って、新しいデバイスのMACアドレスを取得します。
新しいデバイスがネットワークに接続されると、IPアドレスが割り当てられますが、それだけでは実際にトラフィックをルーティングするには十分ではありません。ルーターは、ジグソーパズルの欠けているピースであるMACアドレスを取得する必要があります。しかし、IPアドレスだけではデバイスにパケットをルーティングする情報が十分ではないため、キャッチ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トラフィックは、IPアドレスとMACアドレスの関係が確立され、記録されているため、デバイスにルーティングできるようになりました。
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 link
このコンピューターには3つのインターフェイスがあります。lo
仮想インターフェイスは、同じコンピューター上のソフトウェア間の内部接続のループバックとして使用されます。ここでは使用しません。イーサネット接続enp3s0
またはワイヤレスインターフェイスwlan0
のいずれかを使用できます。
このコマンドはarping
に、自分で選択せずに、選択したインターフェイスを使用するように指示します。
sudo arping -c 2 -I enp3s0 manjaro-21.local
スクリプトでarpingを使用する
スクリプトのループでarping
をラップすることで、IPアドレスの範囲全体で機能させることができます。このスクリプトからテキストをコピーして、「scan-range.sh」というファイルに保存します。
スクリプトを編集して、192.168.1のすべての出現を、ネットワークのIPアドレスに置き換える必要があります。
<code>#!/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</code>
スクリプトは2つのコマンドラインパラメーターを受け入れます。これらは、arping
を使用するIPアドレスの範囲の最後のオクテットとして使用されます。したがって、スクリプトに20と30を渡すと、ループは192.168.1.20から始まり、IPアドレス192.168.1.30を使用した後に終了します。
パラメーターには、スクリプト内で$1
と$2
としてアクセスします。これらは、Cスタイルのfor
ループで使用されます。for
ループの各スピンで、$device
は範囲内の次のIPアドレスに設定されます。
スクリプトは、すでに見たのと同じarping -c
形式を使用しますが、今回は範囲内の各デバイスに送信されるARPリクエストを1つだけ要求しています。
arping
コマンドからの出力をgrep
にパイプします。
grep
構文はスクリプトで簡素化できます。grep
は、「1 response」と「1 packets received」の2つの文字列のいずれかを検索しています。これは、テストコンピューターにarping
の異なるバージョンがあり、異なる用語を使用しているためです。grep
がこれらのフレーズのいずれかを見つけた場合、その終了値は0になります。
arping
のバージョンで使用されているフレーズがわかれば、別のフレーズを削除してgrep
構文を簡素化できます。
if
ステートメントは$?
(終了した最後のプロセスの終了コードを保持する変数)をテストして、それが0かどうかを確認します。0の場合は、echo
を使用してターミナルウィンドウに成功メッセージを印刷します。テストが失敗した場合、grep
はどちらの文字列も見つからなかったため、ARPリクエストが失敗したことを意味します。
chmod
コマンドと+x
オプションを使用してスクリプトを実行可能にします。
chmod +x scan-range.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
でどこにも到達できない場合は、レイヤーを1つ下げて、arping
が何を教えてくれるかを確認してください。
コメントする