0

我在 ASP.NET 中有一个简单的网站,我在其中加载了一个 DLL。我已经通过 IIS 发布了站点,我只想在用户端显示他的机器名称、登录用户和 IP。我尝试了以下方法:

我的 DLL:

namespace ClassLibrary1
  {
    public class Class1
    {
      public string getInfo()
      {
        IPAddress[] ips;

        ips = Dns.GetHostAddresses(Dns.GetHostName());

        string returns = null;

    returns = Environment.MachineName + Convert.ToChar(9) + Environment.UserName;
        foreach (IPAddress ip in ips)
        {
          if (ip.AddressFamily == AddressFamily.InterNetwork)
          returns += Convert.ToChar(9) + ip.ToString();
        }
        return returns;

    }
  }
}

在网站上:

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ClassLibrary1.Class1 cl = new ClassLibrary1.Class1();
        Label2.Text = cl.getInfo();
    }
}

输出不是我所期望的。在我的机器上,当我访问该站点时,我得到

MyMachineName    Classic .NET AppPool    MyIp

当其他人打开它时,他们也会得到这些信息,而不是他们的机器名、登录用户和 IP。

所以我的问题是如何检索他们的信息?

提前致谢。

4

1 回答 1

4

您正在从为网站提供服务的机器中提取统计信息,而不是访问者的机器。您可能应该看一下。HttpRequest.ServerVariables NameValueCollection

其中一些“变量”,尤其是您感兴趣的那些,是从来自客户端的每个 Web 请求的标头中派生的。请记住,您实际上并没有与客户端的机器交谈这些是从客户端发送给您的。因此,不能保证它们是准确的(代理等),如果它们甚至存在的话。

也就是说,您可能感兴趣的是:

var ip =      HttpRequest.ServerVariables["REMOTE_ADDR"];
var user =    HttpRequest.ServerVariables["REMOTE_USER"]; // Windows auth
var user =    HttpRequest.ServerVariables["LOGON_USER"];  // Non-Windows auth
var machine = HttpRequest.ServerVariables["REMOTE_HOST"];

这是可供选择的变量列表。

于 2013-10-30T18:02:46.573 回答