java获取本机外网IP地址

来源:互联网 发布:超星尔雅网络考试答案 编辑:程序博客网 时间:2024/06/07 21:32
package ip.test;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.regex.Matcher;import java.util.regex.Pattern;public class IPUtil {// 外网IP提供者的网址private String externalIpProviderUrl;// 本机外网IP地址private String IPAddress;public String getIPAddress() {return IPAddress;}public IPUtil(String externalIpProviderUrl) {this.externalIpProviderUrl = externalIpProviderUrl;String returnedhtml = fetchExternalIpProviderHTML();parse(returnedhtml);}public static void main(String[] args) {IPUtil fetcher = new IPUtil("http://checkip.dyndns.org/");System.out.println(fetcher.getIPAddress());}/** * 从外网提供者处获得包含本机外网地址的字符串 从http://checkip.dyndns.org返回的字符串如下 * <html><head><title>Current IP Check</title></head><body>Current IP * @return */private String fetchExternalIpProviderHTML() {// 输入流InputStream in = null;// 到外网提供者的Http连接HttpURLConnection httpConn = null;try {// 打开连接URL url = new URL(externalIpProviderUrl);httpConn = (HttpURLConnection) url.openConnection();// 连接设置HttpURLConnection.setFollowRedirects(true);httpConn.setRequestMethod("GET");httpConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");// 获取连接的输入流in = httpConn.getInputStream();byte[] bytes = new byte[1024];// 此大小可根据实际情况调整// 读取到数组中int offset = 0;int numRead = 0;while (offset < bytes.length&& (numRead = in.read(bytes, offset, bytes.length - offset)) >= 0) {offset += numRead;}// 将字节转化为为UTF-8的字符串String receivedString = new String(bytes, "UTF-8");System.out.println("xml的内容:" + receivedString);return receivedString;} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {in.close();httpConn.disconnect();} catch (Exception ex) {ex.printStackTrace();}}// 出现异常则返回空return null;}/** * 使用正则表达式解析返回的HTML文本,得到本机外网地址 *  * @param html */private void parse(String html) {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()) {IPAddress = matcher.group(0);}System.out.println("解析得到的外网IP:" + IPAddress);}}

原创粉丝点击