java 获取请求的外网ip
时间: 2024-09-21 18:04:06 浏览: 42
在Java中获取客户端的外网IP地址通常有两种常见方法:
1. **`java.net.InetAddress`** 类方法:
使用 `InetAddress.getLocalHost().getHostAddress()` 可以获取本地主机的IP,但这可能返回的是局域网内的IP。如果你需要真实的公网IP,可以尝试通过第三方库如 "dnsjava" 或 "NonBlockingIPLookup" 来查询公共DNS服务,例如:
```java
import org.xbill.DNS.*;
public String getPublicIpAddress() {
try {
// 创建DNS缓存查询
Lookup lookup = new Lookup("8.8.8.8", Type.A);
lookup.setResolverConfig(new DefaultResolverConfiguration());
// 查询并解析结果
Message queryMessage = lookup.getMessage();
if (queryMessage != null) {
Answer answer = lookup.processResponse(queryMessage);
Record[] records = answer.getRecords();
if (records.length > 0 && records[0] instanceof ARecord) {
return ((ARecord) records[0]).addressToString();
}
}
throw new RuntimeException("Failed to retrieve public IP address");
} catch (Exception e) {
return "Error getting public IP: " + e.getMessage();
}
}
```
2. **`Socket` 类方法**:
你可以创建一个短暂的TCP连接到公共服务器(如Google的公共DNS),然后从返回的数据中解析出源IP。这种方法相对复杂一些,并且不是标准做法。
注意,这两种方法都不能保证总是获取到稳定的公网IP,因为某些网络环境下可能会有代理、NAT等影响。
阅读全文