【问题标题】:How to get clients computer name using asp.net mvc?如何使用 asp.net mvc 获取客户端计算机名称?
【发布时间】:2019-01-30 01:23:46
【问题描述】:

我支持需要获取客户端计算机名称的系统我尝试了不同的代码,但所有代码都只获取主机服务器的计算机名称,而不是客户端的计算机名称。这是sn-p:

 public void CreateEvents(string className, string eventName, string eventData, string userId)
    {
        string hostName = Dns.GetHostName(); // Retrive the Name of HOST  
        string compname= HttpContext.Current.Request.UserHostAddress;


        var browser = HttpContext.Current.Request.Browser.Browser + " " + HttpContext.Current.Request.Browser.Version;

        if (string.IsNullOrEmpty(userId))
        {
            userId = compname;
        }

        var entity = new EventLog
        {
            ClassName = className,
            EventName = eventName,
            EventData = eventData,
            IpAddress = ipAddress,
            Browser = browser,
            UserId = userId,
            CreatedDate = DateTime.Now
        };

        _db.EventLogs.Add(entity);
        _db.SaveChanges();
    }

    public string GetIpAddress()
    {
       HttpContext context = System.Web.HttpContext.Current;
        string compname=    context.Request.UserHostAddress; //System.Net.Dns.GetHostName();
        return compname;
    }

提前致谢!

【问题讨论】:

  • 服务器和客户端浏览器在同一个网络?

标签: c# asp.net-mvc


【解决方案1】:

不,您不能,除非客户端在发出 HTTP 请求时发送此类信息。 “客户端”指的是任何 - 一些应用程序、浏览器等。

您可以使用标准浏览器开发工具检查您自己的浏览器请求流,并查看确切您的浏览器发送的信息。它不会有您的机器名称(除非您的机器中有某些东西并且这可能是个问题)。

也就是说,HTTP Header data is what you have aside from standard network info 例如 IP 地址(也不能保证是客户端的 IP 地址 - 它可能是客户端的网络地址)。最接近您可以到达的是hostname(如果存在),即便如此,就像 IP 地址一样,不能保证是机器名称。

一个可能的例外是在内部网络 (LAN) 中。

【讨论】:

  • 感谢您的回答。但在我的情况下,我想获取客户端计算机名称并将其保存到数据库中,作为该机器的 ID,而不是登录系统时的 IP 地址。除非用户使用的机器/计算机获得授权或注册到系统,否则用户无法登录系统。
  • @Bot 除非您处于受控环境 (LAN) - 您的网络中,所有客户端都在您的网络中,您可以控制所有客户端,如上所述,您不能。您必须重新考虑您的授权方案。
【解决方案2】:

你可以使用

HttpContext.Request.UserHostAddress 

为了获取 IP 地址,Request 也有 UserHostName 但我不确定这个属性

【讨论】:

    【解决方案3】:

    您可以通过以下方式获取计算机名称:

    Environment.MachineName.ToString()
    

    您可以通过以下方式获取托管服务器名称:

    Server.MachineName.ToString()
    

    【讨论】:

    • 一些托管服务器阻止这些功能以不公开此信息,例如IBM Bluemix 服务器。
    • 我试试这个,但我得到的是主机服务计算机名称而不是客户端。
    • 这不是 OP 想要的。
    • 这就是它在我的项目上的工作方式,正如我之前所说,它取决于服务器。
    • 托管服务器。这取决于它的托管位置。
    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多