最近在研究802.11數(shù)據(jù)幀,對(duì)各種幀做了大致的了解,所以想嘗試下自己構(gòu)造802.11幀,在此之前想抓幾個(gè)幀研究下,在linux下成功的使用wireshark抓到了,然后又想自己用winpcap寫個(gè)抓包的程序。
大家都知道WinPcap是為了滿足程序開發(fā)的需要從UNIX下的LibPcap庫 ,在以太網(wǎng)環(huán)境下將網(wǎng)卡設(shè)置在混雜模式下很容易獲得整個(gè)物理鏈路上的數(shù)據(jù)幀,即你可以監(jiān)聽整個(gè)網(wǎng)段的主機(jī)數(shù)據(jù)包,可以實(shí)現(xiàn)Sniffer的功能,但是在無線局域網(wǎng)環(huán)境下(WLAN, IEEE802.11協(xié)議族),設(shè)置為混雜模式卻不能嗅獲到數(shù)據(jù)包,為了解決這個(gè)問題我也嘗試了很多方面,在一次偶然的情況下看到了一種解決方法,那就是不設(shè)置為,打開函數(shù) pcap_open_live(const char* device, int snaplen, int promisc, int to_ms, char *ebuf ) 中的第三項(xiàng)設(shè)置為0即可獲得本機(jī)的所以數(shù)據(jù)幀,這個(gè)時(shí)候用函數(shù)獲得數(shù)據(jù)包時(shí)會(huì)發(fā)現(xiàn),得到的802.11數(shù)據(jù)幀與以太幀,即802.3數(shù)據(jù)幀格式完全一樣,而且用pcap_datalink() 去獲得網(wǎng)絡(luò)類型時(shí)會(huì)發(fā)現(xiàn)結(jié)果是DLT_EN10MB,即以太網(wǎng)環(huán)境,可見該開發(fā)庫為了方便用戶的使用,刻意屏蔽(或簡單處理)了幀類型,這樣我們就可以像處理以太幀一樣去處理了。但這樣我們就不能處理幀的細(xì)節(jié),下次打算轉(zhuǎn)戰(zhàn)用libpcap來寫,到時(shí)候再說。