嗅探器這個**我去年的時候就已經寫過了,這個學期並不是非常忙,順手複習網路,就又嘗試著寫了一遍。
其實在寫嗅探器的時候,最主要的還是要將網絡卡設定為混雜模式。在此基礎之上,對抓到的資料報進行分析。
這個是我寫出來的效果圖,目前只是方便於檢視,連選單都沒新增:
左面的介面顯示的是主機和主機之間的鏈結資訊,而右面則是選中主機資訊之間的資料互動情況。
使用原始套接字寫嗅探器的流程:
1 使用socket建立基於ip協議的原始套接字。
2 獲取本地ip位址。
3 將原始套接字繫結到本地ip位址上。
4 使用ioctlsocket函式設定套接字選項sio_rcvall,即接受所有資料。
5 無盡呼叫recv函式。
為了方便介面化我將sniffer的核心**封裝到了乙個類中,原本應該做成單件類的,但是懶得改了。
1然後值得看一看的就是執行緒函式**了,其餘的沒有太多需要介紹的,這段**其實就是從之前的控制台程式扒下來的,現在單獨放到乙個函式中。class
csniffer
2;
1感覺這一套下來卻是是沒什麼東西,不過我也是在程式跑出來之後,才觀察到我的這個程式在資料抓包上面真心做的不怎麼樣。chrome瀏覽器的資料請求能抓到,但是反饋回來的資料就完全抓不到了。dword winapi csniffer::snifferthread(lpvoid lpdata)222
//設定套接字選項
23 ioctlsocket(hsniffersock, sio_rcvall, &dwsetval);
24//
cout << q_ntohs(0x3100) << endl;
25//
std::vectorsnifferpool;
2627
while(1)28
35else
3639}40
41return0;
42 }
列表資料原本應該做個排序的,整個雜湊也不錯,這樣當資料量比較大的時候插入效率能高一點。而我這個就呵呵了。。。
值得一提的就是我這次兩個列表全部使用的虛擬列表。使用之前還檢視了我以前**中關於listctrl的使用文件,這算是沒白寫。不過這裡要補充的就是,使用虛擬列表前,需要設定ownerdata選項,也即是使用者擁有資料,列表僅僅負責資料的顯示,而不是把所有的資料都放到列表中。
對虛擬列表進行顯示重新整理的方法比較簡單,只要呼叫setitemcountex就能實現重新整理過程。
另外關於網絡卡混雜模式設定貌似需要借助winpcap.dll的幫助,有沒有大神比較了解,給個學習鏈結往我看一下。
基於socket原始套接字的網路嗅探器
netsniffer.cpp 定義控制台應用程式的入口點。簡單說明一下什麼是網路嗅探器,網路嗅探器是乙個抓取所有經過網絡卡資料的軟體,在一般使用電腦時,網絡卡 只接受到傳送至本機的資料,那是因為這是網絡卡是非混雜模式的,擋乙個目的位址非本機位址的資料報經過網 卡時,網絡卡在資料鏈路層 mac位址 檢...
原始套接字的花花世界
icmp 通常去檢測乙個網路是否為通暢,例如ping乙個ip igmp 組播中的控制報文,控制協議 int socket af inet,sock raw,protocol 處理ip資料的套接字 int socket af packet,sock raw,protocol 處理乙太網資料報的套接字 ...
利用arp發現網路中的嗅探器
1.sniffer原理 所謂知己知彼方能百戰不殆,要了解探測sniffer的方法,就先得了解sniffer的原理。首先,讓我們來看一看區域網中是怎樣傳輸資料的。當乙個資料報的目的地是區域網內的某台計算機時,此資料報將以廣播的形式被傳送到網內每一台計算機上。而每台計算機的網絡卡將分析資料報中的目的ma...