【问题标题】:Determine Client's Computer Name确定客户的计算机名称
【发布时间】:2010-11-29 11:57:07
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    我使用以下方法让它工作:

    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();
    }
    

    【讨论】:

    • 请注意,如果客户端位于 NAT 之后,这不会给您预期的结果,但很可能这不是问题,因为您在“内部网”上。
    • 它就像一个魅力。但为了获得 IP,我必须做出一些小的改变。字符串 ip = HttpContext.Request.UserHostName.ToString();其余的工作都很棒.. +1
    • 嗯,它可能只能在局域网上工作,但不能在互联网上工作。
    • 我在 Dns.GetHostEntry(myIP) 上收到“no such host is known”这个错误,有什么解决办法吗?
    【解决方案2】:

    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 中。但是这种方法存在一大堆问题。

      【讨论】:

      • 有没有办法用 ip 查找计算机名称?
      • 您可以通过调用DNS服务器从其IP获取计算机名称
      【解决方案4】:

      我认为您最好使用以下方法之一将用户与某个位置联系起来:

      • 用户自行选择位置后设置的 cookie
      • 让用户登录网站,这样您就可以通过这种方式唯一地跟踪他们
      • 通过 IP 地址记住用户

      没有办法确保远程主机名是唯一的。由于代理、动态 IP 等,IP 也会出现同样的问题,但我认为它会更可靠一些。此外,您可以通过 IP 地址进行地理定位。

      【讨论】:

      • 我也有类似的需求,想知道用户是否在“特定”PC 上……我相信 cookie 可能是最好的选择。
      【解决方案5】:

      试试这个:

      string name = Request.UserHostName;
      

      【讨论】:

      • 无效,返回 Web 服务器的名称。与 System.Net 相同。
      【解决方案6】:

      我知道检查客户端的唯一方法是通过 Request 对象上的 ServerVariables 集合(应该可用于 MVC 代码)。

      请参阅http://www.4guysfromrolla.com/webtech/092298-3.shtml 了解更多信息。 REMOTE_HOST 和 REMOTE_ADDR 看起来像候选项。

      【讨论】:

        【解决方案7】:

        这是一个仅限 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>
        

        【讨论】:

          猜你喜欢
          • 2014-01-07
          • 1970-01-01
          • 2012-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多