代码之家  ›  专栏  ›  技术社区  ›  Jimmy

确定客户端的计算机名

  •  34
  • Jimmy  · 技术社区  · 15 年前

    我正在构建一个基于计算机名显示不同列表的Intranet站点,因为不同的计算机位于不同的区域,是否有方法(在控制器或模型中)确定客户端的计算机名?

    我尝试过System.Environment.MachineName,但它只返回服务器的名称,还有其他想法吗?

    7 回复  |  直到 7 年前
        1
  •  45
  •   Aaron Hudon    7 年前

    我用以下方法使它工作:

    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();
    }
    
        2
  •  4
  •   hosein kardoost    10 年前

    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
  •  3
  •   Dmytrii Nagirniak    15 年前

    不可以。服务器上没有客户端的计算机名。这是HTTP请求响应的性质。您只能拥有其IP地址。

    解决方法可能是从Flash/Silverlight中检索客户机上的机器(我怀疑是javascript),并将其放入cookie中,该cookie在服务器上随每个请求提供。但是这种方法有一大堆问题。

        4
  •  1
  •   Matt Wrock    15 年前

    试试这个:

    string name = Request.UserHostName;
    
        5
  •  0
  •   David Andres    15 年前

    我知道的唯一检查客户机的方法是通过请求对象上的servervariables集合(应该对MVC代码可用)。

    http://www.4guysfromrolla.com/webtech/092298-3.shtml 更多信息。远程主机和远程地址看起来像候选。

        6
  •  0
  •   D'Arcy Rittich    15 年前

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

    • 当用户自己选择其位置时设置的cookie
    • 让用户登录到站点,这样您就可以以这种方式唯一地跟踪它们。
    • 按IP地址记住用户

    无法确保远程主机名是唯一的。同样的问题也发生在IP上,因为代理、动态IP等,但我认为它会更可靠一点。此外,您还可以通过IP地址进行地理定位。

        7
  •  -2
  •   p.campbell    15 年前

    这里有一个仅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>