用正则表达式检查是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 驱动框架能够支持多种类型设备&…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
