簡體   English   中英

使用 Scapy 過濾 HTTP 數據包

[英]Using Scapy to fitler HTTP packets

我正在嘗試為包含 HTTP 數據的數據包制作過濾器,但我不知道如何執行此操作。

IE 有沒有辦法使用只有 HTTP 的 Scapy 過濾數據包?

是的,使用 .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

其他答案給你一個解決方案,只能是這么多精確的,因為你可以使用HTTP的其它端口比80,以此為版本2.4.3 Scapy的團隊已經發布了一個新的HTTP層,所以我們不必依靠不再基於這些假設:

>>> 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 層文檔。

是的,你可以。 您可以通過 TCP 端口 80(檢查每個數據包或使用 BPF)進行過濾,然后檢查 TCP 負載以確保存在 HTTP 標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM