读书人

c#获取客户端IP为何得到的值是服务器I

发布时间: 2012-06-19 14:45:20 作者: rapoo

c#获取客户端IP为何得到的值是服务器IP地址
1.string struserIP = System.Web.HttpContext.Current.Request.UserHostAddress
2. private string GetClientIP()
{
string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.UserHostAddress;
}
return result;
}
得到的数据是服务器内网的IP地址,为何?2种方式得到的值是一样。
哪位朋友知道,不胜感激。

[解决办法]
在哪测试的?
[解决办法]
result不是公有静态变量吧?
[解决办法]
Request.ServerVariables("Url")
返回服务器地址

Request.ServerVariables("Path_Info")
客户端提供的路径信息

Request.ServerVariables("Appl_Physical_Path")
与应用程序元数据库路径相应的物理路径

Request.ServerVariables("Path_Translated")
通过由虚拟至物理的映射后得到的路径

Request.ServerVariables("Script_Name")
执行脚本的名称

Request.ServerVariables("Query_String")
查询字符串容

Request.ServerVariables("Http_Referer")
请求的字符串容

Request.ServerVariables("Server_Port")
接受请求的服务器端口号

Request.ServerVariables("Remote_Addr")
发出请求的远程主机的IP地址

Request.ServerVariables("Remote_Host")
发出请求的远程主机名称

Request.ServerVariables("Local_Addr")
返回接受请求的服务器地址

Request.ServerVariables("Http_Host")
返回服务器地址

Request.ServerVariables("Server_Name")
服务器的主机名、DNS地址或IP地址

Request.ServerVariables("Request_Method")
提出请求的方法比如GET、HEAD、POST等等

Request.ServerVariables("Server_Port_Secure")
如果接受请求的服务器端口为安全端口时,则为1,否则为0

Request.ServerVariables("Server_Protocol")
服务器使用的协议的名称和版本

Request.ServerVariables("Server_Software")
应答请求并运行网关的服务器软件的名称和版本

Request.ServerVariables("All_Http")
客户端发送的所有HTTP标头,前缀HTTP_

Request.ServerVariables("All_Raw")
客户端发送的所有HTTP标头,其结果和客户端发送时一样,没有前缀HTTP_

Request.ServerVariables("Appl_MD_Path")
应用程序的元数据库路径

Request.ServerVariables("Content_Length")
客户端发出容的长度

Request.ServerVariables("Https")
如果请求穿过安全通道(SSL),则返回ON如果请求来自非安全通道,则返回OFF

Request.ServerVariables("Instance_ID")
IIS实例的ID号

Request.ServerVariables("Instance_Meta_Path")
响应请求的IIS实例的元数据库路径

Request.ServerVariables("Http_Accept_Encoding")
返回容如:gzip,deflate

Request.ServerVariables("Http_Accept_Language")
返回容如:en-us

Request.ServerVariables("Http_Connection")
返回容:Keep-Alive

Request.ServerVariables("Http_Cookie")

Request.ServerVariables("Http_User_Agent")
返回容:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)

Request.ServerVariables("Https_Keysize")
安全套接字层连接关键字的位数,如128

Request.ServerVariables("Https_Secretkeysize")
服务器验证私人关键字的位数如1024

Request.ServerVariables("Https_Server_Issuer")
服务器证书的发行者字段

Request.ServerVariables("Https_Server_Subject")
服务器证书的主题字段

Request.ServerVariables("Auth_Password")
当使用基本验证模式时,客户在密码对话框中输入的密码



Request.ServerVariables("Auth_Type")
是用户访问受保护的脚本时,服务器用於检验用户的验证方法

Request.ServerVariables("Auth_User")
代证的用户名

Request.ServerVariables("Cert_Cookie")
唯一的客户证书ID号

Request.ServerVariables("Cert_Flag")
客户证书标,如有客户端证书,则bit0为0如果客户端证书验证无效,bit1被设置为1

Request.ServerVariables("Cert_Issuer")
用户证书中的发行者字段

Request.ServerVariables("Cert_Keysize")
安全套接字层连接关键字的位数,如128

Request.ServerVariables("Cert_Secretkeysize")
服务器验证私人关键字的位数如1024

Request.ServerVariables("Cert_Serialnumber")
客户证书的序列号字段

Request.ServerVariables("Cert_Server_Issuer")
服务器证书的发行者字段

Request.ServerVariables("Cert_Server_Subject")
服务器证书的主题字段

Request.ServerVariables("Cert_Subject")
客户端证书的主题字段

Request.ServerVariables("Content_Type")
客户发送的form容或HTTPPUT的数据类型



[解决办法]
你是在哪写的?context参数传递了吗?
[解决办法]
是不是写在类似label标签里的?显示就这样?你把代码再帖全些看看。
[解决办法]
看下iis的日志是否客户端也是这个地址
[解决办法]
我觉得你的获取IP如果是写在类里面的,页面调用该类时,至少要传递个HttpContext参数吧,因为在类中是捕获不到的。
[解决办法]

探讨
iis日志里记录的没有一个外网访问的记录,显示的是内网的IP地址。

C# code protected void btnSubmit_Click(object sender, EventArgs e)
{
string struserIP = System.Web.HttpContext.Current.Request.UserHostAddress;
string strUserName = this.txtUserName.Text.ToString();
string strPassWord = this.txtPassWord.Text.ToString();

LoginSys…

[解决办法]
楼主莫非是用的webservice,如果是这样,客户端请求可都是你的服务器在请求了。
[解决办法]
这需要转发服务支持HTTP_X_FORWARDED_FOR
[解决办法]
帮你顶

读书人网 >C#

热点推荐