JSP页里如何获得自己本机的外网IP? 注意不是局域网IP,也不是127.0.0.1

解决方案 »

  1.   

    import java.net.*;
    public class GetIp { public static int isInnerIP(long a_ip)//检查ip地址是否是内网ip
     {
      int bValid = -1;
      if ((a_ip >> 24 == 0xa) || (a_ip >> 16 == 0xc0a8) || (a_ip >> 22 == 0x2b0))
      {
       bValid = 0;
      }
      return bValid;
     }
     
     // 将127.0.0.1 形式的IP地址转换成10进制整数,这里没有进行任何错误处理
     public static long ipToLong(String strIP)
     {
      long[] ip = new long[4];
      //先找到IP地址字符串中.的位置
      int position1 = strIP.indexOf(".");
      int position2 = strIP.indexOf(".", position1 + 1);
      int position3 = strIP.indexOf(".", position2 + 1);
      //将每个.之间的字符串转换成整型
      ip[0] = Long.parseLong(strIP.substring(0, position1));
      ip[1] = Long.parseLong(strIP.substring(position1 + 1, position2));
      ip[2] = Long.parseLong(strIP.substring(position2 + 1, position3));
      ip[3] = Long.parseLong(strIP.substring(position3 + 1));
      return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
     }
     
     public static void main(String[] args) {
      String ip;
      try
      {
       InetAddress in = InetAddress.getLocalHost();
       InetAddress[] all = InetAddress.getAllByName(in.getHostName());
       //通过本机主机名,遍历多个ip   
       for (int i = 0; i < all.length; i++)
       {
        String tmp=null;
        tmp=ip=all[i].getHostAddress().toString();
        System.out.println("IP =  " +tmp);//输出计算机所有的ip地址
        if (isInnerIP(ipToLong(tmp)) == -1)//检查是不是外网ip,如果是就保存文件
        {
         /*WriteFile(ip);//将ip地址写入文件
         System.out.println("IP保存在同目录IP.txt文件中");     System.out.println("同目录IP.txt文件中的IP是:" + ReadFile());*/
         System.out.println(ip);
         
        }
       }
      }
      catch (UnknownHostException e)
      {
       System.out.println(e.getMessage());
      }
     }
    }
      

  2.   


    public static String findMyIp()throws Exception{      
    java.net.URL url = new java.net.URL("http://www.ip138.com/ip2city.asp");    
    java.net.URLConnection urlConnection = url.openConnection();    
    urlConnection.setAllowUserInteraction(false);     
    java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(url.openStream()));    
    String inputLine;    
    String ip=null;       
    while ((inputLine = in.readLine()) != null){
        int start=0;
    int end=0;
        if((start=inputLine.indexOf("您的IP地址是"))!=-1){
         start=inputLine.indexOf("[");
         end=inputLine.indexOf("]");
         ip=inputLine.substring(start+1,end);
     break;
    }
    }    
    in.close();
    return ip;    
    }  从网上看到的一种思路,是读取http://www.ip138.com/网页的内容,从里面提取IP地址,但是,读取出来以后才发现,ip地址的内容是放在一个iframe中的,是由http://www.ip138.com/ip2city.asp文件生成的。
    不知道楼主可否告知还有什么好办法?
      

  3.   

    public class ipServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    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(); 

    String url = request.getHeader("Referer");
    String Trageturl = request.getRequestURL().toString();
    response.setContentType("text/html");
    response.setCharacterEncoding("UTF-8");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<body>");
    out.println("<head>");
    out.println("<title>获得真实IP测试</title>");
    out.println("</head>");
    out.println("<body><font size='2'");
    out.println("<b>IP测试例子</b><br>");
    out.println("IP: "+ip);
    out.println("<b>Url测试例子</b><br>");
    out.println("url: "+url);
    out.println("<b>网址测试例子</b><br>");
    out.println("Trageturl: "+Trageturl);
    out.println("</font></body>");
    out.println("</html>");

    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    this.doGet(request, response);
    }
    }
    1个月前自己写的IP测试的servlet例子。供参考。servlet配置 
    <!-- IP测试 -->
    <servlet>
    <servlet-name>ip</servlet-name>
    <servlet-class>iptest.ipServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>ip</servlet-name>
    <url-pattern>/iptest</url-pattern>
    </servlet-mapping>本人一直想把这个放到网站上测试,看是否能得到外网IP。如果有哪个兄弟有自己的个人网站。请帮忙测试下。并告知我。不胜感激。
      

  4.   

    上次不会引用JAVA代码,这次重新引用下。
    public class ipServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {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();
    }
    String url = request.getHeader("Referer");
    String Trageturl = request.getRequestURL().toString();
    response.setContentType("text/html");
    response.setCharacterEncoding("UTF-8");
    PrintWriter out = response.getWriter();
    out.println(" <html>");
    out.println(" <body>");
    out.println(" <head>");
    out.println(" <title>获得真实IP测试 </title>");
    out.println(" </head>");
    out.println(" <body> <font size='2'");
    out.println(" <b>IP测试例子 </b> <br>");
    out.println("IP: "+ip);
    out.println(" <b>Url测试例子 </b> <br>");
    out.println("url: "+url);
    out.println(" <b>网址测试例子 </b> <br>");
    out.println("Trageturl: "+Trageturl);
    out.println(" </font> </body>");
    out.println(" </html>");}
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {this.doGet(request, response);
    }
    }<!-- IP测试 -->
    <servlet>
    <servlet-name>ip </servlet-name>
    <servlet-class>iptest.ipServlet </servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>ip </servlet-name>
    <url-pattern>/iptest </url-pattern>
    </servlet-mapping>