精华内容
下载资源
问答
  • java 获取IP地址 无法获取到真实的IP地址
    2021-09-02 11:43:09

    工具类:

    springboot 获取访问接口的请求的IP地址

    https://blog.csdn.net/qq_35387940/article/details/84391784


    问题:

    无法获取到真实IP地址 


     获取出来全是  192.xxx.xxx.xxx 开头 或者  172.xxx.xxx.xxx 开头 

    解决方案:

    nginx代理需要做一些配置(如果是微服务,直接在网关服务的nginx做配置即可)

    #得到请求真实IP

    proxy_set_header X-Real-IP $remote_addr;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;

    proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect default;

    更多相关内容
  • java获取ip地址示例

    2020-09-04 12:33:45
    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址
  • Java获取ip地址

    2021-04-15 14:58:03
    Java获取ip地址 package com.sinosoft.ireport; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util....

    Java获取ip地址

    package com.sinosoft.ireport;
    
    import java.net.InetAddress;
    import java.net.NetworkInterface;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    import java.util.Enumeration;
    import javax.servlet.http.HttpServletRequest;
    
    
    /**
     * @program: Report
     * @description: 获取IP地址
     * @author: XWJ
     * @create: 2021-04-14 21:03
     **/
    public class WebToolUtils {
    
        /**
         * 获取本地IP地址
         *
         * @throws SocketException
         */
        public static String getLocalIP() throws UnknownHostException, SocketException {
            if (isWindowsOS()) {
                return InetAddress.getLocalHost().getHostAddress();
            } else {
                return getLinuxLocalIp();
            }
        }
    
        /**
         * 判断操作系统是否是Windows
         *
         * @return
         */
        public static boolean isWindowsOS() {
            boolean isWindowsOS = false;
            String osName = System.getProperty("os.name");
            if (osName.toLowerCase().indexOf("windows") > -1) {
                isWindowsOS = true;
            }
            return isWindowsOS;
        }
    
        /**
         * 获取本地Host名称
         */
        public static String getLocalHostName() throws UnknownHostException {
            return InetAddress.getLocalHost().getHostName();
        }
    
        /**
         * 获取Linux下的IP地址
         *
         * @return IP地址
         * @throws SocketException
         */
        private static String getLinuxLocalIp() throws SocketException {
            String ip = "";
            try {
                for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                    NetworkInterface intf = en.nextElement();
                    String name = intf.getName();
                    if (!name.contains("docker") && !name.contains("lo")) {
                        for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                            InetAddress inetAddress = enumIpAddr.nextElement();
                            if (!inetAddress.isLoopbackAddress()) {
                                String ipaddress = inetAddress.getHostAddress().toString();
                                if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) {
                                    ip = ipaddress;
                                    System.out.println(ipaddress);
                                }
                            }
                        }
                    }
                }
            } catch (SocketException ex) {
                System.out.println("获取ip地址异常");
                ip = "127.0.0.1";
                ex.printStackTrace();
            }
            System.out.println("IP:" + ip);
            return ip;
        }
    
        /**
         * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,
         * <p>
         * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
         * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
         * <p>
         * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130,
         * 192.168.1.100
         * <p>
         * 用户真实IP为: 192.168.1.110
         *
         * @param request
         * @return
         */
        public static String getIpAddress(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.getHeader("HTTP_CLIENT_IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
            return ip;
        }
    
    }
    
    展开全文
  • 主要给大家介绍了关于利用java如何获取ip地址与网络接口的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • JAVA获取IP地址

    千次阅读 2021-11-11 11:38:42
    1、nginx 代理后客户端获取不到真实的ip需要nginx添加配置 location /api { proxy_pass http://127.0.0.1:8181/; #以下为新增 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #获取...

    1、nginx 代理后客户端获取不到真实的ip需要nginx添加配置

        location /api {
            proxy_pass http://127.0.0.1:8181/;
            #以下为新增
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;  #获取客户端真实IP
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

    添加配置后进行重启:进入nginx可执行目录sbin下,输入命令./nginx -s reload 即可

    2、搜集的各种获取IP地址的方法

    package com.sany.utils;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.text.SimpleDateFormat;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.sany.vo.IpVo;
    import org.apache.commons.lang3.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class IPUtils {
    
    
        private final static Logger logger = LoggerFactory.getLogger(IPUtils.class);
    
        public static String getVisitorIp(HttpServletRequest request){
            // 优先取 X-Real-IP
            String ip = request.getHeader("X-Real-IP");
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
                ip = request.getHeader("x-forwarded-for");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
                ip = request.getRemoteAddr();
                if ("0:0:0:0:0:0:0:1".equals(ip))
                {
                    ip = "unknown";
                }
            }
            if ("unknown".equalsIgnoreCase(ip)){
                ip = "unknown";
                return ip;
            }
            int index = ip.indexOf(',');
            if (index >= 0){
                ip = ip.substring(0, index);
            }
            return ip;
        }
    
        public static final String UN_KNOWN = "unknown";
        public static String getIp(HttpServletRequest request) {
            String ip = request.getHeader("X-Requested-For");
            if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) {
                ip = request.getHeader("X-Forwarded-For");
            }
            if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (StringUtils.isBlank(ip) || UN_KNOWN.equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
            return StringUtils.isBlank(ip) ? null : ip.split(",")[0];
        }
    
        /**
         * 获取用户真实IP地址,不使用request.getRemoteAddr()的原因是有可能用户使用了代理软件方式避免真实IP地址,
         * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值
         *
         * @return ip
         */
        public static String getIpAddrs(HttpServletRequest request) {
            String ip = request.getHeader("x-forwarded-for");
            System.out.println("x-forwarded-for ip: " + ip);
            logger.info("x-forwarded-for ip: {}" , ip);
            if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
                // 多次反向代理后会有多个ip值,第一个ip才是真实ip
                if( ip.indexOf(",")!=-1 ){
                    ip = ip.split(",")[0];
                }
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
                System.out.println("Proxy-Client-IP ip: " + ip);
                logger.info("Proxy-Client-IP ip: {}" , ip);
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
                logger.info("WL-Proxy-Client-IP ip: {} " , ip);
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
                logger.info("HTTP_CLIENT_IP ip: {} " ,ip);
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
                logger.info("HTTP_X_FORWARDED_FOR ip: {}" , ip);
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("X-Real-IP");
                logger.info("X-Real-IP ip: {}" , ip);
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
                logger.info("getRemoteAddr ip: {}" , ip);
            }
            logger.info("获取客户端ip:{} " ,ip);
            return ip;
        }
    
        /**
         * 获取访问者的ip地址
         * 注:要外网访问才能获取到外网地址,如果你在局域网甚至本机上访问,获得的是内网或者本机的ip
         */
        public static String getIpAddr(HttpServletRequest request) {
            String ipAddress = null;
            try {
                //X-Forwarded-For:Squid 服务代理
                String ipAddresses = request.getHeader("X-Forwarded-For");
    
                if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
                    //Proxy-Client-IP:apache 服务代理
                    ipAddresses = request.getHeader("Proxy-Client-IP");
                }
    
                if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
                    //WL-Proxy-Client-IP:weblogic 服务代理
                    ipAddresses = request.getHeader("WL-Proxy-Client-IP");
                }
    
                if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
                    //HTTP_CLIENT_IP:有些代理服务器
                    ipAddresses = request.getHeader("HTTP_CLIENT_IP");
                }
    
                if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
                    //X-Real-IP:nginx服务代理
                    ipAddresses = request.getHeader("X-Real-IP");
                }
    
                //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP
                if (ipAddresses != null && ipAddresses.length() != 0) {
                    ipAddress = ipAddresses.split(",")[0];
                }
    
                //还是不能获取到,最后再通过request.getRemoteAddr();获取
                if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
                    ipAddress = request.getRemoteAddr();
                }
            } catch (Exception e) {
                ipAddress = "";
            }
            return ipAddress;
        }
    
        /**
         * 调用太平洋网络IP地址查询Web接口(http://whois.pconline.com.cn/),返回ip、地理位置
         */
        public static IpVo getIpVo(String ip){
            //查本机
            String url = "http://whois.pconline.com.cn/ipJson.jsp?json=true";
    
            //查指定ip
            if(!StringUtils.isEmpty(ip)){
                url = "http://whois.pconline.com.cn/ipJson.jsp?json=true&ip=" + ip;
            }
    
            StringBuilder inputLine = new StringBuilder();
            String read;
            try {
                HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection();
                urlConnection.setRequestProperty("Charset", "GBK");
                BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "GBK"));
                while ((read = in.readLine()) != null) {
                    inputLine.append(read);
                }
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            //返回格式
            /*
            {
                ip: "58.63.47.115",
                pro: "广东省",
                proCode: "440000",
                city: "广州市",
                cityCode: "440100",
                region: "天河区",
                regionCode: "440106",
                addr: "广东省广州市天河区 电信",
                regionNames: "",
                err: ""
            }
             */
    
            IpVo ipVo = null;
            try {
                ObjectMapper mapper = new ObjectMapper();
                //当属性的值为空(null或者"")时,不进行序列化,可以减少数据传输
                mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
                //设置日期格式
                mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
                //转换成IpVo
                ipVo = mapper.readValue(new String(inputLine.toString().getBytes("GBK"), "GBK"), IpVo.class);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return ipVo;
        }
    
        /**
         * 直接根据访问者的Request,返回ip、地理位置
         */
        public static IpVo getIpVoByRequest(HttpServletRequest request){
            return IPUtils.getIpVo(IPUtils.getIpAddr(request));
        }
    
        /**
         * 获取客户端IP
         **/
        public static String getClientIp(HttpServletRequest request){
            if (request.getHeader("x-forwarded-for") == null){
                return request.getRemoteAddr();
            }
            return request.getHeader("x-forwarded-for");
        }
    
    
        /*
            终极大法:java获取不了,就用js来获取
            <!-- js获取客户ip -->
            <script src="http://whois.pconline.com.cn/ipJson.jsp"></script>
         */
    
        //测试
        public static void main(String[] args) {
            //获取本机ip
            System.out.println(getIpVo(null));
    
        }
    
    }

    展开全文
  • java获取ip地址返回国家、地区,城市名称,包含QQwry ip库
  • java获取IP地址的方法

    2021-02-12 23:49:31
    java获取IP地址的方法发布时间:2020-06-10 11:54:31来源:亿速云阅读:184作者:Leah这篇文章运用了实例代码展示java获取IP地址的方法,代码非常详细,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。...

    java获取IP地址的方法

    发布时间:2020-06-10 11:54:31

    来源:亿速云

    阅读:184

    作者:Leah

    这篇文章运用了实例代码展示java获取IP地址的方法,代码非常详细,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。/**

    * 通过HttpServletRequest返回IP地址

    *

    * @param request HttpServletRequest

    * @return ip String

    * @throws Exception

    */

    private static 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.getHeader("HTTP_CLIENT_IP");

    }

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getHeader("HTTP_X_FORWARDED_FOR");

    }

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getRemoteAddr();

    if (LOCAL_IP.equals(ip) || LOCAL_IP1.equals(ip)) {

    InetAddress inet = null;

    try {

    inet = InetAddress.getLocalHost();

    ip = inet.getHostAddress();

    } catch (UnknownHostException e) {

    e.printStackTrace();

    }

    }

    }

    return ip;

    }

    HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

    常用方法:

    getRequestURL方法返回客户端发出请求时的完整URL。

    getRequestURI方法返回请求行中的资源名部分。

    getQueryString 方法返回请求行中的参数部分。

    getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。

    getRemoteAddr方法返回发出请求的客户机的IP地址。

    getRemoteHost方法返回发出请求的客户机的完整主机名。

    getRemotePort方法返回客户机所使用的网络端口号。

    getLocalAddr方法返回WEB服务器的IP地址。

    getLocalName方法返回WEB服务器的主机名。

    看完上述内容,你们掌握java获取IP地址的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

    展开全文
  • 本篇文章主要介绍了JAVA如何获取客户端IP地址和MAC地址非常具有实用价值,这里整理了详细的代码,需要的朋友可以参考下
  • NULL 博文链接:https://fanshuyao.iteye.com/blog/2436489
  • 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件不能获取到客户端的真实IP地址了。像移动网关一样,iisforward这个...
  • java获取访问者的IP地址,适用于web开发。注意:如果是本地测试的话,通过localhost访问的时候ip显示为0:0:0:0:0:0:0:1,这代表的是本地,可以将localhost换成127.0.0.1时,显示的是当前访问的ip地址
  • 主要介绍了java根据ip地址获取详细地域信息的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 获取IP地址工具类-java

    2018-11-05 17:40:50
    java获取IP地址的工具类,使用时传入HttpServletRequest request类型的参数即可。使用例子 public static void logPageError(HttpServletRequest request){IpUtils.getIpAddr(request))}
  • 本文给大家汇总介绍了2种分别使用新浪和淘宝接口,实现根据IP地址获取详细的地理位置的代码,非常的实用,有需要的小伙伴可以参考下。
  • idea,java获取ip地址

    2018-03-22 17:01:41
    使用intellij idea java开发软件,通过servlet获取访问用户的真实ip地址
  • Java获取ip所在地区

    2018-08-01 09:10:53
    通过输入的ip地址,读取纯真ip数据库,获取IP地址所在地区
  • 本篇文章主要介绍了java获取当前服务器的Ip地址的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 在开发中我们经常需要获取用户IP地址,通过地址来实现一些功能,下面这篇文章主要给大家介绍了关于Java利用Request请求获取IP地址的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小...
  • 主要介绍了java实现根据ip地址获取地理位置的代码分享,本文中使用的是QQ在线接口,也可以使用新浪、淘宝等提供的在线接口,需要的朋友可以参考下
  • java获取IP地址

    2020-07-09 14:37:43
    一般登录记录用户信息的时候需要用到,获取用户的ip地址,记录在日志表信息中。 /** * */ package com.example.demo; import java.net.Inet4Address; import java.net.InetAddress; import java.net....
  • java获取IP地址工具类

    2016-03-31 11:43:22
    利用淘宝IP地址库实现的利用IP获取用户所在地工具类
  • java获取IP地址和MAC地址方式 前端和后台都可以获取 ip获取方式比较简单,就不做分析了,主要说mac的获取 前端获取的方式与局限性:尝试好几种方式,这种是最易实现、最简单的方式,确实能获取该浏览器客户端的mac...
  • 主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache、Squid、nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下
  • 主要介绍了Java获取客户端真实IP地址过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了JAVA获得域名IP地址的方法,涉及java域名操作的相关技巧,需要的朋友可以参考下
  • Java获取当前ip地址

    万次阅读 2019-05-13 21:41:05
    import java.net.Inet4Address; import java.net.InetAddress; import java.net.UnknownHostException; public class InetAddressInUse { public static void main(String[] args){ ... InetAddress ip4 =...
  • java根据ip获取位置

    2018-03-13 11:11:03
    java根据ip获取位置 根据IP地址获取详细的地域信息 淘宝API 新浪API
  • 前端和后端获取IP地址
  • 主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 265,647
精华内容 106,258
关键字:

java获取ip地址

java 订阅
友情链接: UMAT3D.zip