Java 获取本机的外网 IP
时间: 2024-12-22 15:19:21 浏览: 17
在Java中获取本机的外网IP地址通常有几种方法:
1. **`InetAddress.getLocalHost()`**:这个方法返回的是本地主机的IPv4或IPv6地址。但是,如果机器有多个网络连接,并且设置了多个默认路由,这可能不是你想获取的公共IP。
```java
try {
InetAddress ipAddress = InetAddress.getLocalHost();
System.out.println("Local IP Address: " + ipAddress.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
```
2. **`NetworkInterface` 和 `InetAddresses`**:可以遍历所有的网络接口(`NetworkInterface`),然后查找第一个非Loopback类型的接口并获取其对应的IP地址。
```java
for (NetworkInterface networkInterface : NetworkInterface.getNetworkInterfaces()) {
if (!networkInterface.isLoopback() && networkInterface.isUp()) {
Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
while (inetAddresses.hasMoreElements()) {
InetAddress inetAddress = inetAddresses.nextElement();
if (!inetAddress.isLinkLocalAddress() && !inetAddress.isSiteLocalAddress()) { // 可能需要过滤掉私有IP
System.out.println("Public IP Address: " + inetAddress.getHostAddress());
break;
}
}
}
}
```
3. **第三方库**:还可以利用一些第三方库,如`Socket`或`java.net.NetworkInterface`,结合更复杂的网络操作来获取稳定的公共IP。
需要注意的是,上述方法可能会因为防火墙设置、代理等问题而无法直接访问到真实公网IP。如果你确实需要可靠的公共IP地址,有时可能需要借助于服务API,例如Cloudflare的1.1.1.1服务或者其他提供此类信息的服务。
阅读全文