为了账号安全,请及时绑定邮箱和手机立即绑定

有大佬遇到过这个问题吗:js 解析ip段为单个ip集合

有大佬遇到过这个问题吗:js 解析ip段为单个ip集合

胡说叔叔 2019-07-27 09:40:22
问题描述将一个ip段解析为单个ip集合比如:将这个128.2.2.2-128.5.67.9iprange通过一个parser后解析为[128.2.2.2,128.2.2.3,128.2.2.4,128.2.2.5,128.2.2.6,...,128.3.26.255,...,128.5.67.8,128.5.67.9]请问怎么实现这个parser?谢谢
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

思路,IP就是数字,IP段就是一段数字,现将IP字符串转换成十进制数字,遍历再转换成IP字符串
letipStr="128.2.2.2-128.5.67.9";
letSTEP=8,PART_NUM=4;
//结果
letips=parseIptoArray(ipStr)
console.log(ips)
console.log(ips[0])
console.log(ips[ips.length-1])
//IP段转换成IP数组
functionparseIptoArray(ipStr){
letrange=ipStr.split('-').map(v=>ipToInt(v))
returnnewArray(range[1]-range[0]+1).fill(range[0])
.map((v,i)=>intToIp(v+i))
}
//将字符串IP转换成int类型数据
functionipToInt(ip){
letres=ip.split('.')
.map(v=>(+v).toString(2).padStart(STEP,0))
.reduce((sum,cur)=>sum+=cur,'')
returnparseInt(res,2)
}
//将int类型的数据转换成ip类型字符串
functionintToIp(vuale){
letbinary=vuale.toString(2)
returnnewArray(PART_NUM).fill(0)
.map((v,i)=>parseInt(binary.substring(i*STEP,(i+1)*STEP),2))
.join('.');
}
                            
查看完整回答
反对 回复 2019-07-27
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

大致思路把128.2.2.2拆成4个数?然后从最后2开始累加,逢255进1直到这四个数分别等于128.5.67.9拆分的四个数为止,目前只想到这个
                            
查看完整回答
反对 回复 2019-07-27
  • 2 回答
  • 0 关注
  • 454 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号