我使用this扩展来scapy来检测和分析HTTP数据包。它工作得很好,但是当我将HTTP数据包保存到带有wrpcap
的pcap文件然后用rdpcap
加载它时它没有给我相同的数据包,它只检测到它的HTTP数据包但是不是HTTP请求,当我这样做时也会发生 -
from scapy.all import *
from scapy_http.http import *
packets = sniff(count=10, lfilter=lambda p: HTTPRequest in p)
wrpcap('file.pcap', packets)
restored = rdpcap('file.pcap')
print len([x for x in restored if HTTPRequest in p]) # prints 0
为什么会这样?我该如何恢复数据包?
答案 0 :(得分:0)
我对Python一般都很陌生,特别是Scapy,但这是你想要的吗?
from scapy.all import *
def http_request(pkt):
if pkt.haslayer('HTTPRequest'): ##Use HTTPResponse for response packets
pkt.show()
exit(0) ##Omit to show more then the first packet
pkts = rdpcap('/root/Desktop/example_network_traffic.pcap')
for p in pkts:
http_request(p)
##For sniffing packets
##sniff(prn=http_request)
我认为问题可能是Scapy排除数据包的方式。当我运行您的代码并在Wireshark中检查数据包时,该协议被列为TCP。当我使用Wireshark捕获相同类型的数据包时,它会将协议列为HTTP。如果我从Wireshark导出数据包并使用rdpcap读取它,您将获得所需的结果,即HTTPRequest / HTTPResponse层。我事实上并不知道这一点,但我检查了Berkeley Packet Filter syntax,并且他们没有将HTTP列为协议。如果Scapy基于BPF语法,并且他们不使用HTTP协议,则可能使用TCP协议导出数据包,Scapy-Http只会在sniff()期间解析Raw负载。只是一个猜测。