我正在尝试对包含HTTP数据的数据包进行过滤,但我不知道如何这样做。
即。有没有办法使用只有HTTP的Scapy过滤数据包?
感谢任何帮助。
答案 0 :(得分:1)
是的,你可以。您可以通过TCP端口80进行过滤(检查每个数据包或使用BPF),然后检查TCP有效负载以确保存在HTTP标头。
答案 1 :(得分:1)
是的,有.haslayer函数和一些解析:
methods=['GET','POST','HEAD','PUT','DELETE','CONNECT','OPTIONS','TRACE']#Define http methods
s=sniff(1)#sniff one packet to parse you can put this in a loop
a=[]
a.append(s[0])
if a[0].haslayer(TCP):#Checks for TCP protocol
if a[0].dport == 80:#Checks for http port 80
if a[0].haslayer(Raw):#Checks if packet has payload
r=a[0][0][Raw].load
for i in methods:#Checks if any of the http methods are present in load, if there are it prints to screen
if i in r:
print r
答案 2 :(得分:1)
以上答案为您提供了非常准确的解决方案,因为您可以在除80,和以外的其他端口中使用HTTP,因为版本2.4.3 scapy team已发布了一个新的{{ 3}},因此我们不必再依赖那些假设了:
>>>import scapy.all as S
>>> S.load_layer("http")
>>> HTTPRequest
<class 'scapy.layers.http.HTTPRequest'>
>>>def filter_get_requests(pkg):
return pkg.haslayer(HTTPRequest) and pkg[HTTPRequest].Method==b'GET'
>>> s = S.sniff(lfilter=filter_get_requests)
然后向您最喜欢的HTTP站点发出GET请求,然后就可以了:) 您应该阅读整个HTTP层文档HTTP layer。