受江苏垃圾IP骚扰,准备将江苏淮安和宿迁这两个地方的垃圾ip加入宝塔防火墙,无奈防火墙只支持CIDR格式范围,因此找到这篇文章与大家分享。

首先找到IP地址所属IP地址范围,到http://ip.bczs.net/网站输入iP地址,如下图所示:

红色方框里面的IP地址就是我们需要的,如何将这段IP转换成CIDR呢,看下文。


由于工作上的原因,经常需要给外包服务商开通访问内部系统的白名单。我们知道根据网络上通路到达web系统不同,大致上可以分为两类访问控制:

  1. nginx上的七层访问控制,完全由应用上的配置文件控制访问IP,该方式的好处也是坏处,就是需要开发明确知道并维护nginx上的白名单配置文件,同样的只要有了这份配置文件,理论上名单不会丢,应用基线可以保证多机房部署。
  2. 防火墙控制,此种方式对应用透明,应用开发不需要关心白名单控制,问题也是明显的,防火墙ACL控制在跨机房时并不能跟随,有几个机房就要同时维护几份白名单,对运维系统也有要求,同一份IP段要支持多机房下发。

故事的起点就在这,防火墙的ACL控制下发要求提供CIDR格式的规则。什么是CIDR格式?直接看自由的百科全书的解释:

无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。

CIDR看起来就是这样的: 208.130.29.0/24

比如有个需求就是208.130.29.30-35这个IP段换成CIDR格式,有几个只学过基础网络知识的开发懂这个?

作为一个开发人员做这个换算是很费劲的,比如要去网上用类似以下这个巨难用的表格来做网段和CIDR格式的换算,还要搞清楚/32 /31 /29 这些似乎跟web开发没有多大关系的知识。

在经历了痛苦和挫折后,一个偶然的机会,发现python居然有现成的类库支持此类网络操作与换算。 将以上的需求翻译成python只要几行代码搞定:

# 确定起始和结尾IP,无论多复杂都可以转换
startip = '208.130.29.30'
endip = '208.130.29.35'
cidrs = netaddr.iprange_to_cidrs(startip, endip)
for k, v in enumerate(cidrs):
    iplist = v
    print iplist

输出:
208.130.29.30/31
208.130.29.32/30

反过来,CIDR也能直接转成IP地址段:

from netaddr import *

ip = IPNetwork('192.0.2.16/29')
ip_list = list(ip)
print(ip_list)

输出:
[IPAddress(‘192.0.2.16’), IPAddress(‘192.0.2.17’), …, IPAddress(‘192.0.2.22’), IPAddress(‘192.0.2.23’)]

感谢python大法!

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。

对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。

如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理

源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源