获取网络上客户端MAC地址时,利用iphlp32.dll中的SendARP报错了!各位帮忙看一下

xiaozhihongxzh 2009-05-19 06:04:01
我在网上找的获取远端MAC地址的方法,用的时候报错,麻烦给位帮忙指点下,谢谢了!!
代码如下:
public partial class Default2 : System.Web.UI.Page
{
[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);

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
try
{
string userip = Request.UserHostAddress;
string strClientIP = Request.UserHostAddress.ToString().Trim();
Int32 ldest = inet_addr(strClientIP); //目的地的ip
Int32 lhost = inet_addr(""); //本地服务器的ip
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest, 0, ref macinfo, ref len);
string mac_src = macinfo.ToString("X");
if (mac_src == "0")
{
if (userip == "127.0.0.1")
Response.Write("正在访问Localhost!");
else
Response.Write("欢迎来自IP为" + userip + "的朋友!" + "<br>");
return;
}

while (mac_src.Length < 12)
{
mac_src = mac_src.Insert(0, "0");
}

string mac_dest = "";

for (int i = 0; i < 11; i++)
{
if (0 == (i % 2))
{
if (i == 10)
{
mac_dest = mac_dest.Insert(0, mac_src.Substring(i, 2));
}
else
{
mac_dest = "-" + mac_dest.Insert(0, mac_src.Substring(i, 2));
}
}
}

Response.Write("欢迎来自IP为" + userip + "<br>" + ",MAC地址为" + mac_dest + "的朋友!"

+ "<br>");
}
catch (Exception err)
{
Response.Write(err.Message);
}
}
}

[DllImport("Iphlpapi.dll")]报错了

请问
[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);
是直接这样写上就可以了吗?

...全文
137 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaozhihongxzh 2009-05-20
  • 打赏
  • 举报
回复
那难道现在就没办法获得非局域网内的mac地址啦?
请问以前可用的方法是怎样的啊?
请教了。
clal 2009-05-20
  • 打赏
  • 举报
回复
非域局网内,很难
现在大部份用户都会自动打补丁
很多以前可用的方法,现在都不能用的
xiaozhihongxzh 2009-05-20
  • 打赏
  • 举报
回复
~~~???
非局域网内应该也有获取客户端MAC地址的方法吧
求救各位了,帮帮忙!
caofan520 2009-05-20
  • 打赏
  • 举报
回复
获取不到的

每经过一个路由MAC地址就变了

所以说不能真正获取客户端的MAC地址

除非用ActiveX
clal 2009-05-20
  • 打赏
  • 举报
回复
前段时间我也疯狂的找过
除了一些hack方法,没有找到过能正常实现
周公 2009-05-19
  • 打赏
  • 举报
回复
这种做法或许在WinForm下不会报错,但是在ASP.NET有诸多限制,比如在服务器端不能让客户端执行某些隐秘或者涉及安全的操作,客户端对服务器亦是如此。
否则客户端让服务器格式化硬盘或者服务器让客户端格式化硬盘,岂不是多了很多无辜者?
获取客户端MAC在局域网内相对较容易,但是非局域网内的话好像有点难度了。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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