C#网络接口在开发服务器上不起作用



我正在尝试使用c#Web API获取客户端的唯一机器地址。我使用网络接口来获取MAC地址,同时在本地服务器上运行下面的代码,它运行得很好。但当我在开发服务器上部署它时,我得到了一些奇怪的相同地址。

下面是我用来获取MAC地址的代码。

public string GetMacAddress()
{
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
String macAddress = string.Empty;
foreach (NetworkInterface adapter in nics)
{
if (macAddress == String.Empty)  
{
IPInterfaceProperties properties = adapter.GetIPProperties();
macAddress = adapter.GetPhysicalAddress().ToString();
}
}
return macAddress;

}

注意:如果有任何可能的方法来唯一地识别用户机器。

您的代码返回您的自己的NIC MAC地址。

您无法检索连接到您的客户端的mac地址。MAC是OSI方案中的第二层地址。路由器剥离源和目标mac地址,并将其替换为自己的mac作为源,下一个网络跃点作为目标。您应该使用IP地址(第3层)。

如果你使用套接字,你可以使用这个方法:如何使用套接字编程c#获得客户端IP

如果你使用asp.net网络服务器,你可以使用这个Request.UserHostAddress

两者都将返回ISP指定的客户端的公共ip地址。此IP地址经常在夜间或路由器重置时发生更改。

这将是与从同一本地网络连接的其他用户相同的IP地址。例如,如果一个家庭有2台电脑和3部手机通过wifi连接,它们都将共享相同的公共IP地址。要唯一标识每一个,您应该使用某种令牌,如cookie、sessionid和/或此处建议的身份验证:如何在ASP.NET应用程序中唯一标识客户端计算机?。(对于(asp.net)网络服务器)但是cookie可以被删除,然后下次必须被替换。虽然你可以用这种方式区分不同的用户,但你不能确定识别一个用户,因为他们可能有多个按时间(已删除和新的)或空间(不同的浏览器/设备同时有不同的有效cookie)分隔的cookie

另一种方法是随每个客户端一起发送一个唯一的证书,并手头有一个数据库来匹配它们。(用于网络应用)

这里讨论了获得唯一客户端标识符的其他方法:如何使用C#唯一识别计算机?在这里:获取C#中的唯一系统标识符。然而,它们确实依赖于你在客户端机器上执行代码,可能会被欺骗,不可靠,可能会随着时间的推移而改变,等等

简而言之:没有可靠而简单的方法,尤其是如果你不能像在web服务器场景中那样在客户端上执行代码。此外,您决定用作标识符的任何内容都可能随时间变化(新IP、新硬件、新浏览器版本、新操作系统等)、重复、在某些机器上不可靠或不可用(例如:仅限网络驱动器的客户端上的HD-GUID),和/或可能被欺骗(mac、请求标头等)。

这完全取决于你的需求,你有什么可用的,以及你想要的东西有多容易出错和安全

相关内容

最新更新