網路截包是一項很有意思的課題,可以有資料過濾,防火牆,流量控制,報文篡改等諸多應用,按照核心分層架構將一些截包方法不完全整理如下,歡迎補充。
1、 l1層驅動截包法
在驅動中下手應該可以說是最貼近底層的,網絡卡驅動中總有rx接收和xmit傳送函式,引數總是sk_buffer,在這裡修改很黃很暴力,而且幾乎不需要什麼linux核心的知識。
xmit函式呼叫時的引數sk_buffer已經是乙個發育健全的成熟體,因此在這裡做過濾那真是得心應手美呆了,當然修改的時候還是要下一番功夫,而rx的時候則相反,可憐的sk_buffer在這時候只發育了鏈路層(l2)頭部,一旦涉及到較為複雜的過濾,則需要做一些模擬協議棧的分析,如需要獲取udp埠,就要從sk_buffer中先取出l3 ip層的長度,對sk_buffer->data作相應位移。
2、 l2層虛擬裝置截包法
與具體網絡卡裝置無關,通過register_netdevice註冊乙個net_device結構,在驅動層上虛擬乙個裝置節點(ethx.y),來實現截包,通過設定路由,讓需要攔截的報文通過該裝置節點發出,從而實現過濾。
正是因為需要結合路由來使用,該方法顯得特別優雅,對目的ip的過濾甚至在路由設定中就已經完成,避免其他無關報文不必要的攔截判斷。虛擬裝置攔截到的sk_buffer也已經基本成熟了,可以方便的過濾。
可惜佛說,優點即缺點,正是因為需要結合路由使用,該法對接收報文的過濾和修改無能為力(如果理解有誤歡迎指正)。
3、 l3層自定義協議截包法
又是非常優雅的做法,通過dev_add_pack註冊packet_type結構,掛接上自定義協議的收發流程,就算linux公升級到3.0 4.0,估計也能輕易的移植。
可惜該方法只能攔截接收的報文,而且只能攔截該協議的報文,多用於正規協議開發,不適用於一些小功能實現。
4、 l3層netfilter截包法
netfilter是linux核心自帶的正規防火牆,轉乙個netfilter鉤子分布圖:
可以發現,netfilter鉤子雖然不多,但是遍布協議棧的各個關鍵路徑,通過這些鉤子就可以基本實現二層以上報文的過濾和刪改。
5、 應用層raw socket截包法
原始套接字也是常用的截包方法,可惜功能有限。核心處理的所有其它型別的資料報都會傳乙個拷貝給匹配的原始套接字,但是方便監聽的同時是修改上的無力,因為得到的資料僅僅是個拷貝。而原始套接字對於其他執行緒傳送的報文更是無能為力。
6、 應用層pcap軟體包截包法
pcap的linux版本是libpcap函式庫(在windows下對應的函式庫為winpcap),libpcap有幾個主要的呼叫函式,通過這些就可以看出libpcap的基本功能。
1)確定捕獲網路資料報的網絡卡。
char *pcap_lookupdev(dev *errbuf);
2)設定過濾條件。
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)
3)獲取資料報。
const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h)
總結:
l1層驅動截包法
優點:因為暴力所以方便,不需要對linux核心有很深入地了解,過濾輸出的報文很簡單。
缺點:與裝置相關,擴充套件性差,對接收到的報文要做很複雜的修改相對麻煩。
適用:開發周期短,功能相對簡單,不需要對接收報文做三層以上覆雜過濾的情況。
l2層虛擬裝置截包法
優點:與具體裝置和協議無關,擴充套件性好,高效,通過修改路由也可以有很多更多功能的應用。
缺點:只能截獲發出的報文,要結合路由使用。
適用:需要考慮擴充套件性或者多網絡卡支援的情況,或者基於路由的一些特殊應用。
l3層自定義協議截包法
優點:通過協議頭來過濾報文,可讀性和擴充套件性好。
缺點:因為優雅所以麻煩,只能截獲接收的報文。
適用:有專用協議頭的情況。
l3層netfilter截包法
優點:netfilter框架嚴密,鉤子點很有代表性,易擴充套件,易維護,很容易作為乙個單獨的可載入模組來開發,方便除錯。
缺點:修改3層以下的報文相對困難。
適用:不需要修改3層以下報文頭的情況,應該是用途廣的截包方法了。
應用層raw socket截包法
優點:在使用者態執行就可以方便的監聽想要的各種報文。
缺點:無力刪改報文,無力截獲其他執行緒傳送的報文。
適用:只監聽不修改的情況。
應用層pcap軟體包截包法
優點:開發簡單,而且libpcap庫能大大簡化對報文的分析工作。
缺點:需要libpcap庫支援,無力刪改報文,無力截獲其他執行緒傳送的報文。
適用:只監聽不修改的情況。
當然,網路截包還有乙個很重要的考慮因素就是效能,對於接收報文的攔截來說,偏底層的截包法
效率較高,而對於傳送報文的攔截,偏上層的截包法效率更高。
佛說,沒有最好的,只有最合適的,所以做網路報文擷取的時候要綜合考慮實際需求,採用最合適
的方法,就能事半功倍。
Linux網路截包不完全整理
1 l1層驅動截包法 在驅動中下手應該可以說是最貼近底層的,網絡卡驅動中總有rx接收和xmit傳送函式,引數總是sk buffer,在這裡修改很黃很暴力,而且幾乎不需要什麼linux核心的知識。xmit函式呼叫時的引數sk buffer已經是乙個發育健全的成熟體,因此在這裡做過濾那真是得心應手美呆了...
網路硬碟服務不完全列表
ilesfly localhostr 的特色在於 可以很方面的分享檔案,只需要三步 選取,上傳,取得 上傳速度方面還可以,檔案大小20mb,任何檔案都可上傳。mediafire 4shared omnidrive omnidrive 的介面風絡與xp的風格相似,提供三種檔案檢視方式,分別是圖示方式 ...
Fiddler手機抓包不完全記錄
準備工作 1.必須確保安裝fiddler的電腦和手機在同乙個wifi環境下 備註 如果電腦是筆記本當然最好 如果電腦用的是台式電腦,可以安裝乙個隨身wifi,來確保台式電腦和手機在同一wifi環境下 配置步驟 2.配置fiddler 說明 勾上decrypt https traffic,會抓到手機的...