request 获取访问IP

来源:互联网 发布:我的世界手机版js制作 编辑:程序博客网 时间:2024/06/06 00:08

转自:http://blog.csdn.net/leoz0802/article/details/6364565

0:0:0:0:0:0:0:1是ipv6的表现形式,对应ipv4来说相当于127.0.0.1,也就是本机

如果项目部署在本机win7系统,访问时是通过 localhost 来访问,

用java获取ip地址可能会出现该问题,这时获取的ip将是 0:0:0:0:0:0:0:1

 

要是机器在局域网中,访问时使用自己的ip访问,如 我的ip是 :192.168.123.156

访问url:http://192.168.123.156:8080/test

这时候请求会经过路由器转发,所以服务器获取的就是本机的局域网内ip,在java中获取的ip就是 192.168.123.156了

 

下面几个获取ip的方法:

public static String getIP(HttpServletRequest request) {String ip = request.getHeader("x-forwarded-for");if (!checkIP(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (!checkIP(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (!checkIP(ip)) {ip = request.getRemoteAddr();}return ip;}private static boolean checkIP(String ip) {if (ip == null || ip.length() == 0 || "unkown".equalsIgnoreCase(ip)|| ip.split(".").length != 4) {return false;}return true;}

可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?

    答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。如:

    X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100

    用户真实IP为: 192.168.1.110


原创粉丝点击