ARP通信
今回は、Pythonを用いてARP通信を作成しました。
ARPとは
IPアドレスからMACアドレスを取得するプロトコルになります。
通信イメージ図
![](https://assets.st-note.com/img/1701209760360-Sq0QplbS2A.png?width=1200)
フレーム
◇Ethernet II
![](https://assets.st-note.com/img/1701120849372-1folgUxfjC.png?width=1200)
・宛先MACアドレス:全機器にリクエスト
(ブロードキャスト:ff:ff:ff:ff:ff:ff)
・送信元MACアドレス:自身のMACアドレス
・Type:プロトコルID
(0x0800:IPv4、0x0806:ARP)など
◇ARPメッセージ
![](https://assets.st-note.com/img/1701122059218-y3aRFY09Am.png?width=1200)
・ハードウェアタイプ:複数のL2通信をサポート
(0x0001:Ethernet、0x0006:IEEE802.1x)など
・プロトコルタイプ:どのL3通信をするか
(0x0800:IPv4 、0x86DD:IPv6 )など
・ハードウェアサイズ:MAC アドレスの長さ
(MACアドレス:48bit=6byteなので0x06)
・プロトコルサイズ:L3通信のプロトコルの長さ
(IPv4:32bit = 4byteなので0x04)など
・オペレーションコード:ARP 要求 / 応答
(ARP Request:0x0001、ARP Response:0x0002)
・送信元MACアドレス:自身のMACアドレス
・送信元IPアドレス:自身のIPアドレス
・ターゲットMACアドレス:送信相手のMACアドレス
・ターゲットIPアドレス:送信相手のIPアドレス
機器情報とソースコード
◇機器
・送信側
CentOS:Ver 7.9(仮想環境)
※Python:Ver 3.10.2 導入
・受信側
Windows10(仮想環境)
◇ソースコード(Python)
※下記ソースコードLinux OSでのみ実行可能
https://github.com/tango3304/tarp
検証結果
◇ARPコードを実行
※実行するときは、管理者権限で実行する。
・事前に「ip address」などで以下のネットワーク情報を調べる
⇒送信元インターフェース
⇒送信元MACアドレス
⇒送信元IPアドレス
⇒宛先IPアドレス
![](https://assets.st-note.com/img/1701475508861-TRROoN83Dg.jpg?width=1200)
◇送信前ARPテーブルの確認
・送信側 ARPテーブル
![](https://assets.st-note.com/img/1701380853641-wVeWqXEAwn.jpg?width=1200)
・受信側 ARPテーブル
![](https://assets.st-note.com/img/1701381150063-9ncHubRNjg.jpg)
◇ARP要求
![](https://assets.st-note.com/img/1701382226271-1g4gUMcJCQ.jpg?width=1200)
![](https://assets.st-note.com/img/1701382233991-FucJtMuGDa.jpg?width=1200)
◇ARP応答
![](https://assets.st-note.com/img/1701382446160-GaAHMCkKWM.jpg?width=1200)
![](https://assets.st-note.com/img/1701382470080-b0KuIuiQN7.jpg?width=1200)
◇送信後ARPテーブルの確認
・送信側 ARPテーブル
![](https://assets.st-note.com/img/1701382542315-1YrkDJN7HH.jpg?width=1200)
・受信側 ARPテーブル
![](https://assets.st-note.com/img/1701382548758-J8oed1LwAo.jpg)