`
cuiyadll
  • 浏览: 196881 次
文章分类
社区版块
存档分类
最新评论

java获取外网ip

阅读更多

 * 获取本机外网IP地址。 

 * 实现方法是访问网站http://1212.ip138.com/ic.asp,

 * 得到返回的文本后解析出本机在外网的IP地址。

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 获取本机外网IP地址。 
 * 实现方法是访问网站http://1212.ip138.com/ic.asp,
 * 得到返回的文本后解析出本机在外网的IP地址。
 * 
 * @author cyn
 * 
 */
public class ExternalIpAddressFetcher {
	// 本机外网IP地址
	private String myExternalIpAddress;

	public ExternalIpAddressFetcher(String externalIpProviderUrl) {
		fetchExternalIpProviderHTML(externalIpProviderUrl);
	}

	/**
	 * 从http://checkip.dyndns.org返回的字符串中通过正则表达式提取外网ip
	 * 
	 * @param externalIpProviderUrl
	 * @return
	 */
	private String fetchExternalIpProviderHTML(String externalIpProviderUrl) {
		// 输入流
		InputStream ins = null;

		// 到外网提供者的Http连接
		URLConnection httpConn = null;

		try {
			// 打开连接
			URL url = new URL(externalIpProviderUrl);
			httpConn = url.openConnection();

			ins = httpConn.getInputStream();
			InputStreamReader isReader = new InputStreamReader(ins, "GB2312");
			BufferedReader bReader = new BufferedReader(isReader);
			StringBuffer webContent = new StringBuffer();
			String str = null;
			while ((str = bReader.readLine()) != null) {
				if (parse(str)) {
					webContent.append(str);
					break;
				}
			}
			// 返回
			return webContent.toString();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				ins.close();
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}

		// 出现异常则返回空
		return null;
	}

	/**
	 * 使用正则表达式解析返回的HTML文本,得到本机外网地址
	 * 
	 * @param html
	 */
	private boolean parse(String html) {
		boolean ret = false;
		Pattern pattern = Pattern.compile("(\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})",
				Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(html);
		while (matcher.find()) {
			myExternalIpAddress = matcher.group(0);
			ret = true;
			break;
		}
		return ret;
	}

	/**
	 * 得到本机外网地址,得不到则为空
	 * 
	 * @return
	 */
	public String getMyExternalIpAddress() {
		return myExternalIpAddress;
	}

	public static void main(String[] args) {
		ExternalIpAddressFetcher fetcher = new ExternalIpAddressFetcher("http://1212.ip138.com/ic.asp");

		System.out.println(fetcher.getMyExternalIpAddress());
	}
}

 

分享到:
评论

相关推荐

    java获取当前主机的外网ip

    java获取当前主机的外网ip,简单方便。

    java获取本机外网ip

    通过url链接到一个网址,该网址返回自己的ip地址(通过代理服务器访问)

    java获取外网IP和省市区,抓取方式

    你遇到过本地IP192.168.0.1但你想取到自己的外网IP或自己的省市区吗?这些统统都不是事,是事也就烦一会,下载下来执行main方法便可获取到位置和IP。带解析JAR包,最权威最给力的最最最最权威的方法。市面上绝对没有...

    获取外网IP

    外网IP 内网IP 获取IP 解决java不易获取外网IP

    java获取linux服务器上的IP操作

    主要介绍了java获取linux服务器上的IP操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    java代码得到外网ip地址

    java代码得到外网ip地址,java调net webservice远程联调用得着

    java本机获取外网IP 2014_08_05

    通常,用户都是通过路由...我是通过访问www.ip138.com来获取外网IP,并用JFrame显示。该方法的关键是正确的ip138查询网站的URL。目前能成功获取,若获取失败请更改源代码中URL。更改方法详见"url更改方法.txt"文件。

    利用IP138网站获得本机外网IP地址

    1:通过WWW.IP138.COM来获得本机的外网IP地址 2:针对网上的其它实例增加实时更新IP地址功能,防止断网重连后IP地址显示不正确 3:增加一条命令,用来解决MSXML2.XMLHTTP和Microsoft.XMLHTTP老是读旧缓存导致IP地址...

    获取客户端外网ip和ip定位修订版

    这篇文章是对上篇文章获取外网ip和ip定位的修订版,上篇文章中得到的外网ip是服务器端的外网ip,而不是客户端的外网ip,此篇文章进行修改,得到客户端的外网ip和根据ip定位,上篇文章给大家带来的不便,请谅解。

    ddns+java+阿里云动态修改DDNS+外网IP

    该源码主要是通过java StringBoot 项目编写的一个动态修改DDNS的工具类,每隔15秒回去网上获取一次外网IP。 使用时在ddns\src\main目录下找到application.yml配置文件然后更改成自己的信息 ddns: aliyun: domain: ...

    android获取公网ip地址 IPUtil.java

    通过异步任务来获取当前用户的ip地址,使用的时候调用getRemoteIP方法就可以,需要传一个可以获取公网ip的url地址,这个百多很多,比如,搜狐,淘宝之类的都有,同时还有一个超时的任务,具体看代码了

    简易java查询IP归属地示例代码

    简易java查询IP归属地示例代码。 面向中国大陆地区的 手机号码、电话号码、IP地址 归属地查询库。 IP地址库来源于 [ip2region](http://git.oschina.net/lionsoul/ip2region)。 手机号码段和电话号码区号信息来源于 ...

    java开发基于百度API,淘宝API和腾讯IP库(qqwry.dat),通过IP获取区域城市位置,经纬度获取城市地址,城市地址获取经纬度等信息实例

    通过外网IP获取地址详细信息等;(具体信息有:经纬度,ISP,区域编码,区域名称,城市名称,省份名称) 2.淘宝API测试示例是通过IP获取地址,同上,但是没有经纬度的; 3.腾讯qqwry.dat是支持离线通过IP获取地址,是...

    Android获取手机ip地址及mac地址

    Android获取手机ip地址及mac地址

    根据ip获取当前所在区域地址

    根据ip获取当前所在区域地址

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包4

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

Global site tag (gtag.js) - Google Analytics