计算ip白名单/黑名单

故事的开头是:为了安全,服务器访问应该配置一个可以访问的白名单。

过了几天,运维组提要求:得把开发的网段给剔出去,但是还要留几个ip给开发负责验证的用。

偏偏管理平台功能有限,只能设置成白名单。我这一想,如果把服务器当成头顶,可以访问的ip当做头发,那么这可是个新鲜的西洋景:

搞笑归搞笑,正事还是要干的,手工编ip太麻烦了,于是写了一段bug。基本思路是这样的:

假如中间那根头发丝和地中那个海是172.1.2.3/8,换算成二进制,分别是10101100000000010000001000000011和10101100000000000000000000000000,那么先要把海挖出来,然后直接把头发丝放进去就行了。挖海算白名单的时候,转换成二进制从高位开始,前边一样,当前位置取反,取出来的一定是头发。

def ip2bin(ip):
	s =bin(sum(map(lambda x,y:x<<y,map(int,ip.split('.')),(24,16,8,0))))
	s = s.split('b')[1]
	s = '0'*(32-len(s)) + s
	return s


def bin2ip(b):
	a=[]
	for i in range(4):
		a.append(str(int(b[i*8:i*8+8],2)))
	return '.'.join(a)


def get_setting(ip,mask):
	s_ip = ip2bin(ip)
	#s_ip
	#bin2ip(s_ip)
	s=""
	for p in range(mask):
		n= s+str(1-int(s_ip[p]) )
		s+=str( int(s_ip[p]) )
		#print( n )
		print(  '%s\t%s'%(  '%s/%d'%(  bin2ip(n + '0'*(32-p-1) )  ,p+1 )  ,   '%s - %s'%(  bin2ip(n + '0'*(32-p-1) ) , bin2ip(n + '1'*(32-p-1))  )  )  )


get_setting('172.1.2.3',8)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值