我正在使用scapy
读取一个pcap文件,我感兴趣的是发现异常情况,如异常的TCP标志或HTTP代码,如403
、429
等。
我可以使用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)