java获取公网ip地址
时间: 2023-11-10 16:21:27 浏览: 113
你可以通过访问一个外部网站来获取当前机器的公网IP地址,代码实现如下:
try {
URL url=new URL("http://www.ip138.com/ip2city.asp");
BufferedReader reader=new BufferedReader(new InputStreamReader(url.openStream()));
String line=reader.readLine();
StringBuffer buffer=new StringBuffer();
while(line!=null){
buffer.append(line);
line=reader.readLine();
}
// 从页面中提取出IP地址
int start=buffer.indexOf("[")+1;
int end=buffer.indexOf("]");
String ipAddress=buffer.substring(start,end);
System.out.println("IP地址是:"+ipAddress);
} catch (Exception e) {
System.out.println("获取IP地址时出现异常,异常信息是:"+e.getMessage());
}
请注意:本回答仅供技术交流,如有任何法律问题请咨询专业律师。
相关问题
java 获取当前公网ip代码
以下是Java获取当前公网IP的示例代码:
```java
import java.net.*;
import java.io.*;
public class PublicIP {
public static void main(String[] args) throws Exception {
URL url = new URL("http://checkip.amazonaws.com/");
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
String publicIP = br.readLine();
System.out.println("Your public IP address is: " + publicIP);
}
}
```
该代码利用 Amazon Web Services 的 checkip 服务获取当前公网IP地址。通过将该地址与 URL 类一起使用,我们可以从该服务中读取公网IP地址并将其打印到控制台中。
java获取本机公网ip
在Java中获取本机的公网IP地址,通常需要借助第三方库或者操作系统提供的API。一种常见的方法是使用`java.net.InetAddress`类配合`getHostAddress()`方法,然后检查返回的是局域网IP还是公网IP。以下是简单的示例:
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
public class Main {
public static void main(String[] args) throws Exception {
// 获取所有网络接口
for (NetworkInterface networkInterface : NetworkInterface.getNetworkInterfaces()) {
// 排除本地回环接口和其他非常规接口
if (!networkInterface.isLoopback() && !isExcluded(networkInterface)) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(networkInterface.getInetAddresses().iterator().next().getReader()))) {
String line;
while ((line = reader.readLine()) != null) {
// 如果是IPv4地址并且状态为"UP"
if (InetAddress.getByName(line).isSiteLocalAddress() || InetAddress.getByName(line).isPublic()) {
System.out.println("Public IP address: " + line);
break; // 找到公网IP就停止循环
}
}
}
}
}
}
private static boolean isExcluded(NetworkInterface networkInterface) {
return "lo".equals(networkInterface.getName()); // 这里仅排除名为"lo"的回环接口,你可以根据实际需求调整
}
}
```
阅读全文