基於原始套接字的嗅探器

2022-01-23 18:07:06 字數 1393 閱讀 8419

嗅探器這個**我去年的時候就已經寫過了,這個學期並不是非常忙,順手複習網路,就又嘗試著寫了一遍。

其實在寫嗅探器的時候,最主要的還是要將網絡卡設定為混雜模式。在此基礎之上,對抓到的資料報進行分析。

這個是我寫出來的效果圖,目前只是方便於檢視,連選單都沒新增:

左面的介面顯示的是主機和主機之間的鏈結資訊,而右面則是選中主機資訊之間的資料互動情況。

使用原始套接字寫嗅探器的流程:

1 使用socket建立基於ip協議的原始套接字。

2 獲取本地ip位址。

3 將原始套接字繫結到本地ip位址上。

4 使用ioctlsocket函式設定套接字選項sio_rcvall,即接受所有資料。

5 無盡呼叫recv函式。

為了方便介面化我將sniffer的核心**封裝到了乙個類中,原本應該做成單件類的,但是懶得改了。

1

class

csniffer

2;

然後值得看一看的就是執行緒函式**了,其餘的沒有太多需要介紹的,這段**其實就是從之前的控制台程式扒下來的,現在單獨放到乙個函式中。

1

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 }

感覺這一套下來卻是是沒什麼東西,不過我也是在程式跑出來之後,才觀察到我的這個程式在資料抓包上面真心做的不怎麼樣。chrome瀏覽器的資料請求能抓到,但是反饋回來的資料就完全抓不到了。

列表資料原本應該做個排序的,整個雜湊也不錯,這樣當資料量比較大的時候插入效率能高一點。而我這個就呵呵了。。。

值得一提的就是我這次兩個列表全部使用的虛擬列表。使用之前還檢視了我以前**中關於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...