ARP通信

今回は、Pythonを用いてARP通信を作成しました。



ARPとは

IPアドレスからMACアドレスを取得するプロトコルになります。

通信イメージ図


フレーム

◇Ethernet II

EthernetIIフレーム

・宛先MACアドレス:全機器にリクエスト
(ブロードキャスト:ff:ff:ff:ff:ff:ff)

・送信元MACアドレス:自身のMACアドレス

・Type:プロトコルID
(0x0800:IPv4、0x0806:ARP)など


◇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応答パケット
ARP応答パケットキャプチャ


◇送信後ARPテーブルの確認

・送信側 ARPテーブル

ARPテーブル更新 & ARPテーブル確認

・受信側 ARPテーブル