网络抓包工具的开发和实现C++抓包嗅探器
0、說在前面的話
1)?本文將以一個初學者的角度,一步一步幾乎是從0開始講述如何完成一個基于winpcap+MFC的sniffer(嗅探器)當然我指的“0”并不是指連編程都不會,如果C/C++不知為何物那么還是別看這篇文章了,本文只有那么幾點小小要求:
???????? a.懂基本的編程語法,只會java的沒關系,語言這東西語法差別不大,看著看著就懂了
?????????b.懂一點點網絡知識,起碼知道OSI七層網絡模型或者TCP/IP四層(也有說五層的)網絡模型
?????????c.?想學怎么做一個sniffer,而不是想來這里down代碼,這種代碼CSDN下載里多得是,不用來這里了
2)?本文里的程序不是最優秀的,不是最牛的,甚至不知道能不能算作優秀,所以牛人可以略過此文,此文是給那些想開發但又不會開發,懂那么一點點又其實不太懂的人看的(寫這個程序之前,我在MFC方面也算是這一類人:)
3)??本文不討論專業、學術內容,什么架構之類的都不在討論范圍之類,一切以實用為主,一切以開發出一個sniffer為核心
4)?本文主要內容:
? ? ??? ? ? a.工欲善其事,必先配環境——配置winpcap開發環境
????? b.掀起你的蓋頭來,讓我來畫你的臉——用MFC開發GUI
?? ?c.安得廣廈千萬間,先畫藍圖再砌磚——搭建wipcap抓包框架
????? d.要想從此過,留下協議頭——各層網絡協議頭的實現
????? e.莫道無人能識君,其實我懂你的心——解析數據包
????? f.千呼萬喚始出來,不抱琵琶也露面——將解析數據寫到GUI上?
5)來看看我們要做的最終成果:?
?? 功能:
??????列出監測主機的所有網卡,選擇一個網卡,在混雜模式下進行監聽。
????? 捕獲所有流經網卡的數據包,并利用WinPcap函數庫設置過濾規則。
????? 可以本地文件形式保存和讀取已捕獲的數據包信息。
????? 分析捕獲到的數據包的包頭和數據,按照各種協議的格式進行格式化顯示。
????? 支持協議包括:IPv4、IPv6、ARP、ICMP、TCP、UDP、HTTP。??
??界面:
???一、工欲善其事,必先配環境——配置winpcap開發環境
????????1.0、背景
????????WinPcap(Windows Packet Capture)是Windows平臺下的鏈路層網絡訪問工具,其目的在于為Windows應用程序提供訪問網絡底層的能力。需要注意的是WinPcap只能把數據包從網絡中抓過來(其實是復制過來,并沒有真實的抓過來,感覺像是拍了張照),并不能修改數據。
????????“那么在哪里可以買得到呢?”,其實不用買,要得到很容易,更何況咱中國人沒有為軟件付費的習慣:),參看下一節,“不可或缺的東西”:
????????1.1、不可或缺的東西
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
當然還有VisualStudio2008或者VC++6.0,本文用的是VS2008
????????(這玩意的下載網址就不用我介紹了吧)
1.2、配置過程
l?添加頭文件目錄
VS2008:
????????工具->屬性->項目和解決方案-> VC++目錄->包含文件->添加WinPcap開發包中的Include目錄,如下圖:
????????
VC6:
???????? Tools->Options->Derectories->Include files->添加WinPcap開發包中的Include目錄,如下圖:
?
l?添加庫文件目錄
VS2008:
與上一個步驟一樣,只有一小個變化,選擇“庫文件”,然后添加WinPcap開發包中的Lib目錄,如下圖:
?
VC6:
?????? Tools->Options->Derectories->Library files->添加WinPcap開發包中的Lib目錄,如下圖:
???????
l?增加與WinPcap有關的預處理定義
VS2008:
????????項目->項目屬性->配置屬性->預處理定義->添加WPCAP和HAVE_REMOTE,如下圖:
?
??????????????????VC6:
?????? Project->Setting->C/C++->Preprocessor->添加WPCAP和HAVE_REMOTE,如下圖:
?
l?添加wpcap.lib庫文件
??????????????????????????? VS2008
??? 項目->項目屬性->配置屬性->連接器->命令行->附加選項框中加入wpcap.lib,如下圖:?
??
VC6:
????????????????????????Project->setting->link->加入wpcap.lib,如下圖:
?????????
l?添加pcap.h頭文件
在使用WinPcap API的所有源文件中添加#include "pcap.h”
1.3、???????運行測試代碼
所有配置工作全部搞定,現在來運行測試代碼,如果能順利執行,那么就配置成功了。
這里的測試代碼其實就是WinPcap中自帶的實例,還記得“不可或缺的文件”中下載的兩個文件沒?從WpdPack_4_1_2.zip解壓出來的文件中有Examples-pcap和Examples-remote兩個文件夾,進入Examples-pcap中可以看到,里面有很多實例,任意打開一個文件夾,打開其中的.dsw文件,執行一下就知道了。
筆者這里選擇的是UDPdump這個實例,執行成功的畫面如下:?
?
?第一章至此結束,欲知后事如何,請看下一章“掀起你的蓋頭來,讓我來畫你的臉——用MFC開發GUI”分解!
為了方便學習,完整的代碼下載在這里:http://download.csdn.net/download/litingli/4110529
?來源:http://blog.csdn.net/litingli/article/details/5950962
來源: http://blog.csdn.net/litingli/article/details/5950962總結
以上是生活随笔為你收集整理的网络抓包工具的开发和实现C++抓包嗅探器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【实战与杂谈】如何复活一个开源网站-游戏
- 下一篇: P5734 文字处理软件 C++题解