使用Scapy来装配HTTP数据包

时间:2017-06-21 14:58:32

标签: python http scapy

我正在尝试对包含HTTP数据的数据包进行过滤,但我不知道如何这样做。

即。有没有办法使用只有HTTP的Scapy过滤数据包?

感谢任何帮助。

3 个答案:

答案 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