从 pcap 文件中提取 TCP 负载
Extract TCP payload from pcap file
使用 tcpdump
,我正在捕获网络流量。我有兴趣提取实际的 TCP 有效负载数据,即在我的特定情况下的 HTTP 流量。
我尝试使用 scapy
来实现,但我只找到了函数 remove_payload()
。有对应的对口吗?或者您知道提供此类功能的任何其他工具吗?
很遗憾,我没有找到满意的scapy文档。
您可以使用 rdpcap
使用 Scapy 轻松读取 pcap,然后您可以使用数据包的 Raw
(在 TCP 之上)层来播放 HTTP 内容:
from scapy.all import *
pcap = rdpcap("my_file.pcap")
for pkt in pcap:
if Raw in pkt:
print pkt[Raw]
如果其他用户可能有类似的问题:我最终使用了以下脚本:
infile=infile.pcap
outfile=outfile
ext=txt
rm -f ${outfile}_all.${ext}
for stream in $(tshark -nlr $infile -Y tcp.flags.syn==1 -T fields -e tcp.stream | sort -n | uniq | sed 's/\r//')
do
echo "Processing stream $stream: ${outfile}_${stream}.${ext}"
tshark -nlr $infile -qz "follow,tcp,raw,$stream" | tail -n +7 | sed 's/^\s\+//g' | xxd -r -p | tee ${outfile}_${stream}.${ext} >> ${outfile}_all.${ext}
done
使用 tcpdump
,我正在捕获网络流量。我有兴趣提取实际的 TCP 有效负载数据,即在我的特定情况下的 HTTP 流量。
我尝试使用 scapy
来实现,但我只找到了函数 remove_payload()
。有对应的对口吗?或者您知道提供此类功能的任何其他工具吗?
很遗憾,我没有找到满意的scapy文档。
您可以使用 rdpcap
使用 Scapy 轻松读取 pcap,然后您可以使用数据包的 Raw
(在 TCP 之上)层来播放 HTTP 内容:
from scapy.all import *
pcap = rdpcap("my_file.pcap")
for pkt in pcap:
if Raw in pkt:
print pkt[Raw]
如果其他用户可能有类似的问题:我最终使用了以下脚本:
infile=infile.pcap
outfile=outfile
ext=txt
rm -f ${outfile}_all.${ext}
for stream in $(tshark -nlr $infile -Y tcp.flags.syn==1 -T fields -e tcp.stream | sort -n | uniq | sed 's/\r//')
do
echo "Processing stream $stream: ${outfile}_${stream}.${ext}"
tshark -nlr $infile -qz "follow,tcp,raw,$stream" | tail -n +7 | sed 's/^\s\+//g' | xxd -r -p | tee ${outfile}_${stream}.${ext} >> ${outfile}_all.${ext}
done