获取外网IP 求指导

xu徐 发布于 2013/11/19 21:20
阅读 429
收藏 0

import java.awt.Font;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
import java.net.URL;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CatchWeb {
/**
*
* @param basePath
* @param childPath
* @return
* @throws SocketTimeoutException
*/
public String getWebSource(String basePath, String childPath){
   StringBuffer sb = new StringBuffer("");
   try {
    URL url = new URL(basePath + childPath);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
   
  
   // con.setFollowRedirects(true);
    con.setInstanceFollowRedirects(false);
    con.setConnectTimeout(20000);
    con.connect();
    BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));

    String s = "";
    while ((s = br.readLine()) != null) {
     System.out.println(s);
     sb.append(s + "\n");
    }
   } catch (MalformedURLException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
   return sb.toString();
}

/********************* 匹配信息的方法 **********************/
public String getCity(String source) {
   if (source != null) {
    source = source.substring(source.indexOf("来自"), source .indexOf("<br/>"));
   }
   return source;
}

public String getIP(String source) {
   if (source != null) {
    source = source.substring(source.indexOf("[") + 1, source .indexOf("]"));
   }
   return source;
}


public static void main(String[] args) {
   CatchWeb catchWeb = new CatchWeb();

   /**************** JFrame设置 *******************/
   JFrame jf = new JFrame("获取IP");
   JPanel jp = new JPanel();
   JLabel label = new JLabel();

   label.setFont(new Font("微软雅黑", Font.LAYOUT_LEFT_TO_RIGHT, 12));
   jp.add(label);
   jf.add(jp);
   jf.setVisible(true);
   jf.setBounds(400, 200, 200, 80);
   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   /**************** 连接设置 *******************/
   String basePath = "http://www.ip138.com/";
   String ipurl = "ip2city.asp";
   String cityurl = "ips.asp";
   String ip = null;
   String city = null;

   try{
    label.setText("连接中...");
    ip = catchWeb.getIP(catchWeb.getWebSource(basePath, ipurl));
    city = catchWeb.getCity(catchWeb.getWebSource(basePath, cityurl + "?" + ip));
   }catch(Exception e){
    label.setText("连接超时,请检查网络!");
    label.repaint();
   }
 
   if(ip != null && city != null){
    label.setText("<html>您的IP是:" + ip + "<br/>" + city + "</html>");
    label.repaint();
   }
   System.out.println("您的IP是:" + ip + "\n" + city);
}
}

加载中
0
laxtiz
laxtiz
curl ifconfig.me
x
xu徐
回复 @铂金胖子 : 恩。这个可以。不过返回的只有纯 IP,没有归属地。
laxtiz
laxtiz
回复 @xu徐 : 正确的方式做正确的事,我的评论跟你的代码做了同样的事情,都是从网页获取内容,都是服务器提供client ip
铂金胖子
铂金胖子
回复 @xu徐 : ip138 那个网址,你还要分析html. 用 http://ifconfig.me/ip 这个网址,直接就给你返回 ip 了。
x
xu徐
回复 @铂金胖子 :能说明白点吗?什么+1?
铂金胖子
铂金胖子
+1
下一页
0
杨光
杨光
这个有什么问题么 不能获取?
x
xu徐
回复 @杨光 : 页面获取下来了。但是页面没有 IP 号。
杨光
杨光
现在获取地址是这个了 http://iframe.ip138.com/ic.asp 你单步调试下呗 我已经好久木写java了 囧rz 其实不就是获取html然后截取字符串么 自己仔细核对下
x
xu徐
对,获取不到。
返回顶部
顶部