socket编程之DEV C++配置winpcap开发环境并编写网络嗅探器sniffer
歡迎關注我的個人博客:www.zuzhiang.cn
?
期末計算機網絡課程設計讓做一個網絡嗅探器,要求可以檢測和選擇網卡,并打開到混雜模式,監聽局域網中的所有數據包并解析出所用網絡協議以及首部各個字段的值,如 MAC地址,IP地址,端口號等。
?
然后從網上各種找資料,C語言下基本上都是基于 winpcap包做的,難的是配置環境。網上有各種 VS的配置教程,但是本人用不慣 VS,所以就配置了 DEV C++,朋友也有把 codeblocks 配置成功的。下面就和大家分享一下配置過程。參考文章:DEV 搭建winpcap開發環境。
?
首先要下載 winpcap的兩個東西:
WinPcap V4.1.2:驅動程序、Dll文件
http://www.winpcap.org/install/bin/WinPcap_4_1_2.exe
WinPcap V4.1.2 Developer’s Pack:庫文件、頭文件、簡單的示例程序代碼和幫助文件
http://www.winpcap.org/install/bin/WpdPack_4_1_2.zip
?
第一個 exe文件直接安裝到任意目錄即可。第二個 zip文件下載解壓后將名為?WpdPack的文件夾放到 C盤下,當然放到別的地方也可以。
?
配置步驟:
?
第一步:
?
在Tools->Compiler Options->Directories->Libraries (即工具->編譯選項->目錄->庫) 里面設置winpcap開發包目錄的Lib目錄;在Tools->Compiler Options->Directories->Includes(即工具->編譯選項->目錄->C/C++包含文件)(C和C++兩個我都設置了,方便)里面設置winpcap開發包目錄的Include目錄。
這里的 lib目錄和include目錄就是上面 zip文件解壓后的 C:\WpdPack 中的文件夾。
?
第二步:
在Project->Project Options->Parameters->Linker(即項目->項目屬性->參數->鏈接)下面點擊“Add Library or Object”(加入庫或對象)按鈕,將開發包目錄 Lib下的wpcap.lib文件(即 C:\WpdPack\Lib 目錄下的文件)添加上去。
?
第三步:
在源碼文件#include "pcap.h"的前面增加預處理定義——#define WPCAP和#define HAVE_REMOTE。好像我只加了“#define HAVE_REMOTE”,例子中的代碼就可以運行了。但是看文檔中,好像不是這樣,具體好要多測試一些代碼才能知道。
?
上面的步驟是其他 CSDN博客上給的,但是在實際操作的時候還需要加上 #include "winsock.h" 這句話,包含 winsock.h 頭文件,不然會提示某些變量未定義的錯誤。此外在上面第二步中還需要加入 C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib/WS2_32.Lib 這個文件,不然也是會報一些亂七八糟的錯誤。
?
至此開放環境就配置好了,然后就是編寫代碼。先給出一個 winpcap中文技術文檔。嗅探器的代碼基本上都是這里面的原碼,然后在它的基礎上改一下、拼接一下就可以了。大體流程是檢測網卡->選擇網卡->篩選器的設置(可以只捕捉使用upd或tcp等協議的包)->將捕捉到的數據包分析。
另外DEV C++在編譯運行的時候需要選擇 32位的編譯器,這個我也不知道為什么……自己試出來的。
?
再另,網絡嗅探器捕捉到的大多數都是亂碼,因為編碼方式是多種多樣的。可以使用 ICMP協議中的 ping命令,ping通某個網站,然后將捕獲的數據包以 ascii碼形式輸出,將會是有規矩的字符。
?
這里要提一下的是,分析數據包的時候好像沒有現成的函數或數據結構等,需要自己定義。比如要定義 IP協議的首部,根據每個字段的含義解析,這里充分利用了二進制的相與、左移、右移等操作。另,我們捕獲到的數據包是完整的 MAC幀,也就是數據鏈路層的包,然后可以根據使用的協議確定協議首部的長度,并進一步確定數據部分的位置和大小。
?
運行效果如下:
?
最后附上上面說的用到的各種文件以及源代碼的下載地址:源碼及配套文件下載。
總結
以上是生活随笔為你收集整理的socket编程之DEV C++配置winpcap开发环境并编写网络嗅探器sniffer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python怎么做软件开发有前途吗_Py
- 下一篇: db dbm dbi dbc 的含义