要判断一个IP地址是内网还是外网,我们需要了解内网和外网的IP地址范围。内网IP地址通常是在私有IP地址范围内,而外网IP地址则是公共IP地址。
IPv4的私有IP地址范围是:
- 10.0.0.0 到 10.255.255.255
- 172.16.0.0 到 172.31.255.255
- 192.168.0.0 到 192.168.255.255
IPv6的私有IP地址范围是:
- fc00::/7
通过判断IP地址是否在这些私有IP地址范围内,我们可以确定它是内网还是外网。
下面是一段Java代码来判断一个IP地址是内网还是外网:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class IPChecker {
public static boolean isPrivateIP(String ip) {
try {
InetAddress address = InetAddress.getByName(ip);
return address.isSiteLocalAddress() || address.isLoopbackAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
String[] ips = {"192.168.0.1", "172.16.0.1", "10.0.0.1", "8.8.8.8"};
for (String ip : ips) {
boolean isPrivate = isPrivateIP(ip);
System.out.println(ip + " is " + (isPrivate ? "private" : "public"));
}
}
}
在这段代码中,我们定义了一个isPrivateIP
方法来判断一个IP地址是否是内网IP。我们使用InetAddress
类来解析IP地址,并使用isSiteLocalAddress
方法判断是否为站点本地地址(内网IP),使用isLoopbackAddress
方法判断是否为环回地址(本地IP)。如果IP地址既不是站点本地地址也不是环回地址,那么它应该是公共IP地址。
在main
方法中,我们可以传入一组IP地址进行测试。遍历每个IP地址,调用isPrivateIP
方法判断其是否为内网IP,并输出结果。
输出结果示例:
192.168.0.1 is private
172.16.0.1 is private
10.0.0.1 is private
8.8.8.8 is public
通过这段代码,我们可以判断一个IP地址是内网还是外网。需要注意的是,这段代码只适用于IPv4地址,如果需要对IPv6地址进行判断,可以使用InetAddress
的isIPv6SiteLocal
和isIPv6LinkLocal
方法。