入門セキュリティコンテスト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 になってました
この記事が気に入ったらサポートをしてみませんか?