关于API取MAC地址
1.关于API取MAC地址
2.环境
2.0 从网地址 1.1.1.1-1.1.1.255(假设是我的局域网地址1.1.1 )
2.1 net view
可以看到我想测试的机器 myComputerName
2.2
ping -a
返回 Pinging myComputerName [myAddress] with 32 bytes of data:
其他ping通信息
2.3 nbtstat -a myAddress
NetBIOS Remote Machine Name Table
Name Type Status
---------------------------------------------
teatName <00> UNIQUE Registered
cntest <00> GROUP Registered
teatName <20> UNIQUE Registered
cntest <1E> GROUP Registered
MAC Address = myMacAddress
2.88 根据上面的信息我理解是我想测试的机器在连接方面没有问题
3.代码 (网上copy过来的)
[DllImport("IPHLPAPI.dll")]
private static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 pMacAddr, ref Int32 PhyAddrLen);
/// <summary>
/// 使用 SendARP 查询 MAC 地址 0 z3 g ~- z+ X9 s7 l
///通过 IP Helper API 中的 SendARP 发送 ARP 请求来获取 MAC 地址,简单方便,缺点是不能跨越网关
/// </summary>
/// <param name="hostip"></param>
/// <returns></returns>
public static string GetMacAddressByPInvoke(string hostip)//获取远程IP(不能跨网段)的MAC地址
{
string Mac = "";
try
{
Int32 ldest = inet_addr(hostip); //将IP地址从 点数格式转换成无符号长整型
Int64 macinfo = new Int64();
Int32 len = 6;
SendARP(ldest, 0, ref macinfo, ref len);
string TmpMac = Convert.ToString(macinfo, 16).PadLeft(12, '0');//转换成16进制 注意有些没有十二位
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)
{
//Todo-99 add log info
// Mac = "获取远程主机的MAC错误:" + Mye.Message;
}
return Mac;
}
4.问题
1. 绝大部分机器能取出MAC 地址。但几台机器却是无法取出MAC地址。也就是在调用 SendARP(ldest, 0, ref macinfo, ref len);
返回的macinfo是为0的。
---------华丽的分隔线-----------------------------
请教下各位低手高手。这大概是什么原因。或者我哪里做错了也或者是可能哪些因素可能影响到了
任何的提示或指教不胜感激。
谢谢