pcap から icmp のデータ部を取り出す
WaniCTF'21 で pcap から icmp のデータを抽出して jpeg を作成する問題の writeup で紹介されている Python スクリプトについてメモします。
以下のスクリプトで pcap から ICMP のデータ部を取り出すことができます。
#!/usr/bin/env python3.8 import scapy.all with open("out.jpg", "wb") as f: packets = scapy.all.rdpcap("illegal_image.pcap") for p in packets.filter(lambda p: "ICMP" in p and p["IP"].src == "192.168.0.133"): f.write(p["ICMP"].load)
scapy を使用するためにはインストールが必要です。
$ sudo apt install python3-scapy
packets.filter 文が理解できないのですが、 取り敢えず lambda 関数の構文は以下の通りです。
lambda 引数 : 戻り値
分からない場合は素直に書くのがよいかもしれません。
for p in packets: if p.haslayer(ICMP): if p[IP].src == '192.168.0.133': data += p[Raw].load
参考
wanictf21spring-writeup/for/illegal_image at main · wani-hackase/wanictf21spring-writeup · GitHub
WaniCTF'21-spring write-up - プログラム系統備忘録ブログ