.net 根据ip获得局域网主机名和物理地址

来源:互联网 发布:淘宝模特招聘58同城 编辑:程序博客网 时间:2024/06/06 01:01

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;    }
0 0