当前位置:首页 > 后端开发 > 正文

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

在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地址范围通常有以下几种:

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

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

判断是否为内网

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

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

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如何准确区分设备连接的是内网还是外网? 第3张

0