Java程序获取外部IP地址的方法

5星 · 超过95%的资源 需积分: 16 132 下载量 195 浏览量 更新于2024-09-14 1 收藏 4KB TXT 举报
"Java程序获取外部(公网)IP地址的方法" 在Java编程中,获取外网IP地址通常是为了确定一个设备在互联网上的唯一标识。这个过程涉及到网络通信和字符串解析。以下是一个Java类`ExternalIpAddressFetcher`的实现,用于获取外部IP地址: ```java package com.ljq.action; 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; / * 获取外网IP地址 * 使用http://checkip.dyndns.org/提供的服务获取当前的公网IP地址 * @author Administrator */ public class ExternalIpAddressFetcher { // IP提供者URL private String externalIpProviderUrl; // 我的外部IP地址 private String myExternalIpAddress; public ExternalIpAddressFetcher(String externalIpProviderUrl) { this.externalIpProviderUrl = externalIpProviderUrl; String returnedHtml = fetchExternalIpProviderHTML(externalIpProviderUrl); parse(returnedHtml); } / * 从指定URL获取HTML内容,该内容包含外部IP地址 * 例如:http://checkip.dyndns.org/返回的HTML为: * <html><head><title>CurrentIPCheck</title></head><body>CurrentIPAddress:123.147.226.222</body></html> * @param externalIpProviderUrl * @return */ private String fetchExternalIpProviderHTML(String externalIpProviderUrl) { // 输入流 InputStream in = null; // 创建HttpURLConnection对象 HttpURLConnection httpConn = null; try { // 创建URL对象 URL url = new URL(externalIpProviderUrl); // 连接到指定URL httpConn = (HttpURLConnection) url.openConnection(); // 读取输入流 in = httpConn.getInputStream(); // 读取并返回HTML内容 // ... } catch (MalformedURLException e) { // 处理URL错误 // ... } catch (IOException e) { // 处理IO异常 // ... } finally { // 关闭资源 if (in != null) { try { in.close(); } catch (IOException e) { // ... } } if (httpConn != null) { httpConn.disconnect(); } } return ""; // 返回HTML内容 } / * 解析返回的HTML,从中提取IP地址 * 使用正则表达式匹配IP地址 * @param html */ private void parse(String html) { // 定义IP地址的正则表达式 String regex = "(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"; // 创建Pattern对象 Pattern pattern = Pattern.compile(regex); // 创建Matcher对象 Matcher matcher = pattern.matcher(html); // 查找匹配的IP地址 if (matcher.find()) { // 获取第一个匹配的IP地址 myExternalIpAddress = matcher.group(1); } } // 其他方法,如获取IP地址等 } ``` 这个类首先定义了获取IP地址的URL(`externalIpProviderUrl`),然后通过`fetchExternalIpProviderHTML`方法连接到该URL并获取HTML响应。响应内容通常包含一个简单的HTML结构,其中IP地址以纯文本形式存在。`parse`方法使用正则表达式来匹配IP地址,并将其存储在`myExternalIpAddress`字段中。 在这个例子中,使用了`http://checkip.dyndns.org`作为IP提供者,但请注意,这只是一个示例,实际应用中可能需要根据可用的服务或需求进行调整。 获取外网IP地址的过程可能受到网络状况、服务器响应时间、以及目标网站策略的影响。因此,处理异常和错误情况是必不可少的,例如网络连接失败、超时或目标网站更改其返回格式等。在实际开发中,需要对这些情况进行充分的测试和异常处理。