String   realIP=request.getHeader( "x-forwarded-for ");
if   (realIP   !=null&&realIP.length()   !=0){
while((realIP!=null)&&(realIP.equals( "unknown "))){
realIP   =   request.getHeader( "x-forwarded-for ");
}
}
if(realIP   ==   null   ||   realIP.length()   ==   0){
realIP   =   request.getHeader( "Proxy-Client-IP ");
}
if(realIP   ==   null   ||   realIP.length()   ==   0){
realIP   =   request.getHeader( "WL-Proxy-Client-IP ");
}
if(realIP==null   ||   realIP.length()   ==   0){
realIP=request.getRemoteAddr();
}
这个得不到,为什么啊

解决方案 »

  1.   

    补充:
    得到客户端公网地址:   request.getRemoteAddr()   
    如果客户端在内网,只能得到代理的机器IP.你可以这么想一下,假设一个局域网内的机器访问你,你如果能得到局域网内机器的ip,那么这个局域网不就意味这可以让你随意进入了。。
    以前你的这个问题,我也想过,但是确实没有什么有效方法,除非是控件,但是谁又能信任你这个控件的安全性呢?
      

  2.   

    request.getRemoteAddr();你debug看看
      

  3.   

    你的最后一个if  request.getRemoteAddr();执行了没有。觉得这句话就能得到
      

  4.   

    还有 在你的程序里发现一个while 不怕死循环么
      

  5.   


    package www.anizx.com.Tools;import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 
    * 项目名称:获取公网的IP   
    * 类名称:GetNetWork 
    * 包名:www.anizx.com.Tools 
    * 类描述:   
    * 创建人:梁章荣   
    * 创建时间:Jun 24, 2010 7:08:14 PM   
    * 修改人:梁章荣   
    * 修改时间:Jun 24, 2010 7:08:14 PM   
    * 修改备注:   
    * 个人主页:http://www.anizx.com
    * 个人邮箱:[email protected]  
    * 个人QQ:543243603  
    *======================================================================
    * Change History Log
    * ----------------------------------------------------------------------
    * Mod. No.    | Date        | Name            | Reason            | Change Req.
    * ----------------------------------------------------------------------
    *             |  Jun 24, 2010    | ZhangRong.Liang | Created           | 梁章荣
    *======================================================================
     */
    public class GetNetWork {
     //查询IP的工具路径
     private static String PATHURL = "http://www.ip138.com/ips.asp"; public List<String> GetThePublcNetWork() {  try {
       URL url = new URL(PATHURL);
       //把url的内容open
       InputStreamReader isr = new InputStreamReader(url.openStream());
       //写进去
       BufferedReader brf = new BufferedReader(isr);
       String str = "";
       StringBuffer sb = new StringBuffer("");
       String webStr = "";
       String ip = "";
       while ((str = brf.readLine()) != null) {
        //获取网页的所有内容
        sb.append(str + "\r\n");
       }
       brf.close();
       webStr = sb.toString();
       ip = sb.toString();
       webStr = webStr.substring(webStr.indexOf("来自"), webStr
         .indexOf("<br/>"));
       ip = ip.substring(ip.indexOf("您的IP地址是"), ip.indexOf("来自"));
       List<String> list = new ArrayList<String>();
       list.add(webStr);
       list.add(ip);
       if (list != null) {
        return list;
       }
       return null;
      } catch (Exception ex) {
       ex.printStackTrace();
       return null;
      }
     } public static void main(String[] args) {
      GetNetWork n = new GetNetWork();
      List<String> list = n.GetThePublcNetWork();
      String Ip = (String) list.get(0);
      String city = (String) list.get(1);
      String[] IArray = Ip.split(":");
      String[] citys = city.split("您的IP地址是:");
      String tempCtity = citys[1].substring(1, citys[1].length() - 2);
      System.out.println(IArray[1].toString());
      System.out.println(tempCtity); }}
      

  6.   

    request.getRemoteAddr()   
      

  7.   

    LZ,死了这条心吧,现在的应用基本都是部署在双机或集群上,哪会让你看到真实的IP,你得到的只是浮动IP
      

  8.   

    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;
    }