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

公開: 2022-07-28
bashプロンプトを表示するLinuxラップトップ
fatmawati achmad zaenuri / Shutterstock.com

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 

Ubuntuにarpingをインストールする

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

 sudo pacman -Sy arping 

Manjaroにarpingをインストールする

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

 sudo arping 192.168.1.17 

IPアドレスでarpingを使用する

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

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

 ping 192.168.1.17 

IPアドレスでのpingの使用

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

 sudo arping fedora-36.local 

IPアドレスでarpingを使用する

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

 sudo arping -c 2 192.168.1.18 

-cオプションを使用して、2つのリクエストを行った後に停止するようにarpingに指示します

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

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

 IPリンク

IPリンクを使用してネットワークインターフェイスを一覧表示する

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

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

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

-Iオプションを使用して、特定のネットワークインターフェイスを使用するように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形式を使用しますが、今回は、範囲内の各デバイスに送信される単一のARP要求のみを要求しています。

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

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

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

ifステートメントは$? —終了した最後のプロセスの終了コードを保持する変数—それがゼロかどうかを確認します。 そうである場合は、 echoを使用して成功のメッセージをターミナルウィンドウに出力します。 テストが失敗した場合、 grepはどちらの文字列も検出しませんでした。これは、ARP要求が失敗したことを意味します。

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

 chmod + x scan-range.sh 

chmod+xオプションを使用してスクリプトを実行可能にする

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

 sudo ./scan-range.sh 15 20
 ping 192.168.1.15 

スクリプトの実行とpingの実行

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

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

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

より深い洞察

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

関連: Nmtuiを使用してLinuxWi-Fiネットワークを管理する方法