网站挂马检测流程图,湖南省郴州市湘南学院,大连自助建站,全网营销的四大优势利用dns类和WMI规范获取IP及MAC地址 在C#编程中,要获取主机名和主机IP地址,是比较容易的.它提供的Dns类,可以轻松的取得主机名和IP地址. 示例: string strHostName Dns.GetHostName(); //得到本机的主机名 IPHostEntry ipEntry Dns.GetHostByName(strHostName); //取得…利用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 i0;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 i0;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