如何使用asp.net mvc获取客户端计算机名称?

4

我正在支持一个需要获取客户端计算机名称的系统,我尝试了不同的代码,但它们都只能获取主机服务器的计算机名称,而不能获取客户端计算机名称。以下是相关代码片段:

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

提前感谢您!


服务器和客户端浏览器是否在同一网络中? - Nitin Sawant
3个回答

5
不行,除非客户端在发送HTTP请求时发送了这些信息。这里的“客户端”指的是任何应用程序、浏览器等。您可以使用标准的浏览器开发工具检查自己的浏览器请求流程,并查看浏览器发送的确切信息。它不会包含您的机器名称(除非您的某些东西是这样的,那可能会有问题)。
话虽如此,HTTP头数据是您除了标准网络信息(例如IP地址,但也不能保证是客户端的IP地址——它可能是客户端的网络地址)之外所拥有的信息。如果存在的话,最接近的可能是hostname,即使是像IP地址一样,也不能保证是机器名称。
一个可能的例外是在内部网络(LAN)中。

谢谢您的回答。但是在我的情况下,我想获取客户端计算机名称并将其保存到数据库中,作为该计算机的ID,而不是IP地址,当登录系统时。用户无法登录系统,除非他们使用的机器/计算机已经被授权或注册到系统中。 - Bot
@Bot 除非你在一个受控环境(局域网)中,即你的网络中,所有客户端都在你的网络中,你可以控制所有客户端,如上所述,否则你是不能这样做的。你必须重新考虑你的授权方案。 - EdSF

1
你可以使用。
HttpContext.Request.UserHostAddress 

要获取IP地址,Request还有UserHostName属性,但我不确定这个属性是否可用。


-2
您可以按照以下方式获取计算机名称:
Environment.MachineName.ToString()

您可以按照以下方式获取托管服务器名称:
Server.MachineName.ToString()

一些托管服务器会阻止这些功能以避免泄露信息,例如IBM Bluemix服务器。 - slon
1
我尝试了这个,但是我得到的是主机服务器计算机名称而不是客户端。 - Bot
这不是OP所寻找的。 - EdSF
托管服务器。这取决于它托管在哪里。 - slon
OP正在寻求“客户端”,而非“服务器”。 - EdSF
显示剩余2条评论

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