要判断一个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地址进行判断,可以使用InetAddressisIPv6SiteLocalisIPv6LinkLocal方法。