1、使用ManagementClass类获取本机Mac地址
示例代码演示了使用ManagementClass获取本机IP地址的方法,还可以使用类似的方法获取本机的IP地址、CPU序列号、硬盘ID、物理内存等信息。
/// <summary>
/// 获取Mac地址
/// </summary>
/// <returns></returns>
public static string GetMacAddress()
{
try
{
using (ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
{
using (ManagementObjectCollection moc = mc.GetInstances())
{
string macAddress = "";
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
macAddress = mo["MacAddress"].ToString();
break;
}
}
return macAddress;
}
}
}
catch
{
return "unknow";
}
finally
{
}
}
还可以使用ManagementObjectSearcher类来得到ManagementObjectCollection对象。下面是完整代码。
/// <summary>
/// 获取本机的MAC
/// </summary>
/// <returns></returns>
public static string GetLocalMac()
{
using (ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration"))
{
using (ManagementObjectCollection queryCollection = query.Get())
{
string mac = null;
foreach (ManagementObject mo in queryCollection)
{
if ((bool)mo["IPEnabled"] == true)
mac = mo["MacAddress"].ToString();
}
return (mac);
}
}
}
2、使用Environment类获取用户名
示例代码演示通过Environment类获取用户名,使用该类还可以获取计算机名、程序当前工作目录、系统支持的换行字符串等信息。
/// <summary>
/// 获取操作系统的登录用户名
/// </summary>
/// <returns></returns>
public static string GetUserName()
{
try
{
return Environment.UserName;
}
catch
{
return "unknow";
}
finally
{
}
}
3、使用Dns类获取本机和远程机器的IP地址
Dns类位于System.Net命名空间下,使用GetHostEntry()方法可以根据传入的主机名称得到对应的IP地址。
/// <summary>
/// 获取本机IP地址
/// </summary>
/// <returns></returns>
public static string GetLocalIP()
{
string strHostName = Dns.GetHostName(); //得到本机的主机名
IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); //取得本机IP
return ipEntry.AddressList[0].ToString();
}
/// <summary>
/// 获取远程主机IP
/// </summary>
/// <param name="remoteHostName"></param>
/// <returns></returns>
public string[] GetRemoteIP(string remoteHostName)
{
IPHostEntry ipEntry = Dns.GetHostEntry(remoteHostName);
IPAddress[] ipAddr = ipEntry.AddressList;
string[] strIpAddr = new string[ipAddr.Length];
for (int i = 0; i < ipAddr.Length; i++)
{
strIpAddr[i] = ipAddr[i].ToString();
}
return strIpAddr;
}
4、使用系统API方法获取远程机器Mac地址
inet_addr()方法将字符串形式的IP地址转换成32位整型,SendARP()方法获取远程机器的Mac地址。
[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);
/// 获取远程主机MAC
/// </summary>
/// <param name="localIP"></param>
/// <param name="remoteIP"></param>
/// <returns></returns>
public string GetRemoteMac(string localIP, string remoteIP)
{
try
{
Int32 ldest = inet_addr(remoteIP); //目的ip
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest, 0, ref macinfo, ref len);
return Convert.ToString(macinfo, 16);
}
catch
{
return "0";
}
}