Linux上常用的抓包工具有tcpdump锈玉,還有大名鼎鼎的wireshark(圖形界面)爪飘。它們都可以抓無(wú)線網(wǎng)絡(luò)WIFI包。本文介紹用兩者如何在Linux系統(tǒng)中抓包拉背,假設(shè)系統(tǒng)已經(jīng)正確安裝無(wú)線網(wǎng)卡驅(qū)動(dòng)师崎,并能識(shí)別到wlan0設(shè)備。
一椅棺、802.11數(shù)據(jù)包
802.11幀有三種犁罩,管理幀、控制幀两疚,數(shù)據(jù)幀床估。當(dāng)我們的手機(jī)掃瞄周邊WIFI熱點(diǎn)時(shí),會(huì)發(fā)現(xiàn)probe請(qǐng)求诱渤,它是管理幀的一種丐巫。其中包含了手機(jī)的MAC地址。更多802.11幀格式勺美,請(qǐng)自行搜索递胧,本文不涉及。
在使用無(wú)線上網(wǎng)時(shí)赡茸,用wireshark抓包發(fā)現(xiàn)其格式與802.3是完全一樣的缎脾,一度懷疑自己看錯(cuò),因?yàn)槊髅魇鞘褂脽o(wú)線網(wǎng)絡(luò)占卧,應(yīng)該是802.11格式的才對(duì)遗菠。經(jīng)過(guò)研究跟蹤內(nèi)核源碼,發(fā)現(xiàn)在內(nèi)核ieee80211驅(qū)動(dòng)會(huì)將數(shù)據(jù)包轉(zhuǎn)換成802.3华蜒,然后才上傳到網(wǎng)絡(luò)協(xié)議棧辙纬,但是,當(dāng)無(wú)線網(wǎng)卡為monitor模式時(shí)叭喜,不會(huì)做轉(zhuǎn)換贺拣。有興趣可參閱內(nèi)核源碼文件net/mac80211/rx.c的ieee80211_rx函數(shù)。這方面涉及太多知識(shí)域滥,本文只略提一下——其實(shí)主要是自己還沒(méi)研究透纵柿,無(wú)法寫(xiě)出來(lái)。
因此启绰,如果要抓的包有probe等類型時(shí)昂儒,必須將網(wǎng)卡設(shè)置為monitor模式。
二委可、設(shè)置無(wú)線網(wǎng)卡工作模式
設(shè)置無(wú)線網(wǎng)卡模式使用iwconfig命令渊跋,如下命令設(shè)置為monitor模式:
iwconfig wlan0 mode monitor
也可以使用iw命令腊嗡,下面是設(shè)置為managed模式(作為AP或STA時(shí)處于該模式):
iw wlan0 set type managed
注意,在無(wú)線網(wǎng)卡已經(jīng)啟用的情況下拾酝,可能無(wú)法設(shè)置模式燕少,就需要先禁止再設(shè)置,最后再啟用蒿囤,示例如下:
# iwconfig wlan0 mode monitor
Error for wireless request "Set Mode" (8B06) :
SET failed on device wlan0 ; Device or resource busy
-上述提示無(wú)法設(shè)置客们,設(shè)備正忙,所以要先禁止wlan0:
# ifconfig wlan0 down
再設(shè)置模式:
# iwconfig wlan0 mode monitor
使用iwconfig查看模式:
# iwconfig wlan0
wlan0? ? IEEE 802.11abgn? Mode:Monitor? Tx-Power=20 dBm
Retry short limit:7? RTS thr:off? Fragment thr:off
Power Management:on
看到Mode:Monitor表明已修改成功材诽。然后再啟用:
# ifconfig wlan0 up
但是底挫,一般地,不直接使用wlan0作為monitor模式脸侥,而是新建立一個(gè)別名:
# iw wlan0 interface add mon0 type monitor? // 添加一個(gè)別名mon0建邓,monitor模式
# ifconfig mon0 up // 啟用mon0,默認(rèn)不啟用
默認(rèn)情況下睁枕,系統(tǒng)啟動(dòng)后官边,wlan0是managed模式,另建一個(gè)mon0作為抓包使用比較方便外遇,不與原有網(wǎng)卡沖突注簿,當(dāng)使用wlan0抓包時(shí),為802.3格式臀规;而使用mon0則為802.11滩援。
三栅隐、抓包操作步驟示例
使用tcpdump抓包命令:
# tcpdump -i wlan0
# tcpdump -i mon0
如果需要將抓的包用wireshark分析塔嬉,可以使用-w foo.cap保存成文件,然后用wireshark打開(kāi)查看租悄。
另外谨究,wireshark工具有Linux版本,在ubuntu輸入:
sudo apt-get install wireshark
即可安裝泣棋,其使用與Windows系統(tǒng)下無(wú)差異胶哲。在wireshark下使用wlan.fc.type_subtype == 0x04過(guò)濾得到probe包,就可以知道有哪些手機(jī)或電腦發(fā)現(xiàn)probe幀了潭辈,知道了MAC的OUI鸯屿,自然知道手機(jī)廠商,就可以知道周邊的人使用Apple多些還是Android多點(diǎn)把敢。這或許是傳說(shuō)中的“WIFI探寶”寄摆,據(jù)說(shuō)有些商場(chǎng)就使用類似的應(yīng)用,定位客戶修赞,查看流量婶恼,等等。
注:本文僅是熱身,下面將使用代碼方式對(duì)無(wú)線網(wǎng)卡進(jìn)行抓包勾邦。而802.11 netlink編碼正在打算中蚣录。
李遲 2016.10.28 周五深夜