我正在研究ASP.NET MVC应用程序,我想获得用户的MAC地址。经过一番研究,我找到了这段代码:
string GetMacAddress()
{
string macAddresses = "";
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
if (nic.NetworkInterfaceType != NetworkInterfaceType.Ethernet)
continue;
if (nic.OperationalStatus == OperationalStatus.Up)
{
macAddresses += nic.GetPhysicalAddress().ToString();
break;
}
}
return macAddresses;
}
没有错误,但我总是得到一个空地址。有谁知道如何解决这个问题?
答案 0 :(得分:8)
我正在使用mvc .net应用程序,我想获取用户的mac地址。
你可以忘记它,这是不可能的。您只能获取正在浏览您网站的客户端的IP地址。
实际上有一种方法可以获得它。在您的视图中添加以下内容:
@using (Html.BeginForm())
{
@Html.Label("Mac", "Please enter your MAC address")
@Html.TextBox("Mac")
<button type="submit">OK</button>
}
并在相应的控制器操作中:
[HttpPost]
public ActionResult SomeAction(string mac)
{
// if the user was kind enough to provide you his MAC address
// you could read it from the mac argument
// Of course he could have entered any MAC address he likes and
// you have no way of verifying that
...
}
另一种可能性是开发一个ActiveX控件(只能在IE下工作),并且用户可以在他的浏览器中安装,该浏览器可以检索其NIC的MAC地址并将其发送到服务器。
答案 1 :(得分:1)
您发布的代码将获取托管该网站的计算机的MAC地址,而不是用户的MAC地址。获取远程MAC地址几乎是不可能的,除非您的计算机上运行了一些软件,并将其报告给您。
如果做不到这一点,你可以考虑获取他们的公共IP地址并将其解析为MAC。我过去做过这个(怎么......我记不起来了,很久以前就是我的“黑客”日子!)。正如我所说,这将获得公共IP地址(路由器,防火墙等)的MAC解析。
互联网上有一个IANA分配的MAC地址列表,其中列出了已分配的MAC以及可能对您有用的公司。
道德地说我认为将用户的MAC地址作为指向他们机器的唯一东西并且仅限他们的机器并不是一个好主意!
答案 2 :(得分:0)
我认为这可能是你的问题;
if (nic.NetworkInterfaceType != NetworkInterfaceType.Ethernet) continue;
因为大多数当前连接都是
NetworkInterfaceType.GigabitEthernet
只需将其包含在选择
中请参阅http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterfacetype.aspx