実践パケット解析にて、

まだ『知っておきたい下位層プロトコル』というところを読んでいます(ちょうど中盤)

で,サンプルのパケットをwiresharkで見てどういうことで、そのパケットがどういう意味を果たすか
書いてあります。

しかし、この前せっかくScapyを勉強したので、Scapyでもパケットが見れるのか。
Wiresharkとどっちの方が見やすいのか!?って感じで、見比べました。
(wiresharkはめんどくさいから自分でみてね๑❛ᴗ❛๑)۶ w


早速やりましょう。

今回は arp_resolution.pcap というパケットを見ます。(実践パケット解析のサンプルです

で、wiresharkで見る場合だったら open => file という感じで見れるのでしょう。

ScapyはCUIなので、少しめんどくさい。ほんの少しね。

このサンプルは ppa2ecapturesというフォルダとして提供しています。

では、tmpにでも置きましょうか。

/tmp/ppa2ecaptures/

という感じになりますね。

>>>#arp_packetという変数(パケット)に rdpcapという関数で代入します。
>>>arp_packet  = rdpcap('/tmp/ppa2ecaptures/arp_resolution.pcap')

>>>#ちなみにwiresharkとして開きたかったら,
>>>#wireshark(arp_packet)
>>>#として開くことも可能。まぁ、今回はCUIって言ったのでやらないです。はい。
>>>#簡単に見る感じならしたのように見れますね。
>>> arp_packet.show()
0000 Ether / ARP who has 192.168.0.1 says 192.168.0.114
0001 Ether / ARP is at 00:13:46:0b:22:ba says 192.168.0.1 / Padding
>>>#もっと詳しく!って思う方には、1つ1つパケットを見たら良いですね。
>>> arp_packet[0]
<Ether  dst=ff:ff:ff:ff:ff:ff src=00:16:ce:6e:8b:24 type=0x806 |<ARP  hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=who-has hwsrc=00:16:ce:6e:8b:24 psrc=192.168.0.114 hwdst=00:00:00:00:00:00 pdst=192.168.0.1 |>>
>>> arp_packet[1]
<Ether  dst=00:16:ce:6e:8b:24 src=00:13:46:0b:22:ba type=0x806 |<ARP  hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=00:13:46:0b:22:ba psrc=192.168.0.1 hwdst=00:16:ce:6e:8b:24 pdst=192.168.0.114 |<Padding  load='\xc0\xa8\x00r' |>>>
>>> 
>>>#⬆のは確かに詳しいですが、見にくい(醜い)ですね。じゃあ、.show2()を使いましょ、
>>> arp_packet[0].show2()
###[ Ethernet ]###
  dst= ff:ff:ff:ff:ff:ff
  src= 00:16:ce:6e:8b:24
  type= 0x806
###[ ARP ]###
     hwtype= 0x1
     ptype= 0x800
     hwlen= 6
     plen= 4
     op= who-has
     hwsrc= 00:16:ce:6e:8b:24
     psrc= 192.168.0.114
     hwdst= 00:00:00:00:00:00
     pdst= 192.168.0.1
>>> arp_packet[1].show2()
###[ Ethernet ]###
  dst= 00:16:ce:6e:8b:24
  src= 00:13:46:0b:22:ba
  type= 0x806
###[ ARP ]###
     hwtype= 0x1
     ptype= 0x800
     hwlen= 6
     plen= 4
     op= is-at
     hwsrc= 00:13:46:0b:22:ba
     psrc= 192.168.0.1
     hwdst= 00:16:ce:6e:8b:24
     pdst= 192.168.0.114
###[ Padding ]###
        load= '\xc0\xa8\x00r'
>>> 
>>>#ほうほう。分かりやすい。
>>>#最後にオペレーションコード(opcode)
>>> arp_packet[0].op
1
>>> arp_packet[1].op
2
>>> 

一番パケットで気をつけることが 送信先と送信元ですね。これが凄く分かりやすい所が素敵。
そのあと、オペレーションコードが1,2って書いてあるけど、実は 0x0002なりもっといい方法
あるんじゃねぇのかなぁ〜って思うけど、typeとして考えるならありかな。って思います、はい。

##まとめ##
Pythonによって作られたScapy最高。もっというとPython最高。
ネットワークたまらんぐらいおもろいよね。うん。