LoginSignup
1
0

ARPフレームをキャプチャする

Last updated at Posted at 2024-03-24

背景

検証環境:docker でルータとクライアントを用意
1.クライアント(ARPリクエスト送る側)cl1
2.ルータ(ARPReply送る側)rt2

目的:通信が開始されるまでの流れの確認
つまり、ARPリクエストを送ってからARPReplyが返ってくるまでの動きを見る

参考文献:「体験しながら学ぶ ネットワーク技術入門 著/みやたひろし」
体験型で学べる参考書を探していたところに出会った本。机上でのネットワークの概要を抑えているが実戦経験がない人におすすめです。パケットを送ったときにどのような動きをするのかを順番を追って説明してくれているのでこの記事を読んでもっと深い内容を知りたいと思った方はぜひ購入を検討されてはいかがでしょうか。

といったところが背景になります。ここからは検証内容にはいっていきます。
手順は以下の通り。
arp1.png

arp2.png

そもそもARPとは

Address Resolution Protocolの略。MACとIPを変換する役割をもつ。IPアドレスとMACアドレスの対応表があると思えばいいと思います。

検証

ルータ側

最初にipアドレスを確認

root@rt1:/# ifconfig net1
net1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.254  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::bca0:5bff:fefe:2a22  prefixlen 64  scopeid 0x20<link>
        ether 02:42:ac:01:12:54  txqueuelen 1000  (Ethernet)
        RX packets 112  bytes 12377 (12.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 87  bytes 10686 (10.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

次にARPテーブルの確認

ip neigh show

もし、すでに書き込まれているのなら削除(今回は検証のため)。

ip neigh flush all

次にtcpdumpコマンドでクライアント側からのARPリクエストを受け付ける状態にする。tcpdumpコマンドは通信の生のデータをキャプチャし、その出力結果を出してくれるツールである。WireShark等のツールで確認できる。-w で出力先ファイル名を指定。-iでネットワークインターフェースを指定できる。

root@rt1:/# tcpdump -i net1 -w /tmp/tinet/arp.pcapng arp
tcpdump: listening on net1, link-type EN10MB (Ethernet), capture size 262144 bytes

クライアント側

root@cl3:/# ifconfig net0
net0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.100  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::e0a0:33ff:fe08:d4ce  prefixlen 64  scopeid 0x20<link>
        ether 02:42:ac:01:11:00  txqueuelen 1000  (Ethernet)
        RX packets 89  bytes 10570 (10.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 40  bytes 2921 (2.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

同様にARPテーブルの確認を行い、存在していれば削除する。

root@cl3:/# ip neigh show
192.168.11.254 dev net0 lladdr 02:42:ac:01:12:54 STALE
root@cl3:/# ip neigh flush all
root@cl3:/# ip neigh show

ARPテーブルの確認

ここまで準備ができてようやくICMPパケットをクライアント側からルータ側に送る。

ping 192.168.11.254

適当な時間をおいて、ctrl+Cで中断し、クライアント側とルータ側でARPテーブルを確認すると、
クライアント側は

root@cl3:/# ip neigh
192.168.11.254 dev net0 lladdr 02:42:ac:01:12:54 STALE

ルータ側は

root@rt1:/# ip neigh
192.168.11.100 dev net1 lladdr 02:42:ac:01:11:00 STALE

というように、確認ができた。
これで通信の準備が完了し、ICMPパケットが送られるということになる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0