Openwrt WIFI探針開發 一

2021-08-01 10:01:58 字數 1410 閱讀 6818

2017.9.26

公開原始碼(apache2.0協議)

在學校斷斷續續做了一年多的openwrt wifi探針,從剛開始磕磕絆絆,國內幾乎沒有公開的資料的情況下入手到最後能夠較完整得到幾乎所有需要的資料,期間確實是很辛勞。

我選用的方案是:

pcap庫

radiotap解析庫

pcap庫作用為將wifi模式切換為監聽模式同時進行抓包原始資料獲取。

radiotap庫作用為得到rssi、頻率等比較底層的資訊,同時進行一些錯誤資料的拋棄。

下面開始講解pcap庫的使用。

安裝這個不多說了,直接在openwrt上獲取並安裝pcap也是可以的,或者選擇像我一樣在交叉編譯過程中在gcc 最後加上 -static 靜態連線上。

下面是我使用的解決方法:

$(cc) $(ldflags) xx.o -o xx -lpcap

-static

關於openwrt makefile的編寫與對應ipk的生成,網路上有很多說明,不再贅述。

char errbuff[pcap_errbuf_size];

pcap_t *device = pcap_open_live(argv[1], 8000, 1, 0, errbuff);//(1)

if (!device)

if (pcap_set_rfmon(device, 1) == 0)//(2)

printf("scaning starts\n");

pcap_loop(device, -1, getpacket, &i); //scaning starts//(3)

pcap_close(device);

ps:

(1)argv[1]為網絡卡名字,如wlan0這樣。8000為獲取資料大小,1這裡將網絡卡設定為混雜模式,0為無超時等待,errbuf意義如名字。

(2)pcap_set_rfmon,這個是將網絡卡設定為監聽模式的函式,省去了呼叫iw 等系統程式的呼叫。

(3)pcap_loop,獲取到了資料之後便呼叫getpacket函式。 getpacket函式應該簡潔,並盡可能短 ,我工程實現中使用佇列(可存32幀)來儲存待分析的資料,發現佇列基本一直處於滿或者快滿的狀態,說明底層傳上來的資料速度比分析速度快,同時觀測發現系統占用60%的cpu,usr占用只有區區18%。

下面為呼叫函式的原型。

void getpacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet);

packet這個就是獲取到的資料。具體分析方法後面會具體說明。

http探針實現

專案在做三方推送時需要先判斷三方服務是否存活,以避免不必要的錯誤推送 利用http的options 這個方法極少使用。它用於獲取當前url所支援的方法。若請求成功,則它會在http頭中包含乙個名為 allow 的頭,其中的值是所支援的方法,如 get,post 這樣就能夠檢測出服務是否支援該方法繼而...

什麼是php探針,以及雅黑探針使用教程

什麼是php探針 php探針是用來探測空間 伺服器執行狀況和php資訊用的,探針可以實時檢視伺服器硬碟資源 記憶體占用 網絡卡流量 系統負載 伺服器時間等資訊。php探針的功能 cd home wwwroot example.com wget unzip tz.zip如果提示 command not...

頁面探針簡單實現

應用試例 public partial class default extend.page using system using system.data using system.configuration using system.collections using system.web usin...