見出し画像

入門セキュリティコンテストCh5

ch5 リスト5-2に記載されているコードがPython2でPython3で実行しようとするとエラーが発生したので忘れないように解決策を記載します。
Python2で書かれたコードです。

from scapy.all import *

packets = rdpcap('seccon_q1_pcap.pcap')
icmpdata = ""

for i in range(43,48):
    p = packets[i]['Raw'].load
    # print(p[28:])
    icmpdata = icmpdata + p[28:]

print(icmpdata)

index = icmpdata.find('\x89\x50\x4e\x47\x0d\x0a\x1a\x0a')
key = icmpdata[index:]

f=open('kagi.png','wd')
f.write(key)
f.close()
  • p[28:]でTypeError: can only concatenate str (not "bytes") to str

  • index = icmpdata.find('\x89\x50\x4e\x47\x0d\x0a\x1a\x0a')でエラー

  • f=open('kagi.png','wd')で'wd'がエラー


修正コード

from scapy.all import *

packets = rdpcap('seccon_q1_pcap.pcap')
icmpdata = ""

for i in range(43,48):
    p = packets[i]['Raw'].load
    # print(p[28:])
    icmpdata = icmpdata + (p[28:]).decode('latin1')


index = icmpdata.find((b'\x89\x50\x4e\x47\x0d\x0a\x1a\x0a').decode('latin1'))
key = icmpdata[index:].encode('latin1')
print(key)
f=open('kagi.png','wb')
f.write(key)
f.close()

16進数表記回りでPython2と3で違いがありました
単純にencode, decodeを付けただけではエラーが出たのでlatin1で処理することでエラーが回避できました
wd →wb になってました

この記事が気に入ったらサポートをしてみませんか?