簡體   English   中英

什么是HTTP的BPF?

[英]What's the BPF for HTTP?

這個定義可以在這里看到。

候選答案可能是tcp and dst port 80 ,但tcp and dst port 80保證它的HTTP流量並包括所有HTTP流量嗎?

似乎沒有,因為通過這種方式指定80以外的其他端口可以訪問某些站點:

http://domain.name:8080

所以我的問題是:什么是HTTP的確切BPF

UPDATE

是否有實現來驗證數據包是否已經是c的HTTP?

  • 最簡單的過濾器: tcp and dst port 80
  • 許多端口(包括SSL): tcp and (dst port 80 or dst port 8080 or dst port 443)
  • 例如,如果您只想要HTTP GET數據包,並且不介意只獲得每個GET的第一個數據包而您認為GET數據包中沒有TCP選項,則可以過濾TCP以及TCP有效負載的事實(HTTP)以“GET”開頭,不帶引號: tcp and tcp[20:4] = 0x47455420
  • 如果你認為可以有TCP選項(我很確定它對非SYN數據包不常見),你可以做一個更復雜的過濾器,它實際上使用TCP頭並檢查TCP頭長度(而不是假設它是20): tcp and tcp[(tcp[12] >> 4) * 4 : 4] = 0x47455420
  • 所有這些過濾器的組合看起來都是這樣的(雖然SSL在加密時不會真正起作用): tcp and (dst port 80 or dst port 8080 or dst port 443) and tcp[(tcp[12] >> 4) * 4 : 4] = 0x47455420
  • 以類似的方式,您可以通過過濾此方法開頭的字節來過濾任何HTTP請求方法。 如果您還需要SYN和SYN-ACK數據包,可以通過使用按位運算過濾TCP標志來添加它們。
  • 不幸的是,過濾所有HTTP流量非常困難,因為請求或響應中不在第一個中的數據包很難過濾 - 任何TCP有效負載都可以是HTTP請求或響應的一部分。 如果您想要所有HTTP流量,您應該單獨依賴端口。

HTTP沒有確切的BPF,因為HTTP不是鏈路層協議。 執行此操作的最佳方法是選擇可能是HTTP的任何流量,然后在應用程序中驗證該流量。 您必須將TCP段拼接在一起才能這樣做,因為來自流中間的特定TCP段中的數據不表示應用層協議。

BPF不是有狀態數據包過濾器,因此BPF無法檢測到非標准HTTP端口上的任何流量。 BPF在傳輸層而不是應用層進行過濾,因此它只關心TCP / IP,而不是TCP / IP數據包中封裝的應用程序數據。 您最好的辦法是過濾常見的HTTP端口80,8000和8080.如果您想要考慮HTTPS,也可以使用443。

Wireshark在解碼數據包方面做得不錯,並在適當的時候將HTTP標記為HTTP。

暫無
暫無

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

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