Java如何准确区分设备连接的是内网还是外网?
- 后端开发
- 2025-10-12
- 5
在Java中判断网络是否为内网还是外网,可以通过获取本机的IP地址并与内网IP地址范围进行比较来实现,下面详细介绍如何通过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地址范围,可以判断网络是否为内网。

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。
