其實,基於winpcap的網絡分析程序已經遍地開花了,現在寫這些似乎挺落伍的。而且,.net下的winpcap編程也有人已經做了封裝,只是思路和我的不大一樣。但是無論怎麼說,也是搗鼓了一陣子。多少有些心得,就一點一點寫下來好了。程序的完整代碼,等文章全寫完了再發表好了。我的思路是這樣滴:用vc++.net對winpcap進行封裝,實現數據包的抓取和解析,然後再通過c#進行調用,完成網絡分析等功能。這一次,就說說我是如何用vc++.net對winpcap進行封裝。首先說下為什麼要用vc++.net。在c#下面用DllImport不是很方便麼?嗯,沒錯。事實上,我見到的那個老外用.net封裝winpcap就是這麼做的。這樣做沒有問題,也沒有什麼多少性能上的問題。只是呢,因為我以前遇到過一次類似的問題,也是調用c的庫,用DllImport搞完之後,總是出超級奇怪的問題。無奈之下,只好用vc++.net做了個橋。因為它向下能c,向上能.net,真是太好不過了。這一次,我也是為了避免出現以前的那個問題,就直接用了vc++.net。好了,不廢話了,正題開始:首先建立一個vc++.Net的類庫(真是廢話呀,呵呵),我起的名字是NetDriver。然後把下載到的winpcap解壓,將裡面的lib和include都拷貝到NetDriver文件夾下面。接下來要修改一下項目屬性。一個地方是要把“優化”關閉,因為優化之後的程序跑起來總是出錯。另一個就是在附加依賴項裡面,添加對lib文件夾下面的兩個lib庫的引用。接下來,在NetDriver.h裡面添加對winpcap的引用:#include "include/pcap.h"編譯……呵呵,失敗了吧。成功就奇怪了!!(不要咬我)接著去include下面找到pcap.h文件,進行下面的修改:第41行:將#include
改成 #include “pcap-stdinc.h”第51行:將#include 改成 #include “pcap-bpf.h”將第87行typedif struct pcap pcap_t刪除,並在原來位置添加下面兩行:typedef int pcap;//這樣改是因為pcap是個內部結構,上層直接調用會失敗。反正是指針,用int代替就可以了。typedef pcap pcap_t;再編譯……怎麼,還失敗了?那就不是我的問題了。看看是不是把NetDriver文件夾放在了中文路徑下面。如果是就得換個地方了。(還有就是不要忘記安裝winpcap啊!)老外歧視咱們中國人,shit!!目前也只能忍了。到這裡,就可以在vc++.Net下面使用winpcap庫了。用法,官方的教程就已經足夠清楚了,我下回簡單說說好了。這次就到這了。