歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

IEEE802.11數據幀在Linux上的抓取

終於得到了夢寐的《802.11無線網絡權威指南》,光看書是不行的,關鍵還是自己練習,這就需要搭建一個舒服的實驗環境,抓包是必不可少的了,因為只有詳細分析802.11數據幀,才能深入理解協議的細節。軟件上就是這個理,手上沒設備還是不行,這可是搭建實驗環境的第一步,巧婦難為無米之炊。設備問題很好解決,買一個就行了,最好買適合DIY的那種,既便宜又不怕折騰壞了,因此淘寶是一個好去處。我搞到了一個ralink的802.11bgn的無線網卡,USB2.0的,除了有點發熱之外別的都很好,軟AP信號足,功率夠,速度快。就是驅動不太給力啊。

《802.11無線網絡權威指南》第二版(中文影印版)(非掃描版)PDF下載見 http://www.linuxidc.com/Linux/2012-07/65476.htm

硬件有了,先驅起來再說,完事之後就要想辦法抓包了,千萬別以為抓包很容易,一個軟件就搞定,想抓取802.11的數據包,還真得下一番功夫啊,本文接下來的部分就談談我的802.11抓包經歷。

Linux內核的抓包機制軟件上全在ptype_all這個鏈表,而不存在所謂“網卡混雜模式”,混雜模式主要是硬件上的概念,有些網卡會在芯片內部完成MAC地址的過濾,因此必須讓芯片“知道”不要過濾任何地址這一件事,因此就有了混雜模式的概念,對於無線網絡,混雜模式在理解上更加復雜,因此“不要過濾任何數據幀”和802.11規定的AP地址過濾某些行為上是矛盾的。舉個例子,一個沒有和此AP建立關聯的移動節點發來的包,AP按照802.11規范是要丟掉它的,然而混雜模式又要求接受它,這就是矛盾。矛盾的本質原因在於無線鏈路的“無邊界”特征,這是電磁波的物理特性導致的。對於此誰也無能改變,因此ESS無線網絡就不能設計成一個完全的廣播網絡,否則一個三維空間的廣播造成的沖突要浪費多少資源啊--我們知道有線局域網以太網最初是一個一維線纜上的廣播而已,現在有了交換機,CSMA/CD基本已經不再被使用了。只能由AP接入點來負責在移動節點之間轉發數據幀,因為只有它知道誰跟自己建立了關聯。這種區別造成了無線網絡抓包的尴尬。

在設計上,操作系統完全避免了這個尴尬,要麼它根本不允許在802.11這個層次上進行抓包,要麼由驅動決定如何實現抓包。對於Linux,高版本內核實現了統一的802.11適配層框架,驅動的實現可選使用,低版本內核完全由驅動來決定能否實現抓包;對於Windows,如果你使用WireShark工具在無線網卡上進行抓包,會得到以下錯誤:

在Wireshark的網站上,也有類似的說法:


這個may not未免太無恥了。然而tcpdump的手冊上卻說可以在monitor mode下抓取802.11幀,然而這卻需要驅動來支持。對Linux而言,雖然較高版本的內核支持了802.11適配層,然而卻不是每個驅動的實現都遵循了這個框架,比如我手上的ralink的驅動就很扯,完全按照windows的那一套來寫的。因此依靠monitor mode來抓取802.11幀這完全靠不住!接下來分析Linux的抓包機制和802.11適配層的關系以及銜接。

Copyright © Linux教程網 All Rights Reserved