C#.NET如何取得客户端的网卡MAC地址?

hr01071008 2007-11-02 04:08:12
请教如何得到客户端网卡的MAC地址?不是服务器本地的.本地的我有代码.

/// <summary>
/// 取得设备网卡的MAC地址
/// </summary>
public static string GetNetCardMacAddress()
{
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();

string str = "";
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
str = mo["MacAddress"].ToString();
}
return str;
}

比喻:我们访问CSDN网站,CSDN网站的服务器如何取得我们正的使用的电脑的网卡的MAC地址.急.......
...全文
791 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
六棱角 2011-09-02
  • 打赏
  • 举报
回复
收藏下。哦。备用
hr01071008 2007-11-05
  • 打赏
  • 举报
回复
使用ActiveX,用户体验不好,很多用户都不敢通过允许的.哎.....伤脑啊......难怪我们老得快....
WNASP 2007-11-05
  • 打赏
  • 举报
回复
客户端的东西可不是随便就能得到的压
不然不就成了病毒了吗?而且客户端都是脚本的东西,像activeX这些东西有的时候都是被禁止的
当然activeX是可以实现的,或者用wscript去写,去调用shell
WNASP 2007-11-05
  • 打赏
  • 举报
回复
客户端的东西可不是随便就能得到的压
不然不就成了病毒了吗?而且客户端都是脚本的东西,像这些东西有的时候都是被禁止的
当然activeX是可以实现的,或者用wscript去写,去调用shell
hr01071008 2007-11-05
  • 打赏
  • 举报
回复
我在一个匿名的查上调查系统,不能重复的提问,所以想能过IP,电脑用户名,及MAC地址等方法来实现,结果很不理想,总有问题....不知道哪位有更好的办法没有?不甚感谢!!!
aminggu532 2007-11-05
  • 打赏
  • 举报
回复
MARK
hr01071008 2007-11-05
  • 打赏
  • 举报
回复
同志们啦.....我测试过了....不行啊.....
jennydin ,我不知道是我引用的不对,还是怎么回事,得不到MAC地址,IP地址倒是得到了.请告诉一下我,怎么引用那两个DLL文件,我用的工具是VS2005.


luck0235 ,谢谢你的方法,可是我COPY下来运行了一下,先是被阻止,允许后却得到一个空白的页.怪....
suyiming 2007-11-02
  • 打赏
  • 举报
回复
在外网中b/s架构是获取不了客户端mac地址的 内网就可以获取得到。
flyingfz 2007-11-02
  • 打赏
  • 举报
回复
mark
luck0235 2007-11-02
  • 打赏
  • 举报
回复
因为要获取客户端信息,所以在B\S模式下C#是无法实现的。

通过ActiveX虽然可以获取,但前提是用户未禁用它,过程很简单,把获取到的值赋在一hidden input中发送,服务端取值。
kings2015 2007-11-02
  • 打赏
  • 举报
回复
mac 什么东西 帮顶
sxlfybb 2007-11-02
  • 打赏
  • 举报
回复
嗯,如果是基本internet网络的话,这个问题可以很明确地告诉你无解。
除非是使用activex控件,或者是让用户加你进入信任站点, 你才可以使用我楼上的那种方法。否则不加入信任站点直接使用的话,会让用户确认的。
如果是局域网络的话,或者公司内部的VPN 网络的话,你可以让他们加入你的信任站点再使用楼上的class,就没问题的,可以直接获取

luck0235 2007-11-02
  • 打赏
  • 举报
回复
这是测试页面,楼主可直接copy存为一html文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<OBJECT id="locator" classid="CLSID:76A64158-CB41-11D1-8B02-00600806D9B6" VIEWASTEXT></OBJECT>
<OBJECT id="foo" classid="CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223"></OBJECT>
<SCRIPT language="JScript">
<!--
var service = locator.ConnectServer();
var m;
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
//-->
</SCRIPT>
<SCRIPT language="JScript" event="OnObjectReady(objObject,objAsyncContext)" for="foo">
<!--
if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
m = objObject.MACAddress;
//-->
</SCRIPT>
<title>无标题文档</title>
</head>

<body>
<SCRIPT language="JScript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for="foo">
window.alert("本机MAC地址为:" + m.toUpperCase());
</SCRIPT>
</body>
</html>
hr01071008 2007-11-02
  • 打赏
  • 举报
回复
谢谢,我研究一下啊.谢谢.
luck0235 2007-11-02
  • 打赏
  • 举报
回复
可以通过AxtiveX来获取,如下:
<!--
<OBJECT id="locator" classid="CLSID:76A64158-CB41-11D1-8B02-00600806D9B6" VIEWASTEXT></OBJECT>
<OBJECT id="foo" classid="CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223"></OBJECT>
<SCRIPT language="JScript">
var service = locator.ConnectServer();
var m;
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
</SCRIPT>
<SCRIPT language="JScript" event="OnObjectReady(objObject,objAsyncContext)" for="foo">
if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
m = objObject.MACAddress;
</SCRIPT>

-->

<input type="hidden" name="hM" id="hM" />
<SCRIPT language="JScript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for="foo">
document.forms[0].hM.value = escape(m.toUpperCase());
</SCRIPT>
honey52570 2007-11-02
  • 打赏
  • 举报
回复
接分

谢谢
jennydin 2007-11-02
  • 打赏
  • 举报
回复
[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);


记得引用这2个非托管的dll
jennydin 2007-11-02
  • 打赏
  • 举报
回复
送给楼主

我以前用到过。

如果你是局域网用户,那么CSDN获取到的是你网关,也就是出口的地址,如果都是在内网,那么得到的是真的MAC地址

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.InteropServices;

public partial class Empolder_ShowCilentMacid : 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);
}


}


}
hr01071008 2007-11-02
  • 打赏
  • 举报
回复
这样啊,如果是局域网上,那又如何能取得呢?
fellowcheng 2007-11-02
  • 打赏
  • 举报
回复
如果是局域网连,可以通过对方的IP地址通过ARP解析找到MAC
如果是广域网或跨网断,除非对方把地址放在IP报文里发给你,
否则就别想,收到的也是网关的MAC
加载更多回复(1)

62,074

社区成员

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

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

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

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