首先,我已经阅读了有关scapy的其他原始答案,但是没有一个是有用的,也许我只是做错了什么,这就是今天带给我的东西。
所以,对于初学者来说,我有一个pcap文件,它开始损坏了一些重传,我相信我已经恢复正常了。
它包含Radiotap报头,IEEE 802.11(dot11),逻辑链路控制,IPv4,UDP和DNS。
根据我的理解,传输的udp数据包保存这些原始数据,然而,最近的一些怪癖,也许原始数据是Radiotap / raw。
使用scapy,我正在迭代数据包,当找到带有Raw层的数据包时,我使用scapy的.show()
函数来查看它。
因此,我可以看到有一个原始负载可用
###[ Raw ]###
\load \
|###[ Raw ]###
| load = '@\x00\x00\x00\xff\xff\xff\xff\xff\xff\x10h?'
所以,我想我的问题是,如何捕获这个有效载荷以接收任何可能的内容,据我所知,载荷应该是一个图像文件,但是我很难相信这样,所以我想我已经错过了某个地方。
这是我用来实现上述结果的代码
from scapy.all import *
from scapy.utils import *
pack = rdpcap('/home/username/Downloads/new.pcap')
for packet in pack:
if packet.getlayer(Raw):
print '[+] Found Raw' + '\n'
l = packet.getlayer(Raw)
rawr = Raw(l)
rawr.show()
任何帮助,或进一步阅读的见解将不胜感激,我是scapy的新手,没有分组解剖的专家。
*旁注,以前我曾尝试(使用单独的代码和服务器)重播数据包并将它们发送给自己,但无济于事。但是我觉得这是因为我在接收UDP数据包时缺乏知识。
更新 - 我现在用scapy reassembler测试了我的pcap文件,我已经确认我没有碎片包,或类似的任何东西,所以我认为一切都应该顺利...在wireshark打开我的pcap,我可以看到有重传,但我不确定会有多少会影响我的目标,因为没有碎片发生?
此外,我已经尝试了getlayer(Raw).load
,如果我使用打印,我得到一些胡言乱语的屏幕,我假设它的数据到我想成像,但我现在需要把它变成一个可用的格式。
你可以做:
data = packet[Raw].load
您应该能够以这种方式访问该字段:
l = packet.getlayer(Raw).load
使用Scapy的交互式shell我成功地做到了这一点:
pcap = rdpcap('sniffed_packets.pcap')
s = pcap.sessions()
for key, value in s.iteritems():
# Looking for telnet sessions
if ':23' in key:
for v in value:
try:
v.getlayer(Raw).load
except AttributeError:
pass