1.使用命名空间
using System.Runtime.InteropServices;
2.使用api
[DllImport(“ws2_32.dll”)]
private static extern int inet_addr(string cp);
[DllImport(“IPHLPAPI.dll”)]
private static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 pMacAddr, ref Int32 PhyAddrLen);
3.方法
/// <summary>
/// 根据IP获得对应的硬件信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button14_Click(object sender, EventArgs e)
{
try
{
StringBuilder sb = new StringBuilder();
string ip = "192.168.1.111";
string hostname = Dns.GetHostByAddress(ip).HostName.ToString(); // 取得主机名
sb.Append("主机名:" + hostname + "\n");
string macAddress = GetMacAddress(ip);
sb.Append("mac地址:" + macAddress + "\n");
MessageBox.Show(sb.ToString());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 获取远程IP(不能跨网段)的MAC地址
/// </summary>
/// <param name="hostip"></param>
/// <returns></returns>
private string GetMacAddress(string hostip)
{
string Mac = "";
try
{
//将IP地址从 点数格式转换成无符号长整型
Int32 ldest = inet_addr(hostip);
Int64 macinfo = new Int64();
Int32 len = 6;
SendARP(ldest, 0, ref macinfo, ref len);
//转换成16进制,注意有些没有十二位
string TmpMac = Convert.ToString(macinfo, 16).PadLeft(12, '0');
Mac = TmpMac.Substring(0, 2).ToUpper();
for (int i = 2; i < TmpMac.Length; i = i + 2)
{
Mac = TmpMac.Substring(i, 2).ToUpper() + "-" + Mac;
}
}
catch (Exception Mye)
{
Mac = "获取远程主机的MAC错误:" + Mye.Message;
}
return Mac;
}