[英]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.