C#如何獲得設備Mac地址

利用dns類和WMI規範獲取IP及MAC地址

在C#編程中,要獲取主機名和主機IP地址,是比較容易的.它提供的Dns類,可以輕鬆的取得主機名和IP地址.

示例:

在這段代碼中使用了兩個類,一個是Dns類,另一個爲IPHostEntry類,二者都存在於命名空間System.Net中.
Dns類主要是從域名系統(DNS)中檢索關於特定主機的信息,上面的代碼第一行就從本地的DNS中檢索出本地主機名.
IPHostEntry類則將一個域名系統或主機名與一組IP地址相關聯,它與DNS類一起使用,用於獲取主機的IP地址組.
要獲取遠程主機的IP地址,其方法也是大同小異.

在獲取了IP地址後,如果還需要取得網卡的MAC地址,就需要進一步探究了.
這裏又分兩種情況,一是本機MAC地址,二是遠程主機MAC地址.二者的獲取是完全不同的.
在獲取本機的MAC地址時,可以使用WMI規範,通過SELECT語句提取MAC地址.在.NET框架中,WMI規範的實現定義在System.Management命名空間中.
ManagementObjectSearcher類用於根據指定的查詢檢索管理對象的集合
ManagementObjectCollection類爲管理對象的集合,下例中由檢索對象返回管理對象集合賦值給它.

示例:

 

獲取遠程主機的MAC地址時,需要借用API函數SendARP.該函數使用ARP協議,向目的主機發送ARP包,利用返回並存儲在高速緩存中的IP和MAC地址對,從而獲取遠程主機的MAC地址.

示例:

 

但使用該方式獲取MAC時有一個很大的限制,就是隻能獲取同網段的遠程主機MAC地址.因爲在標準網絡協議下,ARP包是不能跨網段傳輸的,故想通過ARP協議是無法查詢跨網段設備MAC地址的。

示例程序:

 

注:在Visual Studio 2008中,可能會出現: 找不到類型或命名空間名稱“ManagementObjectSearcher”(是否缺少 using 指令或程序集引用?) 類似的錯誤提示。出現這種錯誤的原因是沒有添加對System.Management.Dll的引用。

解決辦法:在“解決方案資源管理器”-“引用”上點擊右鍵,選擇“添加引用”,在打開的列表中選擇“System.Management”,點擊“確定”即可。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章