子网 IP 有效地址求取

子网 IP 有效地址求取

一、 需求:124.0.[22-25,28-29,31].0/24,117.123.16.0/22,113.73.0.0/17 只允许此区间IP传参数

二、 需求演变->需要求出每个IP区间的: 网络掩码、子网地址、广播地址、最小地址、最大地址

步骤:

1. 以113.73.0.0/17为例,详细推算如下:

2. 主机地址:01101110 01001011 00000000 00000000

3. 网络掩码:11111111 11111111 10000000 00000000

4. 子网地址:01101110 01001011 00000000 00000000 (113.73.0.0)

5. 子网地址 = 主机地址和网络掩码的与运算

6. 广播地址:01101110 01001011 01111111 11111111 (113.73.127.255)

7. 广播地址 = 子网地址和网络掩码的异或运算

8. 去掉一个网络地址(113.73.0.0)和去掉一个广播地址(113.73.127.255)

9. 最小地址:113.73.0.1

10. 最大地址:113.73.127.254

三、 涉及知识点:

1. IP 基本概念回顾:

IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节

IP地址分成了网络号和主机号两部分:

网络号的位数直接决定了可以分配的网络数(计算方法2^网络号位数)

主机号的位数则决定了网络中最大的主机数(计算方法2^主机号位数-2)

根据2 的n次方转化为容易读懂的10进制如上

2. '/17' 代表 11111111.11111111.10000000.00000000 这个是子网掩码,也叫网络码,即:255.255.128.0

子网掩码中还可获得的信息是,1表示网络位,0表示主机位,

将子网掩码中的主机位变成1就得到了广播地址

3. 根据IP和子网掩码,可以算出IP的有效范围,用AND与运算,与运算核心是:

遇 0 得0,1与1得1可获得子网IP地址,子网中可用的IP地址就在子网IP地址与广播地址之间

4. IP 里面一般会存在一个广播地址和一个网络地址,这个两个地址一般是不能用的,可以看下详细资料

5. IP地址范围算法:

1) 公司有IP地址信息查询:(如:113.73.0.0 或113.73.0.0/17) 阳戈推荐比较好的方法:

http://soc.taobao.com:9999/soc/extend/?extend_feature=acl

中宏定义查询里面的ACL管理页签,大家以后如果要用到可以去看看。

可以算出113.73.0.0/17 所指的有效IP范围(113.73.0.0 - 113.73.127.255), 

2) 可以通过子网掩码计算器(IPSubnetter),如图:

 

3) 如果都没有只有用上面的方法手动算取

6. 正则

涉及的正则语法:

1) (?:pattern)

匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。

这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。

例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

2) ^ 匹配输入字符串的开始位置,

如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。

3) 注意点,正则是一个标志位判断一次的,

例如:0-127就要分来三段来写正则校验,0-99,100-199,120-127


需求中三段IP的具体校验如下:


4) 注意:在java中使用正则,matches要求字符串整个匹配正则表达式,find要求字符串的一部分匹配表达式即可。

5) Java正则转义,如果正则如此写 pSpecialStr = Pattern.compile("[A-Za-z0-9_-.]*");执行报如下错误:

这里涉及正则的转义问题:

把“.”转义一下就可以了,方括号内中的字符类,在“.”左右两边有字符时表示一个字符到另一个字符之间的字符。而且必须是左边字符的值小于右边字符的值,这个产生语法错误的原因在于“+”的值小于“*”的值。最终可以如下写:[.A-Za-z0-9_-]*,像“-”也是一样

在普通的正则表达式中,15个具有特殊意义的元字符需要进行转义:

( [ { } ] ) \ ^ - $ | ? * + .

而在字符类中有点特殊,需要转义的有:

[ ] ^ - \

其中“-”放在字符类的两边的话,即放在左方括号右者右方括号的边上,也可以不用转义。


猜你喜欢

转载自zhoushu126.iteye.com/blog/1474630