精华内容
下载资源
问答
  • java 获取同一个网关下不同客户端的ip,得到的客户端的ip是网关的,得不到客户端的实际ip,如何处理?网络部署如图所示: [img]...
    java 获取同一个网关下不同客户端的ip,得到的客户端的ip都是网关的,得不到客户端的实际ip,如何处理?网络部署如图所示:

    [img]http://dl2.iteye.com/upload/attachment/0124/0845/5869167d-cc70-375c-8a67-6a1d37efef87.png[/img]

    [color=red][b]请问,没什么方法能正确获取到客户端的真实ip了嘛?[/b][/color]


    局域网 访问外网 都需要经过你的网关!所以你服务器上获取的IP 都一样!


    公司内网访问服务器时,服务器上request.getRemoteAddr只获取到公司的网关的ip,我要得到公司内网中不同客户端的不同ip
    一下地址也碰到过。
    http://www.iteye.com/problems/52039
    展开全文
  • 在没有网关或者反向代理软件情况下,java获取客户端ip地址方法request.getRemoteAddr() 先解释下http协议和TCP协议: 网页默认进行http连接了,http协议即超文本传送协议(Hypertext Transfer Protocol )...

    在没有网关或者反向代理软件情况下,java里获取客户端ip地址的方法是request.getRemoteAddr()

    先解释下http协议和TCP协议:

    网页默认是进行http连接了,http协议即超文本传送协议(Hypertext Transfer Protocol ),是工作TCP协议之上的协议
    tcp连接需要三次握手,也就是调用底层的socket进行连接确认。而socket连接需要知道通信双方的ip地址和端口才可以进行数据的正确传输。

    由上面可以知道request.getRemoteAddr()方法其实就是获取的连接的客户端socket的ip地址。

     

    但如果我们客户端将要发送接口请求先发送到一台代理请求服务器或者网关后,再由他们进行数据请求,

    这时我们使用上面的getRemoteAddr()方法获取到了ip地址就是代理请求服务器或网关的ip地址。

    而不是真实的客户端ip地址

    也就是说通过nginx等反向代理软件时,不能通过这个方法获取客户端真是ip地址。

     

     

    如真实ip:223.104.1.240 广东省广州市 移动
    访问域名www.zwh.com
    nginx所在服务器193.112.28.110
    这个域名和nginx所在服务器绑定,
    客户端访问时,如www.zwh.com/项目名/index.jsp
    这个访问了是nginx的80端口,然后nginx再将这个请求重定向到localhost:8080/项目名/index.jsp
    而nginx在将请求进行重定向时会在请求头header中增加一个x-forwarded-for信息,用以跟踪原有客户端ip地址和原来客户端请求的服务器地址
    存放的就是x-forwarded-for:223.104.1.240
     
    对应java方法来说,request.getRemoteAddr(),因为直接请求的客户端是nginx,在同一服务器上,所以这个方法获取到的ip地址是127.0.0.1或者193.112.28.110
    

     

     

    要获取真实ip地址就要使用request.getHeader("x-forwarded-for")获取请求头部真实ip地址

    ,但是当xxx.conf配置server节点时,forwarded_for设置为off,则X-Forwarded-For:unknown

    默认forwarded_for是on

     

    先看下nginx的部分配置

     

    location / {
                proxy_redirect off;
                proxy_pass  http://localhost:8080;
                proxy_set_header  Host $host;
                proxy_set_header   X-real-ip $remote_addr;
                proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            }

     

    继续使用上面数据

    这个$host 其实是nginx服务器本身的ip地址:193.112.28.110

     $remote_addr这个地址是想nginx请求的客户端地址:223.104.1.240

     $proxy_add_x_forwarded_for 这个变量和remote_addr的区别是

    proxy_add_x_forwarded_for会将经过的所有代理ip相加起来,

    remote_addr则只是获取到直接连接到nginx的ip地址

      在有多个代理服务器的情况下,会将代理服务器的X-Forwarded-For头部的ip地址和客户端的ip地址相加,
      即:X-Forwarded-For请求头部header的ip字符串  + 直接向nginx服务器发送请求的客户端地址
       换个表达请求的过程是client--->nginx1--->nginx2---->tomcat
      而假设client:ip1, nginx1:ip2, nginx2:ip3, tomcat:ip4
      那么请求request到tomcat时,
      请求头部header中的X-Forwarded-For信息是=ip1,ip2,ip3

     

    简单了方法

     

    public String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

     

    上面三个请求头,大部分的代理或者网关都会加上x-forwarded-for:clientip,proxy1ip,proxy2ip

    Proxy-Client-IP这个一般是apache,http服务器才会有,经过apache代理时,apache会在请求头加上x-forwarded-for和Proxy-Client-IP

    WL-Proxy-Client-IP这个一般是weblogic才会加上的头部

     

    注意:

     

    1、这些请求头都不是http协议里的标准请求头,也就是说这个是各个代理服务器自己规定的表示客户端地址的请求头。如果哪天有一个代理服务器软件用oooo-client-ip这个请求头代表客户端请求,那上面的代码就不行了。

    2、这些请求头不是代理服务器一定会带上的,网络上的很多匿名代理就没有这些请求头,所以获取到的客户端ip不一定是真实的客户端ip。代理服务器一般都可以自定义请求头设置。

    3、即使请求经过的代理都会按自己的规范附上代理请求头,上面的代码也不能确保获得的一定是客户端ip。不同的网络架构,判断请求头的顺序是不一样的。

    4、最重要的一点,请求头都是可以伪造的。如果一些对客户端校验较严格的应用(比如投票)要获取客户端ip,应该直接使用ip = request.getRemoteAddr (),虽然获取到的可能是代理的ip而不是客户端的ip,但这个获取到的ip基本上是不可能伪造的,也就杜绝了刷票的可能。(有分析说arp欺骗+syn有可能伪造此ip,如果真的可以,这是所有基于TCP协议都存在的漏洞),这个ip是tcp连接里的ip。
    链接

     

    ip工具类

     

    import javax.servlet.http.HttpServletRequest;
    /**
    * IP地址工具类
    * @author xudongdong
    *
    */
    public class IpUtil {
        
        /**
         * 私有化构造器
         */
        private IpUtil() {
        }
        /**
         * 获取真实IP地址
         * <p>使用getRealIP代替该方法</p>
         * @param request req
         * @return ip
         */
        @Deprecated
        public static String getClinetIpByReq(HttpServletRequest request) {
            // 获取客户端ip地址
            String clientIp = request.getHeader("x-forwarded-for");
            if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
                clientIp = request.getHeader("Proxy-Client-IP");
            }
            if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
                clientIp = request.getHeader("WL-Proxy-Client-IP");
            }
            if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
                clientIp = request.getRemoteAddr();
            }
            /*
             * 对于获取到多ip的情况下,找到公网ip.
             */
            String sIP = null;
            if (clientIp != null && !clientIp.contains("unknown") && clientIp.indexOf(",") > 0) {
                String[] ipsz = clientIp.split(",");
                for (String anIpsz : ipsz) {
                    if (!isInnerIP(anIpsz.trim())) {
                        sIP = anIpsz.trim();
                        break;
                    }
                }
                /*
                 * 如果多ip都是内网ip,则取第一个ip.
                 */
                if (null == sIP) {
                    sIP = ipsz[0].trim();
                }
                clientIp = sIP;
            }
            if (clientIp != null && clientIp.contains("unknown")){
                clientIp =clientIp.replaceAll("unknown,", "");
                clientIp = clientIp.trim();
            }
            if ("".equals(clientIp) || null == clientIp){
                clientIp = "127.0.0.1";
            }
            return clientIp;
        }
        
        /**
         * 判断IP是否是内网地址
         * @param ipAddress ip地址
         * @return 是否是内网地址
         */
        public static boolean isInnerIP(String ipAddress) {
            boolean isInnerIp;
            long ipNum = getIpNum(ipAddress);
            /**   
            私有IP:A类  10.0.0.0-10.255.255.255   
                   B类  172.16.0.0-172.31.255.255   
                   C类  192.168.0.0-192.168.255.255   
            当然,还有127这个网段是环回地址   
            **/
            long aBegin = getIpNum("10.0.0.0");
            long aEnd = getIpNum("10.255.255.255");
            
            long bBegin = getIpNum("172.16.0.0");
            long bEnd = getIpNum("172.31.255.255");
            
            long cBegin = getIpNum("192.168.0.0");
            long cEnd = getIpNum("192.168.255.255");
            isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd)
                    || ipAddress.equals("127.0.0.1");
            return isInnerIp;
        }
        private static long getIpNum(String ipAddress) {
            String[] ip = ipAddress.split("\\.");
            long a = Integer.parseInt(ip[0]);
            long b = Integer.parseInt(ip[1]);
            long c = Integer.parseInt(ip[2]);
            long d = Integer.parseInt(ip[3]);
            return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
        }
        
        private static boolean isInner(long userIp, long begin, long end) {
            return (userIp >= begin) && (userIp <= end);
        }
        public static String getRealIP(HttpServletRequest request){
            // 获取客户端ip地址
            String clientIp = request.getHeader("x-forwarded-for");
            if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
                clientIp = request.getRemoteAddr();
            }
            String[] clientIps = clientIp.split(",");
            if(clientIps.length <= 1) return clientIp.trim();
            // 判断是否来自CDN
            if(isComefromCDN(request)){
                if(clientIps.length>=2) return clientIps[clientIps.length-2].trim();
            }
            return clientIps[clientIps.length-1].trim();
        }
        private static boolean isComefromCDN(HttpServletRequest request) {
            String host = request.getHeader("host");
            return host.contains("www.189.cn") ||host.contains("shouji.189.cn") || host.contains(
                    "image2.chinatelecom-ec.com") || host.contains(
                    "image1.chinatelecom-ec.com");
        }
    }

     

    展开全文
  • 在没有网关或者反向代理软件情况下,java获取客户端ip地址方法request.getRemoteAddr() 先解释下http协议和TCP协议: 网页默认进行http连接了,http协议即超文本传送协议(Hypertext Transfer Protocol...
    在没有网关或者反向代理软件情况下,java里获取客户端ip地址的方法是request.getRemoteAddr()
    先解释下http协议和TCP协议:
    网页默认是进行http连接了,http协议即超文本传送协议(Hypertext Transfer Protocol ),是工作TCP协议之上的协议
    tcp连接需要三次握手,也就是调用底层的socket进行连接确认。而socket连接需要知道通信双方的ip地址和端口才可以进行数据的正确传输。
    由上面可以知道request.getRemoteAddr()方法其实就是获取的连接的客户端socket的ip地址。
     
    但如果我们客户端将要发送接口请求先发送到一台代理请求服务器或者网关后,再由他们进行数据请求,
    这时我们使用上面的getRemoteAddr()方法获取到了ip地址就是代理请求服务器或网关的ip地址。
    而不是真实的客户端ip地址
    也就是说通过nginx等反向代理软件时,不能通过这个方法获取客户端真是ip地址。
     
    如真实ip:223.104.1.240 广东省广州市 移动
    访问域名www.zwh.com
    nginx所在服务器193.112.28.110
    这个域名和nginx所在服务器绑定,
    客户端访问时,如www.zwh.com/项目名/index.jsp
    这个访问了是nginx的80端口,然后nginx再将这个请求重定向到localhost:8080/项目名/index.jsp
    而nginx在将请求进行重定向时会在请求头header中增加一个x-forwarded-for信息,用以跟踪原有客户端ip地址和原来客户端请求的服务器地址
    存放的就是x-forwarded-for223.104.1.240
     
    对应java方法来说,request.getRemoteAddr(),因为直接请求的客户端是nginx,在同一服务器上,所以这个方法获取到的ip地址是127.0.0.1或者193.112.28.110

     

     
    要获取真实ip地址就要使用request.getHeader("x-forwarded-for")获取请求头部真实ip地址
    ,但是当xxx.conf配置server节点时,forwarded_for设置为off,则X-Forwarded-For:unknown
    默认forwarded_for是on
     
    先看下nginx的部分配置
    location / {
                proxy_redirect off;
                proxy_pass  http://localhost:8080;
                proxy_set_header  Host $host;
                proxy_set_header   X-real-ip $remote_addr;
                proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            }

    继续使用上面数据

    这个$host 其实是nginx服务器本身的ip地址:193.112.28.110
     $remote_addr这个地址是想nginx请求的客户端地址:223.104.1.240
     $proxy_add_x_forwarded_for 这个变量和remote_addr的区别是
    proxy_add_x_forwarded_for会将经过的所有代理ip相加起来,
    remote_addr则只是获取到直接连接到nginx的ip地址
      在有多个代理服务器的情况下,会将代理服务器的X-Forwarded-For头部的ip地址和客户端的ip地址相加,
      即:X-Forwarded-For请求头部header的ip字符串  + 直接向nginx服务器发送请求的客户端地址
       换个表达请求的过程是client--->nginx1--->nginx2---->tomcat
      而假设client:ip1, nginx1:ip2, nginx2:ip3, tomcat:ip4
      那么请求request到tomcat时,
      请求头部header中的X-Forwarded-For信息是=ip1,ip2,ip3

     

    简单了方法

    public String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

    上面三个请求头,大部分的代理或者网关都会加上x-forwarded-for:clientip,proxy1ip,proxy2ip

    Proxy-Client-IP这个一般是apache,http服务器才会有,经过apache代理时,apache会在请求头加上x-forwarded-for和Proxy-Client-IP

    WL-Proxy-Client-IP这个一般是weblogic才会加上的头部

     

    注意:

     

    1、这些请求头都不是http协议里的标准请求头,也就是说这个是各个代理服务器自己规定的表示客户端地址的请求头。如果哪天有一个代理服务器软件用oooo-client-ip这个请求头代表客户端请求,那上面的代码就不行了。

    2、这些请求头不是代理服务器一定会带上的,网络上的很多匿名代理就没有这些请求头,所以获取到的客户端ip不一定是真实的客户端ip。代理服务器一般都可以自定义请求头设置。

    3、即使请求经过的代理都会按自己的规范附上代理请求头,上面的代码也不能确保获得的一定是客户端ip。不同的网络架构,判断请求头的顺序是不一样的。

    4、最重要的一点,请求头都是可以伪造的。如果一些对客户端校验较严格的应用(比如投票)要获取客户端ip,应该直接使用ip = request.getRemoteAddr (),虽然获取到的可能是代理的ip而不是客户端的ip,但这个获取到的ip基本上是不可能伪造的,也就杜绝了刷票的可能。(有分析说arp欺骗+syn有可能伪造此ip,如果真的可以,这是所有基于TCP协议都存在的漏洞),这个ip是tcp连接里的ip。
    链接

     

    ip工具类

    import javax.servlet.http.HttpServletRequest;
    /**
    * IP地址工具类
    * @author xudongdong
    *
    */
    public class IpUtil {
        
        /**
         * 私有化构造器
         */
        private IpUtil() {
        }
        /**
         * 获取真实IP地址
         * <p>使用getRealIP代替该方法</p>
         * @param request req
         * @return ip
         */
        @Deprecated
        public static String getClinetIpByReq(HttpServletRequest request) {
            // 获取客户端ip地址
            String clientIp = request.getHeader("x-forwarded-for");
            if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
                clientIp = request.getHeader("Proxy-Client-IP");
            }
            if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
                clientIp = request.getHeader("WL-Proxy-Client-IP");
            }
            if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
                clientIp = request.getRemoteAddr();
            }
            /*
             * 对于获取到多ip的情况下,找到公网ip.
             */
            String sIP = null;
            if (clientIp != null && !clientIp.contains("unknown") && clientIp.indexOf(",") > 0) {
                String[] ipsz = clientIp.split(",");
                for (String anIpsz : ipsz) {
                    if (!isInnerIP(anIpsz.trim())) {
                        sIP = anIpsz.trim();
                        break;
                    }
                }
                /*
                 * 如果多ip都是内网ip,则取第一个ip.
                 */
                if (null == sIP) {
                    sIP = ipsz[0].trim();
                }
                clientIp = sIP;
            }
            if (clientIp != null && clientIp.contains("unknown")){
                clientIp =clientIp.replaceAll("unknown,", "");
                clientIp = clientIp.trim();
            }
            if ("".equals(clientIp) || null == clientIp){
                clientIp = "127.0.0.1";
            }
            return clientIp;
        }
        
        /**
         * 判断IP是否是内网地址
         * @param ipAddress ip地址
         * @return 是否是内网地址
         */
        public static boolean isInnerIP(String ipAddress) {
            boolean isInnerIp;
            long ipNum = getIpNum(ipAddress);
            /**   
            私有IP:A类  10.0.0.0-10.255.255.255   
                   B类  172.16.0.0-172.31.255.255   
                   C类  192.168.0.0-192.168.255.255   
            当然,还有127这个网段是环回地址   
            **/
            long aBegin = getIpNum("10.0.0.0");
            long aEnd = getIpNum("10.255.255.255");
            
            long bBegin = getIpNum("172.16.0.0");
            long bEnd = getIpNum("172.31.255.255");
            
            long cBegin = getIpNum("192.168.0.0");
            long cEnd = getIpNum("192.168.255.255");
            isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd)
                    || ipAddress.equals("127.0.0.1");
            return isInnerIp;
        }
        private static long getIpNum(String ipAddress) {
            String[] ip = ipAddress.split("\\.");
            long a = Integer.parseInt(ip[0]);
            long b = Integer.parseInt(ip[1]);
            long c = Integer.parseInt(ip[2]);
            long d = Integer.parseInt(ip[3]);
            return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
        }
        
        private static boolean isInner(long userIp, long begin, long end) {
            return (userIp >= begin) && (userIp <= end);
        }
        public static String getRealIP(HttpServletRequest request){
            // 获取客户端ip地址
            String clientIp = request.getHeader("x-forwarded-for");
            if (clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {
                clientIp = request.getRemoteAddr();
            }
            String[] clientIps = clientIp.split(",");
            if(clientIps.length <= 1) return clientIp.trim();
            // 判断是否来自CDN
            if(isComefromCDN(request)){
                if(clientIps.length>=2) return clientIps[clientIps.length-2].trim();
            }
            return clientIps[clientIps.length-1].trim();
        }
        private static boolean isComefromCDN(HttpServletRequest request) {
            String host = request.getHeader("host");
            return host.contains("www.189.cn") ||host.contains("shouji.189.cn") || host.contains(
                    "image2.chinatelecom-ec.com") || host.contains(
                    "image1.chinatelecom-ec.com");
        }
    }

     

     

    转载于:https://www.cnblogs.com/gne-hwz/p/9922301.html

    展开全文
  • Java中,我想找到与所使用接口相对应的java.net.NetworkInterface到达默认网关.接口名称等不是提前知道.换句话说,如果以下路由表,我希望接口对应“bond0”:$netstat -rKernel IP routing table...

    Java中,我想找到与所使用的接口相对应的java.net.NetworkInterface到达默认网关.接口的名称等不是提前知道的.

    换句话说,如果以下是我的路由表,我希望接口对应“bond0”:

    $netstat -r

    Kernel IP routing table

    Destination Gateway Genmask Flags MSS Window irtt Iface

    10.10.10.0 * 255.255.255.0 U 0 0 0 bond0

    10.10.11.0 * 255.255.255.0 U 0 0 0 eth2

    10.10.11.0 * 255.255.255.0 U 0 0 0 eth3

    10.10.12.0 * 255.255.255.0 U 0 0 0 eth4

    10.10.13.0 * 255.255.255.0 U 0 0 0 eth5

    default mygateway 0.0.0.0 UG 0 0 0 bond0

    做了一些谷歌搜索后,我仍然没有找到任何答案.

    编辑:

    Java运行时必须“知道”如何获取此信息(而不是说它已暴露).当使用join(InetAddress grpAddr)调用(未指定接口)将java.net.MulticastSocket连接到多播组时,明显的行为似乎是在“默认”接口上加入(如上所述).即使默认intf不是路由表中列出的第一个接口,这也可以工作.但是,加入mcast组的基础POSIX调用需要此信息!:

    struct ip_mreqn group;

    group.imr_multiaddr = ...

    group.imr_address = **address of the interface!**

    setsockopty(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &group, sizeof(group));

    关键点:通过提供一种加入不需要intf的多播组的方法,java平台必须知道如何在每个平台上确定适当的intf.

    展开全文
  • java 获取客户端ip

    2016-09-27 11:15:39
    像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,...这种情况下,直接用request.getRemoteAddr()无法取到真正客户IP的。 实际iisforward附加头如下: WL-Proxy-Client-
  • Java 获取客户端IP

    2015-01-22 10:15:00
    像移动网关一样,iisforward这个...这种情况下,直接用request.getRemoteAddr()无法取到真正客户IP的。 实际iisforward附加头如下: WL-Proxy-Client-IP=211.161.1.239 Proxy-Client-IP=211.161.1...
  • 在JSP里,获取客户端的IP地址的方法:request.getRemoteAddr(),这种方法在大部分情况下都有效的。但是在通过了Apache,Squid等反向代理软件不能获取到客户端的真实IP地址了。像移动网关一样,iisforward这个...
  • Java获取客户端IP地址

    千次阅读 2013-11-16 13:36:16
    -- ...像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,附加一些...这种情况下,直接用request.getRemoteAddr()无法取到真正客户IP的。 实际iisforward附加头如下: WL-Pr
  • java spring获取请求ip地址

    千次阅读 2019-08-16 10:49:41
    洒家的需求 想根据客户端的请求获取ip地址,然后对ip请求加次数限制,客户端请求首先负载均衡(F5)转发到网关(Zuul),网关接收到请求后,从注册中心(Eureka)获取可用服务,在服务端获取请求的ip。 直接上方法...
  • 目前我们服务都全部docker化,网关zuul和各微服务都部署在docker里,构成了集群。 用户请求全部到HaProxy,由HaProxy转发到zuul,再由zuul分发给各微服务。 那么我们在做黑名单,或者对ip进行限流时,需要获取...
  • 一般情况下,java获取客户端IP地址的方法为request.getRemoteAddr();但这只是在没有网关或者代理的情况下,如果客户端将请求发送到nginx,再由...获取的IP地址,实际上nginx的IP地址,而不是真实的客户端IP地址。...
  • 在没有网关或者反向代理软件情况下,java获取客户端ip地址方法request.getRemoteAddr() 先解释下http协议和TCP协议: 网页默认进行http连接了,http协议即超文本传送协议(Hypertext Transfer Protocol ),...
  • 有这样一个需要求,公司这边做的是VIP 相当于网关,所有主机请求,先走它然后它负责转发,而我应该需要得到真实主机IP地址进行限制,去网上找了一段代码如下: public String getIpAddr(HttpServletRequest request...
  • Java获取客户端真实IP地址 文章分类:Java编程 像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,附加一些WLS要用头信息。这种情况下,直接用request.getRemoteAddr()无法...
  • 像移动网关一样,iisforward这个...这种情况下,直接用request.getRemoteAddr()无法取到真正客户IP的。 实际iisforward附加头如下: WL-Proxy-Client-IP=211.161.1.239 Proxy-Client-IP=211.161.1.239 X-Forw
  • ...    像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,附加...这种情况下,直接用request.getRemoteAddr()无法取到真正客户IP的。 实际iisforward附加头如下: WL-Proxy-Cli...
  • Java获取请求客户端真实IP地址

    千次阅读 2009-10-29 20:38:00
    像移动网关一样,iisforward这个ISAPI...这种情况下,直接用request.getRemoteAddr()无法取到真正客户IP的。实际iisforward附加头如下: WL-Proxy-Client-IP=211.161.1.239Proxy-Client-IP=211.161.1.239X-Forw
  • 使用 DhcpInfo 获取这些信息,返回的是一个int型数据,转换下得到想要信息,代码如下: [java] view plaincopyprint? public class MainActivity extends Activity {     ...
  • 标签:一个网卡(不太标准,应该叫做一个网络接口,一个网卡可以拥有多个网络接口,如SoftAP)拥有一套网络配置:ip地址,子网掩码,网关,dns等等。自java 1.6开始,提供了访问网络配置一些接口:java.net....
  • 发现传说1中办法也无法获取ip。才疏学浅对linux对网关啊网卡啊什么不了解,特此开喷。我特么只是想获取一个本机内外网IP,为什么就要这么纠结!!! InetAddress.getLocalHost().getHostAddress() 返回...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

java获取的ip是网关ip

java 订阅