2011-05-28 60 views
12

我有应用程序想要获取用户机器名称,在这里我可以检索,它在localhost中正常工作。如何获取ASP.NET/C#中的客户机名称?

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

在本地它正好返回我的电脑名称。
但在服务器上我得到这样的结果:0x57364794
任何解决方案?

回答

12

试试这个工作对我来说

string clientMachineName; 
clientMachineName = (Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName); 
Response.Write(clientMachineName); 
+1

这是一样的,在本地作品,但在服务器返回这一行代码:0x57364794.boanxx22.dynamic.dsl ..... – Shaahin 2011-05-28 10:51:22

+0

@ Ahmed它不工作 – 2014-04-11 13:13:00

+0

主机名称不是客户机名称 – 2017-07-02 05:16:20

8

机名称仅用于本地网络和本地广告网络/在那森林的概念。一旦您在互联网机器名称上暴露您的网站不再有意义,而是您获得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

因此,您的前提是不正确的 - 你需要找到一种不同的方式来做你想做的事情。无论如何,你为什么认为你需要机器名?

+0

谢谢blowdart,我从你的解释中获得信息,这是我尝试的其他选项的结果:0x57364794.boanxx22.dynamic.dsl.tele ....,你是对的,但我仍然不知道如何处理这个问题。 我有一个应用程序,用户可以投票给一个链接,这不是正常的投票,因为在我的表单上会有很多链接,所以它应该是动态的。我将选票保存在数据库中,然后通过投票排序链接。我想同时使用IP和PC名称,以防止用户投票两次或多次。 – Shaahin 2011-05-28 13:56:20

+1

既不会为你想要做的事情工作。多个用户可能通过代理服务器进行访问 - 因此您最终只会允许该代理服务器后面的第一位成员进行投票。如果不在客户端上运行代码,则无法访问实际的计算机名称,即使如此,常见的插件(如Flash)也无法访问足够的计算机详细信息以帮助您。 – blowdart 2011-05-28 14:25:29

0

一旦启用浏览器允许活动-X对象的创建,IE浏览器,你可以写下面的JavaScript代码来获取客户端计算机的名称为:

var WinNetwork = new ActiveXObject("WScript.Network"); 
var ComputerName = WinNetwork.ComputerName; 
3

由于@blowdark写道,这是不可能真正得到客户机名称和主机名称不是客户机名称。让我们看看你可以有什么要求吗?

  • 请求IP地址(TCP/IP)
  • HTTP头

这就是全部。 IP地址是由您的互联网提供商提供的IP,主机名称是Internet流量通过的某些提供商机器的名称。您甚至无法在互联网提供商网络中以简单的方式获取用户机器本地IP地址。

如果您的应用程序具有负载平衡器或代理,那么您需要读取HTTP_X_FORWARDED_FOR标头(默认情况下)以获取请求客户端IP。但它又是提供商IP。

所以,从请求IP你不能得到真正的客户机名称。在HTTP标头中,浏览器也不会传递机器名称。也许有一些黑客可以获取机器名称,要求提供商服务器,但那不在范围之内。

相关问题