openwrt上wifi探針的實現

openwrt上wifi探針的實現

探針是通過wifi搜集經過這個AP范圍的手機的mac地址,沒有什么深刻的東西,知乎上關于這個東西討論的很多,有人覺得很有用,可以做很多增值的應用,有人覺得沒啥用,不過這并不妨礙我們從技術上去實現它。

看到探針,感覺很高大上的樣子,其實就是通過wifi搜集經過這個AP范圍的手機的mac地址,沒有什么深刻的東西,知乎上關于這個東西討論的很多,有人覺得很有用,可以做很多增值的應用,有人覺得沒啥用,不過這并不妨礙我們從技術上去實現它。

802.11協議

協議里面要求每個AP每隔一定時間(幾十毫秒到幾秒不等)向周圍的sta和AP廣播beacon幀,就是告訴周圍的sta和其他的AP:我是xxxx(bssid),快來連我!我是xxxx(bssid),快來連我!瞬間感覺每個AP都有一顆放蕩的心,有木有!有木有!

每 個sta(可以理解為手機、筆記本)除了默默監聽周邊AP發送的beacon幀以外,還會偷偷發送probe幀:我是xxxx(mac地址),我能連你 嗎?我是xxxx(mac地址)我能連你嗎?十足一個悶騷的小婊砸,所以我每次出門都默默關掉手機的wifi,現在的無線環境實在是太不安全了,參看連接

在7620a上的實現

基本思路是在AP受到探測幀后,將mac地址記錄下來,通過proc文件系統上報給應用層。下面是代碼:

mac地址獲取部分:

在函數VOID APPeerProbeReqAction(IN PRTMP_ADAPTER pAd,IN MLME_QUEUE_ELEM *Elem);中添加

extern UCHAR GLOBAL_AddrLocalNum;

extern UCHAR GLOBAL_AddrLocal[ADDR_LOCAL_NUMBER][MAC_ADDR_LEN];
PFRAME_802_11 pFramelxd = (PFRAME_802_11)Elem->Msg;
if(GLOBAL_AddrLocalNum >ADDR_LOCAL_NUMBER || GLOBAL_AddrLocalNum == ADDR_LOCAL_NUMBER)
{
//GLOBAL_AddrLocalNum = 0;
}
else
{
int index = 0;
BOOLEAN flag = 1;
for(index=0; index<GLOBAL_AddrLocalNum; index++)
{
if(NdisCmpMemory(GLOBAL_AddrLocal[index],pFramelxd->Hdr.Addr2,MAC_ADDR_LEN)==0)
{
flag = 0;
break;
}
}
//COPY_MAC_ADDR(GLOBAL_AddrLocal[GLOBAL_AddrLocalNum], pFramelxd->Hdr.Addr1);
//GLOBAL_AddrLocalNum++;
//COPY_MAC_ADDR(GLOBAL_AddrLocal[GLOBAL_AddrLocalNum], pFramelxd->Hdr.Addr2);
//GLOBAL_AddrLocalNum++;
if(flag)
{
COPY_MAC_ADDR(GLOBAL_AddrLocal[GLOBAL_AddrLocalNum], pFramelxd->Hdr.Addr2);
GLOBAL_AddrLocalNum++;
}
}

proc部分:

應用層向proc的節點中寫入“s”,告知驅動需要獲取sta相關的數據,驅動給出采集到的maclist。

static struct proc_dir_entry *entry_wl_beacon_mac;

UCHAR GLOBAL_AddrLocalNum = 0;
UCHAR GLOBAL_AddrLocal[MAX_MCAST_LIST_SIZE][6];

static char *maclistbuffer;

static int maclist_proc_show(struct seq_file *m, void *v)
{
if(maclistbuffer[0] == 's')
{
maclistbuffer[0] = '0';
int index=0;
for(index=0;index<GLOBAL_AddrLocalNum;index++)
{
seq_printf(m,"%02x:%02x:%02x:%02x:%02x:%02x\n", GLOBAL_AddrLocal[index][0],GLOBAL_AddrLocal[index][1],GLOBAL_AddrLocal[index][2],GLOBAL_AddrLocal[index][3],GLOBAL_AddrLocal[index][4],GLOBAL_AddrLocal[index][5]);
}
GLOBAL_AddrLocalNum = 0;
}
else
{
//seq_printf(m,"sta number is %d, proc!\n", GLOBAL_AddrLocalNum);
//seq_printf(m,"ap number is %d, proc!\n", GLOBAL_AddrLocalNum1);
}
return 0;
}
static int maclist_proc_open(struct inode *inode, struct file *file)
{
return single_open(file,maclist_proc_show,inode->i_private);
}

static ssize_t maclist_proc_write(struct file *file, const char *buffer, size_t len, loff_t *off)
{
int user_len = 0;

if (len > MAX_MACLIST_LENGTH)
{
user_len = MAX_MACLIST_LENGTH;
}
else
{
user_len = len;
}
if(copy_from_user(maclistbuffer, buffer, user_len))
{
return -EFAULT;
}
return user_len;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/261057.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/261057.shtml
英文地址,請注明出處:http://en.pswp.cn/news/261057.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Eclipse里做JBPM工作流gpd.xml中文亂碼問題解決(包括控制臺亂碼解決)

該文章轉至:http://jsczxy2.iteye.com/blog/1236552 修改eclipse安裝跟目錄下的eclipse.ini文件&#xff0c;在其中添加&#xff1a;-Dfile.encodingUTF-8如我添加后為&#xff1a;-showsplashorg.eclipse.platform--launcher.XXMaxPermSize256M-vmargs-Dosgi.requiredJavaVers…

irq4中斷子程序c語言寫法,AVR匯編程序參考

該AVR的匯編程序選自《M128》&#xff0c;程序中體現了AVR匯編的基本特點&#xff0c;僅供大家參考。該應用系統為一個帶1/100秒的簡易24小時制時鐘&#xff0c;它在上電后能夠自動從11時59分55秒00開始計時和顯示時間。下圖為簡易時鐘系統硬件電路圖。圖 簡易24小時時鐘硬件原…

技術的自我修煉

從今天開始記錄自己的技術修煉之路&#xff0c;自勉成長&#xff01;轉載于:https://blog.51cto.com/11822609/1796121

一步一步學Silverlight 2系列(6):鍵盤事件處理

一步一步學Silverlight 2系列&#xff08;6&#xff09;&#xff1a;鍵盤事件處理 概述 Silverlight 2 Beta 1版本發布了&#xff0c;無論從Runtime還是Tools都給我們帶來了很多的驚喜&#xff0c;如支持框架語言Visual Basic, Visual C#, IronRuby, Ironpython&#xff0c;對J…

STM32堆棧溢出的問題

在程序中出現棧溢出的情況&#xff0c;就是分配局部變量時因為內存溢出而重啟&#xff0c;局部變量分配在棧中&#xff0c;棧區域滿了導致溢出&#xff0c;需要修改startup_stm32f10x_hd.s中&#xff0c;或startup_stm32f10x_ld.s,startup_stm32f10x_md.s,具體文件按要看CPU是否…

塊分割,維特比算法小結

學習總結 在ER中&#xff0c;有一類算法依靠參考結構化數據庫的模型實現&#xff0c;以便提高ER的速度。但是這類算法常常在運行中產生了大量重復計算&#xff0c;降低了效率。由此&#xff0c;通過介紹以下方法&#xff0c;來解決這個問題&#xff1a; 塊分割 給定的字符串&am…

關于URL編碼

一、問題的由來 URL就是網址&#xff0c;只要上網&#xff0c;就一定會用到。 一般來說&#xff0c;URL只能使用英文字母、阿拉伯數字和某些標點符號&#xff0c;不能使用其他文字和符號。比如&#xff0c;世界上有英文字母的網址 “http://www.abc.com”&#xff0c;但是沒有希…

C語言ffmpeg合并多個視頻,ffmpeg合并多個視頻

/// ///遍歷文件夾獲取所有視頻路徑/// /// private void TraverseFolder(string path,stringfilepath){DirectoryInfo dInfo newDirectoryInfo(path);Dictionary dic new Dictionary();Dictionary dic2 new Dictionary();List list new List();//遍歷該文件夾foreach (File…

android應用開發全程實錄-實現甩動撥打和掛斷電話

今天繼續給大家帶來《Android應用開發全程實錄》中的章節&#xff0c;這部分是講傳感器中的一個實例。 通過上面的例子我們學會了如何獲得某種類型的傳感器&#xff0c;下面通過一個實例來學習如何使用某一個類型的傳感器。我們以加速傳感器為例&#xff0c;來實現這樣一個功能…

static的應用以及靜態與非靜態的區別

先前看到一個技術大牛寫了一個關于靜態成員與非靜態成員&#xff0c;靜態方法和非靜態方法的各自區別&#xff0c;覺得挺好的&#xff0c;在這里寫一個小程序來說明這些區別。 package com.liaojianya.chapter5; /*** This program will demonstrate the use of static method.…

Python中抓網頁的小陷阱

這邊博客已經搬家到這里了。我的個人博客&#xff0c;風格我自己更喜歡&#xff0c;也可以完全控制。當然&#xff0c;會花一點錢&#xff0c;但是基本能承受。 歡迎各位來觀光&#xff0c;博客園很棒&#xff0c;但是有一個自己能控制的網站也許會更好。另外&#xff0c;不能發…

C# 打印文件

http://support.microsoft.com/kb/322091轉載于:https://www.cnblogs.com/xbgz/p/3431463.html

c語言窮舉算法 枚舉法,c語言枚舉法 窮舉法 ppt課件

枚舉法 窮舉法 笨人之法 把所有可能的情況一一測試 篩選出符合條件的各種結果進行輸出 分析 這是個不定方程 三元一次方程組問題 三個變量 兩個方程 x y z 1005x 3y z 3 100設公雞為x只 母雞為y只 小雞為z只 百元買百雞問題分析 x y z 1005x 3y z 3 100 三重循環 voidmain intx…

裝飾模式(Decorator pattern)

裝飾模式又名包裝(Wrapper)模式。裝飾模式以對客戶端透明的方式擴展對象的功能&#xff0c;是繼承關系的一個替代方案。 裝飾模式的結構 裝飾模式以對客戶透明的方式動態地給一個對象附加上更多的責任。換言之&#xff0c;客戶端并不會覺得對象在裝飾前和裝飾后有什么不同。裝飾…

惡補sql知識(一)

索引的定義 SQL Server的索引值是對數據庫中一個或者多個列的值進行排序的結構。 索引幾個特性&#xff1a; 1&#xff09;索引可以提高數據的訪問速度 只有在適當的位置建立索引&#xff0c;就能大幅度提高,實際上&#xff0c;您可以把索引理解為一種特殊目錄。微軟的SQL SERV…

php連接數據庫輸出的中文幾個字就…

我們首先假設數據庫中采用的編碼為UTF-8 這時我們在PHP頁面中應當首先添加 "Content-Type" content"text/html; charsetutf-8" />文件保存時的編碼類型也必須是utf-8。 之后在數據庫查詢前添加 mysql_query("set names utf8");注&#xff1a;…

android開啟服務器配置,Android基于XMPP開發(一)【openfire服務器配置】

OpenFireOpenFire 是采用Java開發的基于XMPP(Jabber)協議&#xff0c;開源實時協作(RTC)服務器。Smack 是用 Java編 寫的XMPP客戶端代碼庫&#xff0c;是 spark 的核心開源界總是有許多有趣的東東&#xff0c;這三個合起來就是一個完整的XMPP IM 實現。OpenFire ——服務器端Sp…

Python 生成器 迭代器

1.1 生成器通過列表生成式&#xff0c;我們可以直接創建一個列表。但是&#xff0c;受到內存限制&#xff0c;列表容量肯定是有限的。而且&#xff0c;創建一個包含100萬個元素的列表&#xff0c;不僅占用很大的存儲空間&#xff0c;如果我們僅僅需要訪問前面幾個元素&#x…

尋路基本工具類定義 AIDefine.cpp

1 #include "AIDefine.h" 2 3 PointI AI_FindHelpPoint[8] {PointI(-1,0),PointI(0,-1),PointI(1,0),PointI(0,1),PointI(-1,-1),PointI(1,-1),PointI(1,1),PointI(-1,1)}; 轉載于:https://www.cnblogs.com/liusijian/p/3438542.html

android相對布局代碼,Android基礎_3 Activity相對布局(示例代碼)

相對布局要比前面講的線性布局和表格布局要靈活一些&#xff0c;所以平常用得也是比較多的。相對布局控件的位置是與其周圍控件的位置相關的&#xff0c;從名字可以看出來&#xff0c;這些位置都是相對的&#xff0c;確定出了其中一個控件的位置就可以確定另一個控件的位置了。…