天天看點

不同網段的socket通信 以及winPcap vs2005設定

通過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就是兩種不同的項目配置

繼續閱讀