关于API取MAC地址

higoodstudydaydayup higoodstudydaydayup 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

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的。


---------华丽的分隔线-----------------------------


请教下各位低手高手。这大概是什么原因。或者我哪里做错了也或者是可能哪些因素可能影响到了
任何的提示或指教不胜感激。
谢谢
...全文
评论 15
收藏 已收藏
分享
返回顶部
higoodstudydaydayup
C# 111,128 成员 642,536 内容