IPv4子网判断

有时候,服务后端需要对客户端的所属组进行判断,以决定何种访问策略权限。而客户端IP所在子网是一种很简单易实现的分组方法。

虽然现在早已经进入IPv6时代,不过IPv4在局域网仍广泛使用,它的定义规则相对简单,本文介绍的是IPv4子网判断的算法。

一个IPv4的地址,就是4段0-255之间的数字以.隔开(实际上按二进制的话有效位数是32位),而一个子网的地址则是一个IPV4地址加掩码构成,掩码也是4段0-255之间的数字以.隔开(实际上按二进制的话有效位数是32位,一般说的掩码位数是指32位中从左到右连续1的个数),定义很简单。那么判断一个客户端的IP地址是否属于某个子网,可以按以下方法判断:

javascript 复制代码
function testip(ip) { //ip地址合法性检查 正则表达式
if (/^(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))$/.test(ip)) {
	return true
	}
else { return false }
}

function insubnet(clientip,ipsegment,mask) {
	if (testip(clientip) && testip(ipsegment) && testip(mask)) {
		let ipv4=clientip.split(".");
		let ipsv4=ipsegment.split(".");
		let maskv4=mask.split(".");
		if ( ((ipv4[0]&maskv4[0])==ipsv4[0]) && ((ipv4[1]&maskv4[1])==ipsv4[1]) && ((ipv4[2]&maskv4[2])==ipsv4[2]) && ((ipv4[3]&maskv4[3])==ipsv4[3]) ) { return true; }
		else { return false; }
		}
	else { return false; }
}

例程中对客户端IP地址、子网地址和掩码按正则表达式进行合法性检查,实际环境可能不一定需要这样操作。

相关推荐
hoLzwEge9 小时前
Volta实战:项目级Node版本管理 + 自定义安装目录
前端框架·node.js
laowang35712 小时前
依赖故障时,日志体系需要埋哪些关键节点才能快速定位是安装失败、解析失败还是运行时缺失?
前端·javascript·vue.js·webpack·node.js
不正经开发者17 小时前
Node.js process
node.js
志尊宝17 小时前
Vue3 环境搭建 + 第一个 HelloVue 项目(零基础入门)
vue.js·node.js·vue·css3
无足鸟ICT18 小时前
【RHCA+】扩展正则表达式
linux·正则表达式
liulilittle2 天前
KCC 边界缺陷深度分析:六问题根源与解决方案
网络·网络协议·tcp/ip·计算机网络·信息与通信·ip·通信
张一根2 天前
ESP32+Mqtt+Node.js+Vue3 做工控界面
node.js
TE-茶叶蛋2 天前
Node.js-Phase 1 学习总结:CLI 文件管理系统
学习·node.js
前端之虎陈随易2 天前
编程语言级别的Skill市场,AI Agent 的未来形态
前端·vue.js·人工智能·typescript·node.js
儒雅的烤地瓜3 天前
计算机网络 | 路由器局域网(内网)IP和外网(公网)IP的区别与联系
网关·tcp/ip·智能路由器·ip·外网·内网·nat技术