一、什麼是WinPcap
WinPcap是一個基於Win32平臺的,用於捕獲網絡數據包並進行分析的開源庫.
大多數網絡應用程序通過被廣泛使用的操作系統元件來訪問網絡,比如sockets。 這是一種簡單的實現方式,因爲操作系統已經妥善處理了底層具體實現細節(比如協議處理,封裝數據包等等),並且提供了一個與讀寫文件類似的,令人熟悉的接口。
然而,有些時候,這種“簡單的方式”並不能滿足任務的需求,因爲有些應用程序需要直接訪問網絡中的數據包。也就是說,那些應用程序需要訪問原始數據包,即沒有被操作系統利用網絡協議處理過的數據包。
WinPcap產生的目的,就是爲Win32應用程序提供這種訪問方式; WinPcap提供了以下功能
捕獲原始數據包,無論它是發往某臺機器的,還是在其他設備(共享媒介)上進行交換的
在數據包發送給某應用程序前,根據用戶指定的規則過濾數據包
將原始數據包通過網絡發送出去
收集並統計網絡流量信息
以上這些功能需要藉助安裝在Win32內核中的網絡設備驅動程序才能實現,再加上幾個動態鏈接庫DLL。
二、WinPcap的配置步驟
1、下載Microsoft Visual Studio 2010,打開
首界面如下
2、將這個文件保存一下路徑
3、在軟件中具體配置如下:
項目-->**屬性(alt+F7)
配置屬性-->清單工具-->輸入和輸出-->嵌入清單-->否
項目-->**屬性(alt+F7)
配置屬性-->C/C++-->常規-->附加包含目錄-->
項目-->**屬性(alt+F7)
配置屬性-->鏈接器-->常規-->附加庫目錄-->
項目-->**屬性(alt+F7)
配置屬性-->鏈接器-->輸入-->附加依賴項-->補充“;Packet.lib;wpcap.lib”
項目-->**屬性(alt+F7)
配置屬性-->C/C++-->預處理器-->預處理器定義-->補充“;HAVE_REMOTE”
4、配置完之後複製一行代碼測試結果,代碼如下:
// ListInterface.cpp : 定義控制檯應用程序的入口點。
//
#include "stdafx.h"
#include "pcap.h"
int _tmain(int argc, _TCHAR* argv[])
{
pcap_if_t *alldevs;
pcap_if_t *d;
int i=0;
char errbuf[PCAP_ERRBUF_SIZE];
/* 獲取本地機器設備列表 */
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
exit(1);
}
/* 打印列表 */
for(d= alldevs; d != NULL; d= d->next)
{
printf("%d. %s\n", ++i, d->name);
if (d->description)
printf(" (%s)\n", d->description);
else
printf(" (No description available)\n");
}
if (i == 0)
{
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
return 0;
}
/* 不再需要設備列表了,釋放它 */
pcap_freealldevs(alldevs);
}
5、點擊調試運行,如出現以下界面:
就說明測試成功。