利用dns類和wmi規範獲取ip及mac位址
在c#程式設計中,要獲取主機名和主機ip位址,是比較容易的.它提供的dns類,可以輕鬆的取得主機名和ip位址.
示例:string strhostname = dns.gethostname(); //得到本機的主機名
iphostentry ipentry = dns.gethostbyname(strhostname); //取得本機ip
string straddr = ipentry.addresslist[0].tostring(); //假設本地主機為單網絡卡
在這段**中使用了兩個類,乙個是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類為管理物件的集合,下例中由檢索物件返回管理物件集合賦值給它.
示例:managementobjectsearcher query =new managementobjectsearcher("select * from win32_networkadapterconfiguration") ;
managementobjectcollection querycollection = query.get();
foreach( managementobject mo in querycollection )
獲取遠端主機的mac位址時,需要借用api函式sendarp.該函式使用arp協議,向目的主機傳送arp包,利用返回並儲存在快取記憶體中的ip和mac位址對,從而獲取遠端主機的mac位址.
示例:int32 ldest= inet_addr(remoteip); //目的ip
int32 lhost= inet_addr(localip); //本地ip
try
catch(exception err)
",err.message);
} return 0.tostring();
但使用該方式獲取mac時有乙個很大的限制,就是只能獲取同網段的遠端主機mac位址.因為在標準網路協議下,arp包是不能跨網段傳輸的,故想通過arp協議是無法查詢跨網段裝置mac位址的。
示例程式:
using system.net;
using system;
using system.management;
using system.runtime.interopservices;
public class getip
//獲取本機的mac
public string getlocalmac()
return(mac);
}//獲取遠端主機ip
public string getremoteip(string remotehostname)
return(straddr);
}//獲取遠端主機mac
public string getremotemac(string localip, string remoteip)
catch(exception err)
",err.message);
} return 0.tostring();
} public static void main(string args)
console.writeline(gi.getremotemac("192.168.0.3","192.168.0.1"));}}
C 獲取IP及MAC位址
public class hostinfo 1 d d 2 0 4 d 25 0 5 d 1 d d 2 0 4 d 25 0 5 d 1 d d 2 0 4 d 25 0 5 d 1 d d 2 0 4 d 25 0 5 獲取本機主機名 public static string gethostna...
獲取本地IP與網路Ip及Mac位址
由於專案上的原因,需要獲取本地ip與網路ip及mac位址,弄了好半天,才明白過程,於是給大家分享一下。不說了,直接上 public class getipandmacaddress 獲取鏈結網路時分配的ip throws socketexception public static string ge...
c 獲取本地IP和MAC位址
查詢了幾個方法,經過除錯修改,下面這個方法能很好的獲取到本地的ip和mac位址。可以用於這方面的功能實現。主要是要新增system.management的引用。csharp view plain copy print?using system using system.management usin...