2012-01-30 37 views
4

我想获得用户的IP和使用寿在table.I'm插入如下:得到用户的IP

SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,'1',@ip)", con); 
cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]); 
cmd.Parameters.AddWithValue("@raspuns", textbox1.Text); 
cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime()); 
cmd.Parameters.AddWithValue("@ip", HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]); 

但是,当我在表中列一下IP I只得到1 ...你能给我一个解释吗?

+0

可能重复的[客户端IP地址](http://stackoverflow.com/questions/3003242/client-ip-address) – 2012-01-30 09:05:53

+0

Windows窗体? WCF?的WebForms? ... 什么? – balexandre 2012-01-30 09:06:10

+3

您安装了IPv6,并且从同一台机器本地访问Web服务器,因此地址以“:: 1”形式出现? – GSerg 2012-01-30 09:06:48

回答

7

你可以使用:

string ipAddress = Request.UserHostAddress; 
5

您的程序可能运行正常。 :: 1是IPv6中的本地IP地址。如果您在Windows Vista或更高版本上从本地计算机上运行此操作,则一切正常。

这是一个更好的方式来攫取虽然用户的IP地址:如果用户的背后是某种类型的代理,那么你将获得代理服务器地址,而不是最终用户的IP地址

string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
if (string.IsNullOrEmpty(ip)) 
{ 
    ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
} 

HTTP_X_FORWARDED_FOR通常是用户的真实IP地址。如果这是空的,那么你应该在REMOTE_ADDR

+0

如果假设其他计算机上的其他人将访问我的应用程序,它会得到他的IP? – user1147188 2012-01-30 09:12:40

+1

是的。这是正确的。 – Mark 2012-01-30 09:13:54