获取服务器的真实ip

前置条件

作者本人环境配置

1.无

getHeader方法基本用法

系统。出去。println( ' rotocol : '请求。GetProtocol());

系统。出去。println( ' Scheme : '请求。GetScheme());

System.out.println( '服务器名称: '请求。getServerName());

System.out.println( '服务器端口: '请求。getServerPort());

系统。出去。println( ' rotocol : '请求。GetProtocol());

System.out.println( '服务器信息: ' GetServletConfig().getServletContext().getServerInfo());

系统。出去。println( ' Remote Addr : '请求。getRemoteAddr());

系统。出去。println( '远程主机: '请求。getRemoteHost());

系统。出去。println( '字符编码: '请求。GetCharacter编码());

System.out.println( '内容长度: '请求。getContentLength());

系统。出去。println( '内容类型: '请求。getContentType());

系统。出去。println( '验证类型: '请求。getAuthType());

系统。出去。println( ' HTTP方法: '请求。GetMethod());

系统。出去。println( '路径信息: '请求。getPathInfo());

系统。出去。println( ' ath trans : '请求。getPathTranslated());

系统。出去。println( '查询字符串: '请求。getqueryString());

系统。出去。println( '远程用户: '请求。getRemoteUser());

系统。出去。println( '会话Id : '请求。GetRequestedSessionId());

系统。出去。println( '请求URI : '请求。getRequesturi());

System.out.println('Servlet路径: '请求。GetServletPath());

系统。出去。println( '接受: '请求。GetHeader( ' Accept ');

System.out.println('Host: '请求GetHeader( ' Host ');

系统。出去。println( ' Referer : '请求。GetHeader( ' Referer ');

系统输出。打印输入( '接受-语言: '请求。获取标题( '接受-语言 ');

系统。出去。println( '接受-编码: '请求GetHeader( '接受-编码 ');

系统退出。打印( '用户-代理: '请求。获取标题( '用户-代理 ');

系统。出去。println( '连接: '请求GetHeader( '连接 ');

系统。出去。println( ' Cookie : '请求GetHeader( ' Cookie ');

系统。出去。println( '已创建: '会话。GetCreatiOnTime());

获取真实ip

JSP里,获取客户端的知识产权地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了阿帕奇,纳吉等反向代理软件就不能获取到客户端的真实知识产权地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的知识产权地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实知识产权。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的知识产权,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-转发-为了信息。用以跟踪原有的客户端知识产权地址和原来客户端请求的服务器地址。

下面是获取真实ip的一种方法,可以参考

/**

*获取客户端ip

* @返回

*/

保护的字符串getIp() {

httperservletrequest请求=这个。GetRequest();

字符串知识产权=请求。GetHeader( ' x-转发-for ');

if (ip==null || ip.length()==0 || '未知 ' .equalsIgnoreCase(ip)) {

ip=请求getHeader( '代理-客户端-IP ');

}

if (ip==null || ip.length()==0 || '未知 ' .equalsIgnoreCase(ip)) {

ip=请求GetHeader( ' WL-代理-客户端-IP ');

}

if (ip==null || ip.length()==0 || '未知 ' .equalsIgnoreCase(ip)) {

知识产权=请求。getRemoteAddr();

}

返回ip.trim().等于( ' 0:0:03:0:0:0:03:01 ')? ' 127。0 .0 .1 ' :知识产权;

}

其他总结

乱码的问题是,如果request.getHeader('Referer ')链接包含中文参数,乱码将在跳转时出现。字符串关键字=新字符串(字符串。此时需要getbytes (' iso-8859-1 '),' gbk '。到代码转换!但是,如果它不是通过请求链接的。也使用了getbytes (' iso-8859-1 '),' gbk '。对于编码转换,会有乱码。首先,我将使用STR。匹配( '[ U4E 00- U9F 5]')以判断该字符串中是否有中文。如果没有中文,如果是乱码、数字、英文或其他符号,我们将执行代码转换,如果是中文,我们将不执行代码转换。