通過winPcap,可以再window上輕松捕獲網卡資料包,還可以發送鍊路層的Packet将,可以網卡對網卡通信,這樣非常有用,比如網絡中有一個嵌入式裝置,初始ip為192.168.0.122, 但是主機PC的ip為192.168.1.13 這樣ip不在同一段中,不能直接通信,這樣就可以利用winPcap在主機PC上廣播資料包,找到網絡這的192.168.0.122裝置,将其改為DHCP或者手動設定新的IP,這樣,兩個裝置就可以直接通信了。
大家會覺得,手動改一下嵌入式裝置好了,但是,你要知道,如果網絡中有幾百個這樣的裝置,或者網絡環境發生變化,這工作量就不是一般的大了。
linux下的socket提供了原始套接字,可以不通過winPcap,而直接發送鍊路層的資料包,我的IP-Camera中已經加入了這個功能,arm端用的是linux的原始套接字,PC端用的是winPcap。在稍後的博文中,會貼出一部分主要代碼,供大家參考
廢話少說,還是先建工程
我的winpCap庫路徑如下,Solution為VS輸出的宏,表示工程跟目錄
$(SolutionDir)winPcap\Include
$(SolutionDir)winPcap\Lib
(1)執行下面的操作打開配置對話框:工具->選項->項目和解決方案->VC++目錄
(2)在“顯示以下内容的目錄”下面選擇“包含檔案”,添加新的項:$(SolutionDir)winPcap\Include
(3)在“顯示以下内容的目錄”下面選擇“庫檔案”,添加新的項:$(SolutionDir)winPcap\Include
(4)建立一個C++項目工程,然後配置工程屬性:
(5)右鍵->屬性->配置屬性->C/C++->預處理器-> 預處理器定義,添加WPCAP HAVE_REMOTE (重要)
(6)右鍵->屬性->配置屬性->連接配接器->輸入->附加依賴項,添加 wpcap.lib Packet.lib ws2_32.lib。
如果設定不對會出現
PCAP_SRC_IF_STRING PCAP_OPENFLAG_PROMISCUOUS 還有函數找不到的錯誤
注:最後編譯release版本 步驟4~6還要重做一遍的,debug和release就是兩種不同的項目配置