我在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。
所以我的问题是如何检索他们的信息?
提前致谢。
答案 0 :(得分: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"];