Java获取本机的公网IP地址
引言
在很多情况下,我们可能需要获取本机的公网IP地址,例如用于网络监控、IP限制等应用场景。本文将介绍如何使用Java代码获取本机的公网IP地址。
获取本机的公网IP地址
要获取本机的公网IP地址,我们可以使用以下两种方法:通过访问第三方网站获取IP地址或通过解析网络接口获取IP地址。
方法一:通过访问第三方网站获取IP地址
我们可以通过访问一个提供IP信息的第三方网站,然后解析网页内容来获取我们的公网IP地址。
示例代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
public class GetPublicIP {
public static void main(String[] args) {
try {
URL url = new URL("
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
String ip = br.readLine().trim();
System.out.println("Public IP address: " + ip);
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上代码中,我们使用了URL
和BufferedReader
来读取一个提供公网IP信息的网站,然后从网页内容中解析出我们的公网IP地址。
方法二:通过解析网络接口获取IP地址
另一种方法是通过解析网络接口获取IP地址。Java提供了InetAddress
类来获取本机的IP地址,我们可以通过对网络接口进行遍历,找到非回环地址(即公网IP地址)。
示例代码:
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
public class GetPublicIP {
public static void main(String[] args) {
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface networkInterface = interfaces.nextElement();
if (networkInterface.isLoopback() || !networkInterface.isUp()) {
continue;
}
Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress address = addresses.nextElement();
if (!address.isLoopbackAddress() && address.getHostAddress().indexOf(":") == -1) {
System.out.println("Public IP address: " + address.getHostAddress());
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
}
}
以上代码中,我们通过遍历所有的网络接口,并排除回环地址和未启用的接口,找到非回环地址(即公网IP地址)。
类图
下面是本文代码示例中的类图:
classDiagram
class GetPublicIP {
+main(args: String[]): void
}
结论
本文介绍了两种方法来获取本机的公网IP地址。通过访问第三方网站获取IP地址是最简单的方法,但依赖于第三方网站的可用性。通过解析网络接口获取IP地址可以更加可靠地获取IP地址,但需要对网络接口进行遍历。根据具体的应用场景,选择合适的方法来获取本机的公网IP地址。
希望本文对你理解如何使用Java代码获取本机的公网IP地址有所帮助。如果你有任何问题或建议,请随时在下方评论区留言。