IPv4:根据CIDR显示地址范围
最近遇到一个很有意思的点,于是就记录下来。
CIDR一般是由IP地址和子网掩码组成,即 IP地址/子网掩码 格式。
子网掩码表示前面地址中的前多少位,为网络位,后面部分代表主机部分。例如:192.168.12.13/18,把192.168.12.13中的 每一位转为二进制后是 “11000000 10101000 00001100 00001101”,其中“/18”中的18表示“11000000 10101000 00001100 00001101”的前18位(共32位),剩余部分为主机部分。
直接上方法,本方法不支持网络位全为 0的CIDR,建议加上过滤条件:
getCIDRMessage(cidrValue) {
let value =cidrValue.split('/');
//校验IPv4格式
let ipv4test = /(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))/;
if (!ipv4test.test(value[0])) {
return { key: 'IPv4格式不正确' }
}
let val = value[0].split('.');
const sub = 32 - value[1];
let a11 = (parseInt(val[0]) << 24) | (parseInt(val[1]) << 16) | (parseInt(val[2]) << 8) | (parseInt(val[3]) << 0);
console.log(value + '--> a11 :--->' + a11);
a11 = a11 >> sub << sub;
const ipSart = a11;
const ipEnd = a11 + (1 << sub) - 1;
//开始地址
let rightStartIp = (ipSart >> 24 & 255) + '.' + (ipSart >> 16 & 255) + '.' + (ipSart >> 8 & 255) + '.' + (ipSart >>> 0 & 255);
//结束地址
let rightEndIp = (ipEnd >> 24 & 255) + '.' + (ipEnd >> 16 & 255) + '.' + (ipEnd >> 8 & 255) + '.' + (ipEnd >>> 0 & 255);
//现在想要手动设定一个地址范围,比如只想要45个地址
let ipRangeByHand = (a11 >>> 0 ) + 45;
let setRange = (ipRangeByHand >>> 24) + "." + (ipRangeByHand >> 16 & 0xFF) + "." + (ipRangeByHand >> 8 & 0xFF) + "." + (ipRangeByHand >> 0 & 0xFF);
console.log('rightStartIp :--->' + rightStartIp);
console.log('rightEndIp :--->' + rightEndIp);
console.log('setRange :--->' + setRange);
}
例如,挡在输入框内输入“3.3.3.3/24”,其地址范围经过计算是“3.3.3.0-----3.3.3.255”。结果如 下面截图:

如有问题,请指出。本文到这里就暂时结束了,转载请注明出处。谢谢~~~~
好好做人,认真生活。
IPv4:根据CIDR显示地址范围的更多相关文章
- IPv4套接字地址结构
一.IPv4套接字地址结构(POSIX定义) (1)长度字段sin_len是为增加对OSI协议的支持而随4.3BSD-Reno添加的:并不是所有的厂家都支持套接字地址结构的长度字段,而且POSIX规范 ...
- Ipv4和Ipv6的地址字符串长度
SOURCE IPv4采用32位地址长度 xxx.xxx.xxx.xxx 15max(string) IPv6采用128位地址长度 估计是 xxx.xxx.xxx.xxx. xx ...
- 百度地图小Demo---获取当前地址以及拖拽显示地址
1.效果图 2.源码 主要使用百度地图的JavaScript API文件,以及一个JQuery文件. <!doctype html> <html lang="en" ...
- 套接字编程简介: IPV4套接字地址结构/ 通用套接字地址结构/ IPV6套接字地址结构/新通用套接字地址结构
IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中. struct in_addr { in_addr_t ...
- IPv6(诞生原因、数据报格式、与IPv4的不同、地址表现形式、基本地址类型、IPv6与IPv4的过渡策略)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105297642 学习课程:<2019王道考研计算机网络> 学习目的 ...
- IPV4和IPV6 特殊地址块
https://en.wikipedia.org/wiki/Reserved_IP_addresses https://blog.csdn.net/tty521/article/details/725 ...
- springMVC报404,没有显示地址
正常报404会显示你的错误地址信息,而针对本问题 如果你使用的是springMVC框架,这就代表你的请求被拦截了
- ipv4组播预留地址
列表如下: 224.0.0.0 基准地址(保留) 224.0.0.1 所有主机的地址 224.0.0.2 所有组播路由器的地址 224.0.0.3 不分配 224.0.0.4 dvmrp 路由器 22 ...
- [codewars] - int32 to IPv4 二进制十进制 ip地址转换
原题 https://www.codewars.com/kata/int32-to-ipv4/train/java Take the following IPv4 address: 128.32.10 ...
- IOS真机Profile时调用树中的对象只是显示地址,没有显示symbol name
解决问题的办法: 1.确认工程设置中的Scheme,profile选项对应的是debug版本还是release版本 2.确认工程设置中debug版本或者release版本是否生成了符号表 " ...
随机推荐
- Redis理论
什么是Redis Redis(Remote Dictionary Server)是使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库. Redis可以存储键和五种不同类型 ...
- Diffusers 一岁啦 !
十分高兴 Diffusers 迎来它的一岁生日!这是令人激动的一年,感谢社区和开源贡献者,我们对我们的工作感到十分骄傲和自豪.去年,文本到图像的模型,如 DALL-E 2, Imagen, 和 Sta ...
- Linux-用户管理命令(必须是超级管理员-root)
useradd [名字] 创建一个新用户 (home 下创建) useradd -d [路径][名字] 路径中的名字是文件 , 登录用的后面的名字 passwd [用户名] 设置密码, ...
- Vue笔记(一)
1. Vue.js是什么? 1). 一位华裔前Google工程师(尤雨溪)开发的前端js库 2). 作用: 动态构建用户界面 3). 特点: * 遵循MVVM模式 * 编码简洁, 体积小, 运行效率高 ...
- 合并两个不同远程仓库的Git命令
一.需求场景描述 远程仓库A:http://XXXA.git 远程gitlab,团队协作开发主仓库,新仓库 远程仓库B:http://XXXB.git 旧仓库 从A仓库和B仓库,都对同一个项目进行过开 ...
- 解读 --- Span<T>
引言 Span<T> 是C# 中的一种结构体,它是一种内存安全的类型,可以用来表示连续的内存区域.Span<T> 可以被用于访问和操作数组.堆上分配的内存和栈上分配的内存.使用 ...
- 如何提升 API-First 设计流程
一个 API-First 设计应该具有可复用性.互操作性.可修改性.用户友好性.安全性.高效性.务实性,并且重要的是,与组织目标保持一致.这些基本特征将确保 API 能够有效地为 API- First ...
- PHP秒杀面试题
什么是秒杀系统:秒杀系统是一个处理大量并发用户请求的系统,通常用于限时促销或特定活动中,用户可以在特定时间内以抢购的方式购买商品或服务. 秒杀系统可能面临的挑战是什么?秒杀系统可能面临以下挑战: 高并 ...
- avue-crud属性配置项参数笔记分享
Avue 是一个基于Element-plus低代码前端框架,它使用JSON 配置来生成页面,可以减少页面开发工作量,极大提升效率: 虽然Avue官网上面都有这些配置说明,但是如果刚开始接触不熟悉框架的 ...
- 2023NepCTF-RE部分题解
2023NepCTF-RE部分题解 九龙拉棺 过反调试 很容易发现 void __stdcall sub_401700() 里面有tea的痕迹 接出来发现只是前半部分 #include <std ...