Linuxでarpingコマンドを使用する方法
公開: 2022-07-28 Linuxのarping
コマンドはping
に似ていますが、ローカルネットワーク専用です。 その利点は、より低いネットワークレベルで動作し、 ping
ができないときに応答を受け取ることがあることです。 使い方はこちらです。
ARPプロトコル
IPアドレスは、ネットワークデバイスの数値ラベルです。 適切なネットワークトラフィックが正しいデバイスに到着するように、アドレスとして使用されます。 ただし、ローカルエリアネットワーク上のほとんどのデバイスには動的IPアドレスがあります。 つまり、次に起動したときにIPアドレスが変わる可能性があります。
ネットワークトラフィックを適切なデバイスに正しくルーティングできるようにするには、IPアドレスをメディアアクセス制御(MAC)アドレスにマップするスキームを採用する必要があります。 MACアドレスは、デバイスの製造時に確立された一意のIDです。 IPアドレスは論理アドレスです。 MACアドレスは物理アドレスです。
アドレス解決プロトコルは、IPアドレスをMACアドレスにマッピングする仲介者です。 ネットワーク内のネットワークパケットのマーシャリングと転送を担当するデバイス(通常はルーター)は、IPアドレスをMACアドレスに関連付けるARPテーブルを作成して維持します。
ルーターは、知らないデバイスにデータをルーティングする必要がある場合、新しいデバイスのMACアドレスを取得するためにARP要求を行います。
新しいデバイスがネットワークに接続されると、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トラフィックをデバイスにルーティングできるようになりました。
関連:インターネットの基盤:TCP/IPは40歳になります
arpingコマンド
巧妙なARPはすべてバックグラウンドで自動的に実行され、ARPテーブルを構築および維持します。 arping
コマンドは、ARPクエリの機能の一部をターミナルウィンドウにもたらします。 OSIレイヤー2で動作し、 ping
が実行されない場合にデバイスからの応答を要求できます。
Fedora 36では、 arping
はすでにインストールされていますが、Manjaro21とUbuntu22.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
(count)オプションを使用して、設定された数のリクエストの後に停止するように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
形式を使用しますが、今回は、範囲内の各デバイスに送信される単一のARP要求のみを要求しています。
arping
コマンドからの出力はgrep
を介してパイプされます。
grep
構文は、スクリプトで簡略化できます。 grep
は、「1応答」または「1パケット受信」の2つの文字列のいずれかを探しています。 これは、テストコンピューターに異なるバージョンのarping
があり、異なる用語を使用しているためです。 grep
がこれらのフレーズのいずれかを検出した場合、その終了値はゼロになります。
使用しているバージョンのarping
がどのフレーズを使用しているかがわかっている場合は、他のフレーズを削除することでgrep
構文を簡略化できます。
if
ステートメントは$?
—終了した最後のプロセスの終了コードを保持する変数—それがゼロかどうかを確認します。 そうである場合は、 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
でどこにも到達しない場合は、レイヤーをドロップダウンして、 arping
で何がわかるかを確認してください。
関連: Nmtuiを使用してLinuxWi-Fiネットワークを管理する方法