Python Scapy - 从文件加载HTTP

时间:2015-06-23 14:57:20

标签: python http scapy

我使用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

为什么会这样?我该如何恢复数据包?

1 个答案:

答案 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负载。只是一个猜测。