0

我正在开发一个 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;
}

没有错误,但我总是得到一个空地址。有谁知道如何解决这个问题?

4

3 回答 3

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 地址并将其发送到服务器。

于 2012-08-22T11:19:11.610 回答
1

您发布的代码将获得托管该站点的机器的 MAC 地址,而不是用户的 MAC 地址。除非您在他们的机器上运行了一些软件并将其报告给您,否则几乎不可能获得远程 MAC 地址。

如果做不到这一点,您可以考虑获取他们的公共 IP 地址并将其解析为 MAC。我过去曾这样做过(如何......我不记得了,那是在很久以前的“黑客”时代!)。正如我所说,这将获得公共 IP 地址(路由器、防火墙等)的 MAC 解析。

Internet 上某处有一个 IANA 分配的 MAC 地址列表,其中列出了已分配的 MAC 以及分配给哪家公司,这也可能对您有用。

从道德上讲,我认为获取用户的 MAC 地址并不是一个好主意,因为它是指向他们机器的唯一东西,而且只指向他们的机器!

于 2012-08-22T11:27:20.710 回答
0

我认为这可能是您的问题;

 if (nic.NetworkInterfaceType != NetworkInterfaceType.Ethernet) continue;

因为大多数当前连接将是

 NetworkInterfaceType.GigabitEthernet

只需将其包含在选择中

请参阅http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterfacetype.aspx

于 2012-08-22T11:19:59.153 回答