日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用DNS 轻松获取主机信息

發布時間:2023/12/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用DNS 轻松获取主机信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用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 )
?{
??if(mo["IPEnabled"].ToString() == "True")
??mac = mo["MacAddress"].ToString();
?}
?
?獲取遠程主機的MAC地址時,需要借用API函數SendARP.該函數使用ARP協議,向目的主機發送ARP包,利用返回并存儲在高速緩存中的IP和MAC地址對,從而獲取遠程主機的MAC地址.
?
?示例:
?Int32 ldest= inet_addr(remoteIP); //目的ip
?Int32 lhost= inet_addr(localIP); //本地ip
?
?try
?{
??Int64 macinfo = new Int64();
??Int32 len = 6;
??int res = SendARP(ldest,0, ref macinfo, ref len);? //發送ARP包
??return Convert.ToString(macinfo,16);
?}
?catch(Exception err)
?{
??Console.WriteLine("Error:{0}",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
?{
??[DllImport("Iphlpapi.dll")]
??private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length);
??[DllImport("Ws2_32.dll")]
??private static extern Int32 inet_addr(string ip);
?
??//獲取本機的IP
??public string getLocalIP()
??{
???string strHostName = Dns.GetHostName();? //得到本機的主機名
???IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本機IP
???string strAddr = ipEntry.AddressList[0].ToString();
???return(strAddr);
??}
??//獲取本機的MAC
??public string getLocalMac()
??{
???string mac = null;
???ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;
???ManagementObjectCollection queryCollection = query.Get();
???foreach( ManagementObject mo in queryCollection )
???{
????? if(mo["IPEnabled"].ToString() == "True")
??????? mac = mo["MacAddress"].ToString();
???}
???return(mac);
??}
?
??//獲取遠程主機IP
??public string[] getRemoteIP(string RemoteHostName)
??{
???IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName);
???IPAddress[] IpAddr = ipEntry.AddressList;
???string[] strAddr = new string[IpAddr.Length];
???for (int i=0;i ???{
????strAddr[i] = IpAddr[i].ToString();
???}
???return(strAddr);
??}
??//獲取遠程主機MAC
??public string getRemoteMac(string localIP, string remoteIP)
??{
???Int32 ldest= inet_addr(remoteIP); //目的ip
???Int32 lhost= inet_addr(localIP); //本地ip
??
???try
???{
????Int64 macinfo = new Int64();
????Int32 len = 6;
????int res = SendARP(ldest,0, ref macinfo, ref len);
????return Convert.ToString(macinfo,16);
???}
???catch(Exception err)
???{
????Console.WriteLine("Error:{0}",err.Message);
???}
???return 0.ToString();
??}
??
??
??public static void Main(string[] args)
??{
???getIP gi = new getIP();
???Console.WriteLine("本地網卡信息:");
???Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac());
???
???Console.WriteLine("\n\r遠程網卡信息:");
???string[] temp = gi.getRemoteIP("scmobile-tj2");
???for(int i=0;i ???{
???????? Console.WriteLine(temp[i]);
???}
???Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1"));
??}
?}

轉載于:https://www.cnblogs.com/Fly-sky/archive/2008/08/18/1270315.html

總結

以上是生活随笔為你收集整理的使用DNS 轻松获取主机信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。