ky与你 2016-06-13 12:19 采纳率: 100%
浏览 1664

java如何获取公网IP?如果无法获取如何对访问者进行定位?

有个需求,需要得知网站访问者的大概地理位置,经纬度。应该怎么办啊,求给点思路谢谢,
百度了半天,也找不到获取公网ip的办法

  • 写回答

2条回答 默认 最新

  • ky与你 2016-06-13 12:31
    关注
     public String getRemortIP(HttpServletRequest request) {  
            if (request.getHeader("x-forwarded-for") == null) {  
                return request.getRemoteAddr();  
            }  
            return request.getHeader("x-forwarded-for");  
        }  
    
     //获得客户端真实IP地址的方法二:
        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;  
        }
    
     public String getAddressByIP(String strIP)
        { 
          try
          {
            URL url = new URL( "http://ip.qq.com/cgi-bin/searchip?searchip1=" + strIP); 
            URLConnection conn = url.openConnection(); 
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "GBK")); 
            String line = null; 
            StringBuffer result = new StringBuffer(); 
            while((line = reader.readLine()) != null)
            { 
              result.append(line); 
            } 
            reader.close(); 
            strIP = result.substring(result.indexOf( "该IP所在地为:" ));
            strIP = strIP.substring(strIP.indexOf( ":") + 1);
            String province = strIP.substring(6, strIP.indexOf("省"));
            String city = strIP.substring(strIP.indexOf("省") + 1, strIP.indexOf("市"));
            return strIP+province+city;
          }
          catch( IOException e)
          { 
            return "读取失败"; 
          }
        }
    
    

    127.0.0.1
    127.0.0.1
    IP地址:Lenovo-PC/172.27.35.1
    这几个方法我都试了,都无法获取公网ip,

    评论

报告相同问题?