??? WinPcap的使用說明網上也有不少,這里僅作學習過程的記錄。
??? 首先,從官方下載了較新的開發包 WpdPack_4_0_2 ,里面有不少的例子。不過都是VC6.0的,而我想要開發的環境是VS2008。解壓后有5個文件夾,其中Lib和Include兩個要包含在工程中。方法如下:1)項目->屬性->配置屬性->鏈接器->常規->附加庫目錄,加入Lib所在路徑;2)項目->屬性->配置屬性->鏈接器->輸入->附加依賴項,加入wpcap.lib與Packet.lib兩個靜態鏈接庫;3)項目->屬性->配置屬性->C/C++->常規->附加包含目錄,加入Include所在路徑。
??? 接著,我參考了 http://www.smatrix.org/bbs/read.php?tid=358&fpage=4 里頭的步驟開始獲取網絡驅動。結果很不幸地出現了一些莫名其妙的錯誤:1>c:\program files\microsoft sdks\windows\v6.0a\include\netioapi.h(155) : error C2146: 語法錯誤 : 缺少“;”(在標識符“PhysicalMediumType”的前面)。錯誤發生在??? NDIS_PHYSICAL_MEDIUM PhysicalMediumType 這一句上。網上有一些解析,說這是因為VS2008對ntddndis.h里頭的定義比較新,WinPcap的頭文件在對ntddndis.h的編譯過后沒有獲得相應的定義,固NDIS_PHYSICAL_MEDIUM不是一個結構或類,所以就產生了缺少“;”這樣奇怪的錯誤。把netioapi.h里的#include <ntddndis.h>改為#include "ntddndis.h"后終于通過編譯,改為" "后項目則從包括的文件中先查找頭文件的定義,若找不到再從默認路徑中查找。(網上查到的解析是: <>先去系統目錄中找頭文件,如果沒有在到當前目錄下找。而""首先在當前目錄下尋找,如果找不到,再到系統目錄中尋找。 )因此我猜想Include文件夾里頭的ntddndis.h有NDIS_PHYSICAL_MEDIUM的定義。再查看了一下Include文件夾里的ntddndis.h,也沒發現,但在查看c:\program files\microsoft sdks\windows\v6.0a\include\下的ntddndis.h時竟然發現有NDIS_PHYSICAL_MEDIUM的定義!!! 是不是我對系統目錄的概念理解有誤呢?假如把Include里的頭文件刪了,再改回<>可以通過編譯的話,那么就說明在用<>的情況下查找的順序應該是先查Include文件夾再查默認路徑。一試之下竟然應驗了。于是再去搜了一個尖括號與雙引號的區別,這個解析得比較清晰: 雙 引號時,系統先在引用被包含文件的源文件所在的文件目錄中尋找要包含的文件,若找不到,再按系統指定的標準方式檢索其他目錄。尖括號時,不檢查原文件所在的文件目錄,而直接按系統標準方式檢索文件目錄 。這樣子就能解析發生了什么問題,因為發生錯誤的是在netioapi.h的頭文件里,而這個頭文件是在c:\program files\microsoft sdks\windows\v6.0a\include\下,所以在用<>時項目沒有直接查與netioapi.h同一目錄下的ntddndis.h,而是直接查到了Include頭上。
??? 把錯誤排除了之后,程序正常運行,我的電腦裝了個1000M網卡,所以搜出了3個驅動,第一個是VPN的,然后才是兩個物理網卡。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
