确定客户端计算机名称

45

我正在构建一个内部网站,它将根据计算机名称显示不同的列表,因为不同的计算机位于不同的区域,是否有一种方法(在控制器或模型中)确定客户端的计算机名称?

我尝试了system.environment.machinename,但那只返回服务器的名称,还有其他的想法吗?

7个回答

54

我使用以下方式使其正常工作:

string IP = Request.UserHostName;
string compName = CompNameHelper.DetermineCompName(IP);

来自compnamehelper的代码:

public static string DetermineCompName(string IP)
{
    IPAddress myIP = IPAddress.Parse(IP);
    IPHostEntry GetIPHost = Dns.GetHostEntry(myIP);
    List<string> compName = GetIPHost.HostName.ToString().Split('.').ToList();
    return compName.First();
}

3
请注意,如果客户端在NAT后面,则此操作将无法产生预期结果,但很可能不是问题,因为您在“内部网络”上。 - Niklas
它像魔法一样运行良好。但是我需要进行小改动才能获取IP地址。字符串ip = HttpContext.Request.UserHostName.ToString(); 其余部分都非常出色... +1 - Vinnie
可能只能在局域网上运行,但不能在互联网上运行。 - Jamshaid K.
我在*Dns.GetHostEntry(myIP)*处遇到了“没有这样的主机已知”的错误,有什么解决办法吗? - Farzad Karimi

4

VB代码:

Dim myIP As IPAddress = IPAddress.Parse(Request.UserHostName)
    Dim GetIPHost As IPHostEntry = Dns.GetHostEntry(myIP)
    Dim compName As List(Of String) = GetIPHost.HostName.ToString.Split("").ToList

    return(compName.First)

3

不行。客户端计算机名称在服务器上无法以任何方式获取。这是http请求响应的本质。你只能获得它的IP地址。

一种解决方法可能是从Flash/Silverlight(我怀疑JavaScript)中检索客户端上的机器,并将其放入cookie中,该cookie可在每个请求中与服务器一起使用。但是,这种方法存在一整套问题。


1
有没有一种方法可以通过 IP 查找计算机名称? - Jimmy
通过向 DNS 服务器发出调用,您可以从其 IP 获取计算机名称。 - Mahesh Velaga

1

试试这个:

string name = Request.UserHostName;

没有起作用,返回了 Web 服务器的名称。System.Net 也是如此。 - Ken Mc

1

我认为你最好使用以下方法之一将用户与位置绑定:

  • 设置一个cookie,一旦用户自行选择了他们的位置
  • 让用户登录网站,以便您可以独特地跟踪他们
  • 通过IP地址记住用户

无法确保远程主机名是唯一的。由于代理、动态IP等问题,IP也存在相同的问题,但我认为这种方式会更可靠一些。另外,您可以使用IP地址进行地理定位。


我有一个类似的需求,需要知道用户是否在“特定”的电脑上...我相信cookie可能是最好的选择。 - Chris Catignani

0

-1

这里有一个仅适用于IE的解决方案。它可以在IE8中运行,但会出现多个安全警告。

<script type="text/javascript" language="javascript">
   var ax = new ActiveXObject("WScript.Network");
   document.write(ax.UserName + '<br />'); //logged in account name
   document.write(ax.ComputerName + '<br />'); //Windows PC name
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接