使用Scapy从pcap获取HTTP响应代码



我正在使用scapy读取一个pcap文件,我感兴趣的是发现异常情况,如异常的TCP标志或HTTP代码,如403429等。

我可以使用TCP端口发现这个流量属于HTTP,但如何获得HTTP的状态码和TCP的标志?

这就是我迄今为止所做的:

for pkt in PcapReader(pcap):
if (TCP in pkt and (pkt[TCP].sport == 80 or pkt[TCP].dport === 80)):
pList.append(pkt)

如果使用Scapy 2.4.3+,则可以启用HTTP插件并简化代码。参见:

  • 文档:https://scapy.readthedocs.io/en/latest/layers/http.html
  • API参考号:https://scapy.readthedocs.io/en/latest/api/scapy.layers.http.html

此外,为了使用TCPSession自动处理HTTP数据包,我将使用sniff(prn=)而不是PcapReader。他们做同样的事情。

from scapy.layers.http import *
from scapy.sessions import TCPSession
from scapy.sendrecv import sniff
plist = []
def func(pkt):
# called on each packet
if HTTP in pkt:
if HTTPResponse in pkt:
# status codes are only in responses
status = pkt[HTTPResponse].Status_Code
if int(status) in [403, 429]: # check code
plist.append(pkt)
sniff(offline="./my_file.pcap", prn=func, store=False, session=TCPSession)

最新更新