用正则表达式检查是IP否为内网地址

embedded/2024/11/18 7:49:31/

正则表达式检查是ip否为内网地址

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
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
}
#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(&regex[i], patterns[i], REG_EXTENDED | REG_ICASE) != 0) {// 编译失败时释放已分配的正则表达式资源for (int j = 0; j < i; j++) regfree(&regex[j]);return false;}}// 匹配所有模式for (int i = 0; i < pattern_count; i++) {if (regexec(&regex[i], ip, 0, NULL, 0) == 0) {result = true;break;}}// 释放正则表达式资源for (int i = 0; i < pattern_count; i++) {regfree(&regex[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;
}
#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;
}

http://www.ppmy.cn/embedded/138473.html

相关文章

uniapp vue3的下拉刷新和上拉加载

开启页面的下拉刷新,注意这个不是可滚动视图的下拉刷新. 一般页面建议使用页面外的,不要使用scroll-view里面的下拉刷新. pages: "pages": [ {"path": "pages/index/index","style": {"navigationBarTitleText": "首…

Java中的HTML元素设置:背景、列表与超链接

在Java中&#xff0c;当我们涉及到生成动态HTML内容或者处理与HTML相关的操作时&#xff0c;了解如何设置HTML的一些基本元素属性是非常重要的。这篇文章将重点介绍HTML中的背景设置、列表设置以及超链接设置&#xff0c;并通过Java示例代码来说明如何操作。 ## 一、HTML背景设…

湘潭大学软件工程算法设计与分析考试复习笔记(一)

文章目录 前言随机类&#xff08;第七章&#xff09;随机概述数值随机化舍伍德拉斯维加斯蒙特卡罗 模拟退火遗传人工神经网络 回溯&#xff08;第五章&#xff09;动态规划&#xff08;第四章&#xff09;后记 前言 考试还剩十一天&#xff0c;现在准备开始复习这门课了。好像全…

容器内的Jenkins使用docker部署服务,服务数据文件挂载问题

问题 docker 容器运行服务更推荐是那种无状态的服务&#xff0c;这样可以做到 “ 开箱即用 ”&#xff0c;需要持久化存储的话使用存储卷挂载数据库文件即可&#xff0c;这都是基于在宿主机上执行的&#xff1b; 现在Jenkins是在docker容器中运行&#xff0c;并需要使用docker部…

Python 小高考篇(5)自定义函数

目录 def 定义函数传入参数返回值 lambda 定义函数递归自测总结结尾 本文由Jzwalliser原创&#xff0c;发布在CSDN平台上&#xff0c;遵循CC 4.0 BY-SA协议。 因此&#xff0c;若需转载/引用本文&#xff0c;请注明作者并附原文链接&#xff0c;且禁止删除/修改本段文字。 违者…

React Hooks 深度解析与实战

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 React Hooks 深度解析与实战 React Hooks 深度解析与实战 React Hooks 深度解析与实战 引言 什么是 Hooks? 定义 为什么需要 Ho…

paddle表格识别数据制作

数据格式 其中主要数据有两个一个表格结构的检测框&#xff0c;一个是tokens&#xff0c;注意的地方是 1、只能使用双引号&#xff0c;单引号不行 2、使用带引号的地方是tokens里面 "<tr>", "<td", " colspan2", ">",&quo…

屏幕拾色器

屏幕拾色器 桌面应用开发中&#xff0c;经常需要用到拾色器&#xff0c;之前一般使用的WEB上的小工具&#xff0c;有些不方便&#xff0c;在网上找的一些小工具又附带一些乱七八糟的东西&#xff0c;故想要自己实现一个小工具。 Qt实现 Qt可以使用Qt Designer工具对ui进行编辑…