关于API取MAC地址

higoodstudydaydayup 2010-09-19 10:43:12

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


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


请教下各位低手高手。这大概是什么原因。或者我哪里做错了也或者是可能哪些因素可能影响到了
任何的提示或指教不胜感激。
谢谢
...全文
511 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
風云 2011-05-12
  • 打赏
  • 举报
回复
遇到同样的问题,在大部分机子上都可以探测到MAC地址,可是唯独在一台笔记本上探测不到,如楼主所说
SendARP(ldest, 0, ref macinfo, ref len); //返回的macinfo是为0
360的ARP防火墙也没开,有哪位好心人遇到过同样的问题,如何解决的,请贴出来~
conghuihe 2010-10-29
  • 打赏
  • 举报
回复
我也不懂。。
  • 打赏
  • 举报
回复
谢谢楼上的两位了。
我再去研究研究11楼的。
有结果了来会上来报告的。。^_^
宝_爸 2010-10-29
  • 打赏
  • 举报
回复
SendARP的返回值是什么。

参考下面看看是不是有错误

SendARP Function
fangxiaofelix 2010-10-29
  • 打赏
  • 举报
回复
关注ing
  • 打赏
  • 举报
回复
原因还没找到。
现在只是找了种方法 用Process 调用nbtstat 然后取得返回内容。进行解析。速度慢了点。
这贴暂时不结了。等以后找到原因再结果了。谢谢各位了
mac_2008 2010-09-28
  • 打赏
  • 举报
回复
你好,遇到同样问题,仁兄知道答案了吗
  • 打赏
  • 举报
回复
来个好人。。。
  • 打赏
  • 举报
回复
自已无力的顶一下。。。。。
  • 打赏
  • 举报
回复
To:4楼  谢谢
但 ManagementObjectSearcher只能用于本系统吧?
  也就是说 那样取本机的信息是没问题的
  但是无法取得远程的机器信息的^_^
fuyun211 2010-09-19
  • 打赏
  • 举报
回复
string mac = string.Empty;
try
{
ManagementObjectSearcher MOS = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration");
ManagementObjectCollection MOC = MOS.Get();
foreach (ManagementObject MO in MOC)
{
if (MO["IPEnabled"].ToString() == "True")
{
mac = MO["MacAddress"].ToString();
}
}
}
catch { }
试试?
  • 打赏
  • 举报
回复
可能我写的太啰嗦了-_-#
苍穹无痕 2010-09-19
  • 打赏
  • 举报
回复
没弄过,不过帮你期待高手出现
wapdos 2010-09-19
  • 打赏
  • 举报
回复
先顶一下!! 慢慢看题目!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧