如何在ASP.NET/C#中获取客户端计算机名?

Sha*_*hin 12 c# asp.net

我有应用程序想要获取用户机器名称,在这里我可以检索,它在localhost中工作正常.

string clientPCName;
string[] computer_name = System.Net.Dns.GetHostEntry(
Request.ServerVariables["remote_host"]).HostName.Split(new Char[] { '.' });
clientPCName = computer_name[0].ToString(); 
Run Code Online (Sandbox Code Playgroud)

在本地,它返回我的计算机名称.
但是在服务器上我得到的结果如下:0x57364794
任何解决方案?

Ahm*_*med 14

试试这个对我有用

string clientMachineName;
clientMachineName = (Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName);
Response.Write(clientMachineName);
Run Code Online (Sandbox Code Playgroud)

  • 这是相同的,在本地工作但在服务器返回这行代码:0x57364794.boanxx22.dynamic.dsl ..... (2认同)

blo*_*art 9

机器名称仅是本地网络的概念,也是本地AD网络/森林的概念.一旦您在互联网上公开您的网站机器名称不再有意义,而是获得DNS名称.

因此,例如,在我的工作网络上,我的笔记本电脑名称解析为bdorrans01.redmond.contoso.com.但如果我从家里浏览一个网站,我当前的IP地址解析为c-98-203-143-14.hsd1.wa.comcast.net.

您正在使用FQDN并在第一段/完全停止后丢弃所有内容.这适用于AD环境(有点),你的代码会在内部看到bdorrans01,但它会在外部看到c-98-203-143-14.

即使在多森林AD内部,如果您的网站托管在另一个森林中也是错误的,例如,如果您的网站位于example.europe.contoso.com上,您的代码将获得机器名称bdorrans01,但我的机器不会在同一个林中,如果你试图ping它,或者映射到网络驱动器,它将无法找到,因为你会在europe.contoso.com中寻找bdorrans01,而不是redmond.contoso. com实际上是哪里.

此外,您的代码假定解析一个IP地址将产生一个完全合格的域名,在很多情况下都不是这样,您可以只返回一个IP地址,所以您可能会看到1.2.3.4并且您的代码会给出一个机器名称1.更糟糕的是它对IPv6地址没有任何作用,因为它们使用冒号分隔,2001:db8:85a3:8d3:1319:8a2e:370:7348

所以你的前提是不正确的 - 你需要找到一种不同的方式去做你想做的事情.为什么你认为你还需要机器名?

  • 两者都不适用于您想要做的事情。多个用户可能通过代理而来 - 因此您最终只会允许该代理背后的第一个人投票。如果不在客户端上运行代码,您就无法访问实际的机器名称,即使这样,常见的插件(例如 flash)也无法访问足够的机器详细信息来帮助您。 (2认同)