ARP通信
今回は、Pythonを用いてARP通信を作成しました。
ARPとは
IPアドレスからMACアドレスを取得するプロトコルになります。
通信イメージ図
フレーム
◇Ethernet II
・宛先MACアドレス:全機器にリクエスト
(ブロードキャスト:ff:ff:ff:ff:ff:ff)
・送信元MACアドレス:自身のMACアドレス
・Type:プロトコルID
(0x0800:IPv4、0x0806:ARP)など
◇ARPメッセージ
・ハードウェアタイプ:複数の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アドレス
◇送信前ARPテーブルの確認
・送信側 ARPテーブル
・受信側 ARPテーブル
◇ARP要求
◇ARP応答
◇送信後ARPテーブルの確認
・送信側 ARPテーブル
・受信側 ARPテーブル