我该如何在C#和ASP.NET中获取客户机主机名、本地计算机名称和用户名?

5

我有IP地址,但出于某种原因,我无法正确解析名称以显示本地计算机名称。我尝试了几个方法,但它们都显示服务器主机名?

    ipadd = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    IPAddress myIP = IPAddress.Parse(ipadd);
    IPHostEntry GetIPHost = Dns.GetHostEntry(myIP);


    //userhostname = System.Environment.MachineName;
    //userhostname = Dns.GetHostName(); //Resolve ServerHostName not computer
    //userhostname = HttpContext.Current.Request.UserHostName;
    //userhostname = HttpContext.Current.Request.UserAgent;
    userhostname = GetIPHost.HostName;

我正在尝试使用用户名

nametext = WindowsIdentity.GetCurrent().Name;
//Shows server name when deployed on server 
//when debuging and running localy shows correctly current user logged in

//nametext = HttpContext.Current.Request.ServerVariables["LOGON_USER"]; 
// not returning anything

我更改了认证方式,但没有任何结果。

<authentication mode="Forms">
<authentication mode="Windows">

这是在互联网上运行还是在内部网络上运行?如果在Web上运行,由于安全原因,您可能无法访问主机名和Windows用户名等详细信息。我从未尝试过,但似乎这些内容可能受到保护或不可用。 - Localghost
这是在内部网络上。我认为问题出在 IIS 的身份验证模式上,我现在启用了匿名身份验证。我正在考虑使用 JavaScript 函数来检索这些信息。 - laspalmos
我相信你需要启用Windows身份验证才能使其正常工作。 - Localghost
我更喜欢使用匿名身份验证。看起来这似乎是不可能的。谢谢。 - laspalmos
2个回答

7

我尝试使用您建议的方法,但是我收到的数据与我的示例完全相同。我忘记查看匿名身份验证模式,但如果可能的话,我仍然希望在不更改它的情况下看到它。 - laspalmos
2
由于没有用户,您无法使用匿名身份验证获取用户名。 - jrummell
当我在VS的调试模式下尝试时,它会显示带有域名的用户。这是因为VS IIS服务器禁用了匿名身份验证吗?你知道我是否可以在JavaScript中实现吗?感谢你的帮助。 - laspalmos
请参考IIS Express Windows身份验证以获取有关VS和Windows身份验证的信息。 - jrummell
2
不,我不知道有没有一种方法可以从JavaScript中获取用户名(不使用使用服务器端代码访问User.Identity.Name的ajax)。请参见通过浏览器获取操作系统中已登录用户的用户名 - jrummell
这就是我一直在寻找但无法找到的解释。谢谢。 - laspalmos

0

我使用 System.Net 呈现客户端本地机器信息于我的 Intranet:

Dns.GetHostEntry(Request.UserHostAddress).HostName.ToString()

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