標籤:style http color io os ar for 檔案 sp
最近需要在C#下寫一個抓取ARP包的程式,網上找來找去,在C#下只能用SharpPcap來做了。SharpPcap是作者把winPcap用C#重新封裝而來的,詳細資料見如下的連結。
SharpPcap教程
我在配置的過程中遇到了一些問題,現在把這些問題的解決方案寫下來,以免以後忘了,又開始各種痛苦的調試。
先來看看我的環境:win7旗艦版 、VS2010旗艦版、WinPcap4.1.3、SharpPcap4.2.0。
1.安裝Winpcap4.1.3(WinPcap4.1.3下載)
2.解壓SharpPcap-4.2.0.bin.zip(SharpPcap4.2.0.bin.zip&&SharpPcap4.2.0.src.zip下載)解壓後開啟debug檔案夾,可以看到裡面有兩個dll檔案,這就是我們程式中要用到的東西。SharpPcap-4.2.0.src.zip壓縮包中,包含SharpPcap的所有原始碼和一些樣本程式。
3.開啟VS2010,建立一個C#的控制台項目。
4.然後單擊“項目”下拉式功能表,選擇 “添加引用”,在彈出的對話方塊中單擊 “瀏覽” 選項卡,然後選擇第2步中SharpPcap-4.2.0.bin.zip解壓後的路徑,然後將debug中的SharpPcap.dll添加進去。
5.將下面的代碼,粘貼到你的項目中,測試組態是否成功,如果成功則會顯示你的網路介面卡的資訊。
using System;using System.Collections.Generic;using SharpPcap;namespace Example1{ /// <summary> /// Obtaining the device list /// </summary> public class IfListAdv { /// <summary> /// Obtaining the device list /// </summary> public static void Main(string[] args) { // Print SharpPcap version string ver = SharpPcap.Version.VersionString; Console.WriteLine("SharpPcap {0}, Example1.IfList.cs", ver); // Retrieve the device list var devices = CaptureDeviceList.Instance; // If no devices were found print an error if(devices.Count < 1) { Console.WriteLine("No devices were found on this machine"); return; } Console.WriteLine("\nThe following devices are available on this machine:"); Console.WriteLine("----------------------------------------------------\n"); /* Scan the list printing every entry */ foreach(var dev in devices) Console.WriteLine("{0}\n",dev.ToString()); Console.Write("Hit ‘Enter‘ to exit..."); Console.ReadLine(); } }}
需要注意的問題:
1.如果你要用SharpPcap3.5,那麼你在建立項目時.Net FrameWork 要選成3.5,(vs2010預設是4.0),否則運行時會出現錯誤。
2.如果你用的是SharpPcap高版本的dll,測試樣本程式時最好不要用低版本的,否則可能會出錯。樓主測試的時候,dll用的是SharpPcap4.2的,樣本程式用的是SharpPcap3.5的,產生時會出現錯誤。
在 Visual Studio 2010 中配置SharpPcap