根据ip地址获得Mac地址的一种方法

复制代码
ExpandedBlockStart.gif Code
public static class MacUtility
{
    [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);

    
public static string GetRemoteMac(string clientIP)
    {
        
string ip = clientIP;

        
if (ip == "127.0.0.1")

            ip 
= GetLocalIP()[0];

        var ldest 
= inet_addr(ip);

        Int64 macinfo 
= new Int64();
        Int32 len 
= 6;
        
try
        {
            SendARP(ldest, 
0ref macinfo, ref len);
        }
        
catch
        {
            
return "";

        }
        
string originalMACAddress = Convert.ToString(macinfo, 16);
        
if (originalMACAddress.Length < 12)
        {

            originalMACAddress 
= originalMACAddress.PadLeft(12'0');

        }

        
string macAddress;

        
if (originalMACAddress != "0000" && originalMACAddress.Length == 12)
        {
            
string mac1, mac2, mac3, mac4, mac5, mac6;
            mac1 
= originalMACAddress.Substring(102);
            mac2 
= originalMACAddress.Substring(82);
            mac3 
= originalMACAddress.Substring(62);
            mac4 
= originalMACAddress.Substring(42);
            mac5 
= originalMACAddress.Substring(22);
            mac6 
= originalMACAddress.Substring(02);
            macAddress 
= mac1 + "-" + mac2 + "-" + mac3 + "-" + mac4 + "-" + mac5 + "-" + mac6;
        }
        
else
        {
            macAddress 
= "";
        }
        
return macAddress.ToUpper();

    }
    
public static string[] GetLocalIP()
    {
        
string hostName = Dns.GetHostName();

        IPHostEntry ipEntry 
= Dns.GetHostByName(hostName);

        IPAddress[] arr 
= ipEntry.AddressList;

        
string[] result = new string[arr.Length];

        
for (int i = 0; i < arr.Length; i++)
        {

            result[i] 
= arr[i].ToString();
        }
        
return result;
    }


}
复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值