用正则表达式检查是IP否为内网地址
用正则表达式检查是ip否为内网地址
- PHP
function isIntranet($ip)
{/* IPV4内网地址A 类10.0.0.0~10.255.255.255B 类172.16.0.0~172.31.255.255C 类192.168.0.0~192.168.255.255*/// 检查是否为 IPv4 内网地址if (preg_match('/^10\./', $ip)) return true;if (preg_match('/^172\.(1[6-9]|2[0-9]|3[0-1])\./', $ip)) return true;if (preg_match('/^192\.168\./', $ip)) return true;/* IPV6内网地址ULA地址: fc00::/7 (fc00:: - fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff)链路本地地址: fe80::/10 (fe80:: - febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff)*/// 检查是否为 IPv6 内网地址if (preg_match('/^f[c-d][0-9a-f]{2}:/i', $ip)) return true; // 匹配 fc00::/7 (包括 fc00:: 和 fdff:: 范围)if (preg_match('/^fe[89ab][0-9a-f]:/i', $ip)) return true; // 匹配 fe80::/10 (包括 fe80:: 到 febf:: 范围)return false;
}
- Java
import java.util.regex.Pattern;public class IPUtils {public static boolean isIntranet(String ip) {// IPV4 内网地址正则表达式String ipv4Pattern10 = "^10\\.";String ipv4Pattern172 = "^172\\.(1[6-9]|2[0-9]|3[0-1])\\.";String ipv4Pattern192 = "^192\\.168\\.";// IPV6 内网地址正则表达式String ipv6PatternFC = "^f[c-d][0-9a-f]{2}:";String ipv6PatternFE = "^fe[89ab][0-9a-f]:";// 匹配 IPv4 内网地址if (Pattern.matches(ipv4Pattern10, ip)) return true;if (Pattern.matches(ipv4Pattern172, ip)) return true;if (Pattern.matches(ipv4Pattern192, ip)) return true;// 匹配 IPv6 内网地址if (Pattern.matches(ipv6PatternFC, ip)) return true;if (Pattern.matches(ipv6PatternFE, ip)) return true;return false;}public static void main(String[] args) {System.out.println(isIntranet("10.0.0.1")); // trueSystem.out.println(isIntranet("fc00::1")); // trueSystem.out.println(isIntranet("172.16.0.1")); // trueSystem.out.println(isIntranet("192.168.0.1")); // trueSystem.out.println(isIntranet("fe80::1")); // trueSystem.out.println(isIntranet("8.8.8.8")); // false}
}
- Golang
package mainimport ("fmt""regexp"
)func isIntranet(ip string) bool {// 定义 IPv4 内网地址的正则表达式ipv4Pattern10 := `^10\.`ipv4Pattern172 := `^172\.(1[6-9]|2[0-9]|3[0-1])\.`ipv4Pattern192 := `^192\.168\.`// 定义 IPv6 内网地址的正则表达式ipv6PatternFC := `^f[c-d][0-9a-f]{2}:`ipv6PatternFE := `^fe[89ab][0-9a-f]:`// 匹配 IPv4 内网地址if matched, _ := regexp.MatchString(ipv4Pattern10, ip); matched {return true}if matched, _ := regexp.MatchString(ipv4Pattern172, ip); matched {return true}if matched, _ := regexp.MatchString(ipv4Pattern192, ip); matched {return true}// 匹配 IPv6 内网地址if matched, _ := regexp.MatchString(ipv6PatternFC, ip); matched {return true}if matched, _ := regexp.MatchString(ipv6PatternFE, ip); matched {return true}return false
}func main() {fmt.Println(isIntranet("10.0.0.1")) // truefmt.Println(isIntranet("fc00::1")) // truefmt.Println(isIntranet("172.16.0.1")) // truefmt.Println(isIntranet("192.168.0.1")) // truefmt.Println(isIntranet("fe80::1")) // truefmt.Println(isIntranet("8.8.8.8")) // false
}
- C
#include <stdio.h>
#include <stdbool.h>
#include <regex.h>bool isIntranet(const char *ip) {// 定义正则表达式的模式和个数const char *patterns[] = {"^10\\.", // IPv4 10.x.x.x"^172\\.(1[6-9]|2[0-9]|3[0-1])\\.", // IPv4 172.16.x.x - 172.31.x.x"^192\\.168\\.", // IPv4 192.168.x.x"^f[c-d][0-9a-f]{2}:", // IPv6 fc00::/7"^fe[89ab][0-9a-f]:" // IPv6 fe80::/10};const int pattern_count = sizeof(patterns) / sizeof(patterns[0]);regex_t regex[pattern_count];bool result = false;// 编译所有正则表达式for (int i = 0; i < pattern_count; i++) {if (regcomp(®ex[i], patterns[i], REG_EXTENDED | REG_ICASE) != 0) {// 编译失败时释放已分配的正则表达式资源for (int j = 0; j < i; j++) regfree(®ex[j]);return false;}}// 匹配所有模式for (int i = 0; i < pattern_count; i++) {if (regexec(®ex[i], ip, 0, NULL, 0) == 0) {result = true;break;}}// 释放正则表达式资源for (int i = 0; i < pattern_count; i++) {regfree(®ex[i]);}return result;
}int main() {printf("%d\n", isIntranet("10.0.0.1")); // 1 (true)printf("%d\n", isIntranet("fc00::1")); // 1 (true)printf("%d\n", isIntranet("172.16.0.1")); // 1 (true)printf("%d\n", isIntranet("192.168.0.1")); // 1 (true)printf("%d\n", isIntranet("fe80::1")); // 1 (true)printf("%d\n", isIntranet("8.8.8.8")); // 0 (false)return 0;
}
- C++
#include <iostream>
#include <regex>
#include <string>bool isIntranet(const std::string& ip) {// 定义 IPv4 内网地址的正则表达式std::regex ipv4Pattern10("^10\\.");std::regex ipv4Pattern172("^172\\.(1[6-9]|2[0-9]|3[0-1])\\.");std::regex ipv4Pattern192("^192\\.168\\.");// 定义 IPv6 内网地址的正则表达式std::regex ipv6PatternFC("^f[c-d][0-9a-f]{2}:", std::regex::icase);std::regex ipv6PatternFE("^fe[89ab][0-9a-f]:", std::regex::icase);// 匹配 IPv4 内网地址if (std::regex_search(ip, ipv4Pattern10)) return true;if (std::regex_search(ip, ipv4Pattern172)) return true;if (std::regex_search(ip, ipv4Pattern192)) return true;// 匹配 IPv6 内网地址if (std::regex_search(ip, ipv6PatternFC)) return true;if (std::regex_search(ip, ipv6PatternFE)) return true;return false;
}int main() {std::cout << isIntranet("10.0.0.1") << std::endl; // truestd::cout << isIntranet("fc00::1") << std::endl; // truestd::cout << isIntranet("172.16.0.1") << std::endl; // truestd::cout << isIntranet("192.168.0.1") << std::endl; // truestd::cout << isIntranet("fe80::1") << std::endl; // truestd::cout << isIntranet("8.8.8.8") << std::endl; // falsereturn 0;
}相关文章:
用正则表达式检查是IP否为内网地址
用正则表达式检查是ip否为内网地址 PHP function isIntranet($ip) {/* IPV4内网地址A 类10.0.0.0~10.255.255.255B 类172.16.0.0~172.31.255.255C 类192.168.0.0~192.168.255.255*/// 检查是否为 IPv4 内网地址if (preg_match(/^10\./, $ip…...
Leetcode刷题笔记14
136. 只出现一次的数字 136. 只出现一次的数字 - 力扣(LeetCode) 核心思想:按位异或运算 利用按位异或运算的性质来解决这个问题: 异或运算的性质: a ^ a 0:相同的数异或结果为0。 a ^ 0 a:…...
PHP图书绘本借阅管理系统小程序源码
📚 图书绘本借阅管理系统:打造孩子的阅读乐园 📚 🏷️ 引言:为什么我们需要图书绘本借阅管理系统? 在孩子的成长旅程中,阅读是不可或缺的一部分。然而,面对琳琅满目的图书和绘本&a…...
【JavaWeb】JavaWeb入门之XML详解
目录 1.XML介绍 1.1.XML概述 1.1.1.什么是XML 1.1.2.XML的作用 1.1.3.XML与HTML的比较 1.1.4.XML和properties(属性文件)比较 1.1.5.W3C组织 1.2.XML语法概述 1.2.1.XML文档展示 1.2.2.XML文档的组成部分 1.3.XML文档声明 1.3.1.什么是XML文…...
JS手写-this绑定实现
在 JavaScript 中,bind、call 和 apply 方法都可以用来改变函数的 this 指向。下面我们将分别实现这些方法的简单版本。 1. 实现 bind bind 方法创建一个新的函数,在调用时设置 this 值,并返回这个新的函数。 Function.prototype.myBind …...
【时间之外】IT人求职和创业应知【31】
目录 新闻一:2024年“秦创原沣东杯”陕西省科技工作者创新创业大赛颁奖仪式暨沣东新城机器人产业发展大会盛大启幕 新闻二:声网CEO赵斌:RTE将成为生成式AI时代AI Infra的关键部分 新闻三:“5G工业互联网”融合应用试点城市名单…...
如何使用ffmpeg命令行进行录屏
录屏软件,我们去网上下载,发现有很多软件都是要收费的!但是录屏功能很难做吗?为啥都需要收费呢? 于是我整了个小demo,用于实现基础的屏幕录制功能。 思路很简单,考虑到 FFMpeg.exe是一个非常成…...
ODOO学习笔记(8):模块化架构的优势
灵活性与可定制性 业务流程适配:企业的业务流程往往因行业、规模和管理方式等因素而各不相同。Odoo的模块化架构允许企业根据自身的具体业务流程,选择和组合不同的模块。例如,一家制造企业可以启用采购、库存、生产和销售模块,并通…...
数字IC后端实现之Innovus specifyCellEdgeSpacing和ICC2 set_placement_spacing_rule的应用
昨天帮助社区IC训练营学员远程协助解决一个Calibre DRC案例。通过这个DRC Violation向大家分享下Innovus和ICC2中如何批量约束cell的spacing rule。 数字IC后端手把手实战教程 | Innovus verify_drc VIA1 DRC Violation解析及脚本自动化修复方案 下图所示为T12nm A55项目的Ca…...
每日小练:Day2
1.乒乓球筐 题目链接:乒乓球筐__牛客网 题目描述: 这道题主要考察B盒是不是A盒的子集,我们可以通过哈希表来做 单哈希表 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public stat…...
ubuntu 安装kafka-eagle
上传压缩包 kafka-eagle-bin-2.0.8.tar.gz 到集群 /root/efak 目录 cd /root/efak tar -zxvf kafka-eagle-bin-2.0.8.tar.gz cd /root/efak/kafka-eagle-bin-2.0.8 mkdir /root/efakmodule tar -zxvf efak-web-2.0.8-bin.tar.gz -C /root/efakmodule/ mv /root/efakmodule/efak…...
深入理解指针
在初步了解了指针的用法之后,我们可以想一想,既然一个变量有地址,而且在上一篇文章中我们知道了一个数组也有地址,那么函数、字符串这些东西有没有地址呢?如果有,那这些地址有什么用?我们又要怎…...
自动驾驶合集(更新中)
文章目录 车辆模型控制路径规划 车辆模型 车辆模型基础合集 控制 控制合集 路径规划 规划合集...
Chapter 14 scoped样式以及data函数
欢迎大家订阅【Vue2Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 1 scoped样式1.1 全局样式1.2 局部样式1.3 工作原理2 data函数 1 scoped样式 1.1 全局样式 全局样式是指作用于整个应用程序的样式,不论在哪个组件中定义&#x…...
Golang | Leetcode Golang题解之第557题反转字符串中的单词III
题目: 题解: func reverseWords(s string) string {length : len(s)ret : []byte{}for i : 0; i < length; {start : ifor i < length && s[i] ! {i}for p : start; p < i; p {ret append(ret, s[start i - 1 - p])}for i < le…...
区块链技术在电子政务中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 区块链技术在电子政务中的应用 区块链技术在电子政务中的应用 区块链技术在电子政务中的应用 引言 区块链技术概述 定义与原理 发…...
Simulink中Matlab function使用全局变量
目录 一. 引言二. 普通Matlab function使用全局变量三. Simulink中的Matlab function使用全局变量四. 如何利用Matlab function的全局变量施加随机噪声 一. 引言 最近发现了之前仿真中的一个问题,记录一下备忘。 Matlab function中有时候需要用到全局变量…...
WPF-控件的属性值的类型转化
控件的属性值需要转成int、double进行运算的,可以使用一下方法 页面代码 <StackPanel Margin"4,0,0,0" Style"{StaticResource Form-StackPanel}"> <Label Content"替换后材料增加金额ÿ…...
海思Hi3516DV300上播放G711U音频文件
在海思Hi3516DV300芯片运行Linux系统下,可通过如下函数来实现G711U音频文件的播放: int ADecPlayVoiceFile(const char* filename) {FILE* pfd;AUDIO_STREAM_S stStream;HI_S32 s32Ret,length,decLength,allLength 0,aChn 0;HI_U8 buf[SAMPLE_AUDIO_P…...
Linux源码阅读笔记-V4L2框架基础介绍
V4L2视频设备驱动基础 V4L2 是专门为 Linux 设备设计的整套视频框架(其主要核心在 Linux 内核,相当于 Linux 操作系统上层的视频源捕获驱动框架)。为上层访问系统底层的视频设备提供一个统一的标准接口。V4L2 驱动框架能够支持多种类型设备&…...
Memos笔记数据安全吗?手把手教你配置自动备份到GitHub/对象存储(防丢指南)
Memos数据安全全攻略:从本地备份到云端同步的完整方案 Memos作为一款轻量级开源笔记工具,凭借其简洁界面和本地存储特性赢得了不少用户青睐。但数据安全始终是悬在每位用户心头的一把剑——服务器宕机、硬盘损坏、误操作删除都可能让珍贵笔记瞬间消失。本…...
Maxwell Fields Calculator双模式切换指南:堆栈与代数表达式输入实战解析
Maxwell Fields Calculator双模式切换指南:堆栈与代数表达式输入实战解析 在电磁仿真领域,Maxwell Fields Calculator一直是工程师进行后处理分析的利器。随着2025 R1版本的推出,一项革命性的功能——双模式表达式输入,彻底改变了…...
蓝桥杯备赛:Floyd、Bellman-Ford、Dijkstra,三大最短路算法到底怎么选?(附场景对比与代码模板)
蓝桥杯竞赛:Floyd、Bellman-Ford、Dijkstra三大最短路算法实战指南 在算法竞赛的战场上,最短路问题就像是一道必考题,而Floyd、Bellman-Ford和Dijkstra这三大算法则是解题的利器。但很多选手在面对具体问题时常常陷入选择困难:该用…...
如何用开源工具实现3D打印钥匙自由?从参数测量到模型生成的实践路径
如何用开源工具实现3D打印钥匙自由?从参数测量到模型生成的实践路径 【免费下载链接】keygen OpenSCAD tools for generating physical keys 项目地址: https://gitcode.com/gh_mirrors/ke/keygen 在数字化制造蓬勃发展的今天,3D打印技术正逐步走…...
硬币凑钱--动态规划--完全背包的变式
1.硬币凑钱import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int nsc.nextInt();//背包问题的其中一种int[] dpnew int[n1];for(int i1;i<n…...
Phi-3-mini-4k-instruct-gguf实战教程:开箱即用的轻量中文问答部署指南
Phi-3-mini-4k-instruct-gguf实战教程:开箱即用的轻量中文问答部署指南 1. 认识Phi-3-mini-4k-instruct-gguf Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个模型特别适合处理中文问答、文本改写、摘要整理以及简短创作等任务。…...
OpenCode效果实测:基于Qwen3-4B的代码生成质量与速度展示
OpenCode效果实测:基于Qwen3-4B的代码生成质量与速度展示 1. 项目概览与技术背景 OpenCode是2024年开源的AI编程助手框架,采用Go语言开发,主打"终端优先、多模型、隐私安全"的设计理念。该项目将大语言模型(LLM)包装成可插拔的Ag…...
专业安防怎么选?奥尔特云与普通摄像头核心性能对比
不少人认为安防摄像头只是“能录像、能看见”就够,选型无需太过考究,实则这是安防系统搭建的关键误区。安防系统的核心是精准感知、有效采集,而摄像头作为前端核心采集设备,是所有安防数据的源头。若源头的画面质量、感知能力不达…...
Python新手福音:借助快马AI零基础构建你的第一个行情网站
作为一个刚接触Python的新手,想要构建一个行情网站听起来可能有点吓人。但通过InsCode(快马)平台的AI辅助,整个过程变得异常简单。下面我就分享一下自己从零开始搭建第一个行情网站的经历。 数据获取部分 首先需要找到一个免费的金融数据接口。我选择了一…...
2026前端面试题
1.vue的通信方式Vue组件通信方式根据组件间的关系(父子、兄弟、跨级、任意组件)可分为多种方案。一、父子组件通信props(父-子)父组件通过属性向子组件传递数据,子组件通过defineProps接收<!-- 父组件 --> <C…...
