Java如何准确区分设备连接的是内网还是外网?

在Java中判断网络是否为内网还是外网,可以通过获取本机的IP地址并与内网IP地址范围进行比较来实现,下面详细介绍如何通过Java代码来判断网络是否为内网。

java怎么判断内网还是外网

Java判断内网与外网的方法

获取本机IP地址

需要获取本机的IP地址,可以使用java.net.InetAddress类来实现。

public static String getLocalIp() {
    try {
        return InetAddress.getLocalHost().getHostAddress();
    } catch (UnknownHostException e) {
        e.printStackTrace();
        return null;
    }
}

内网IP地址范围

内网IP地址范围通常有以下几种:

  • x.x.x
  • 16.x.x 172.31.x.x
  • 168.x.x

判断是否为内网

通过比较本机IP地址与内网IP地址范围,可以判断网络是否为内网。

java怎么判断内网还是外网

public static boolean isInnerNetwork(String ip) {
    if (ip.startsWith("10.") || ip.startsWith("172.16.") || ip.startsWith("172.17.") || ip.startsWith("172.18.") || ip.startsWith("172.19.") || ip.startsWith("172.20.") || ip.startsWith("172.21.") || ip.startsWith("172.22.") || ip.startsWith("172.23.") || ip.startsWith("172.24.") || ip.startsWith("172.25.") || ip.startsWith("172.26.") || ip.startsWith("172.27.") || ip.startsWith("172.28.") || ip.startsWith("172.29.") || ip.startsWith("172.30.") || ip.startsWith("172.31.") || ip.startsWith("192.168.")) {
        return true;
    }
    return false;
}

示例代码

以下是一个完整的示例代码,用于判断网络是否为内网:

public class InnerNetworkChecker {
    public static void main(String[] args) {
        String localIp = getLocalIp();
        if (localIp != null) {
            boolean isInner = isInnerNetwork(localIp);
            System.out.println("本地IP: " + localIp);
            System.out.println("是否为内网: " + isInner);
        } else {
            System.out.println("获取本地IP失败");
        }
    }
    public static String getLocalIp() {
        try {
            return InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
            return null;
        }
    }
    public static boolean isInnerNetwork(String ip) {
        if (ip.startsWith("10.") || ip.startsWith("172.16.") || ip.startsWith("172.17.") || ip.startsWith("172.18.") || ip.startsWith("172.19.") || ip.startsWith("172.20.") || ip.startsWith("172.21.") || ip.startsWith("172.22.") || ip.startsWith("172.23.") || ip.startsWith("172.24.") || ip.startsWith("172.25.") || ip.startsWith("172.26.") || ip.startsWith("172.27.") || ip.startsWith("172.28.") || ip.startsWith("172.29.") || ip.startsWith("172.30.") || ip.startsWith("172.31.") || ip.startsWith("192.168.")) {
            return true;
        }
        return false;
    }
}

FAQs

Q1: 如何获取本机的IP地址?

A1: 可以使用java.net.InetAddress类的getLocalHost()方法获取本机的IP地址。

Q2: 内网IP地址范围有哪些?

A2: 内网IP地址范围通常包括10.x.x.x、172.16.x.x 172.31.x.x和192.168.x.x。

java怎么判断内网还是外网

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/178302.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年10月12日 21:17
下一篇 2025年10月12日 21:24

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN