netaddr 应用实例

ipremove

#!/bin/env python
import netaddr
import copy
def iprem(sumnet,subnet):
    result=copy.copy(sumnet)
    #print(sumnet)
    for net in sumnet:


        if net in subnet:

            result.remove(net)
            #print(net,subnet)

        if subnet in net and subnet!=net:
            result=result+netaddr.cidr_exclude(net,subnet)
            result.remove(net)


    return result


ip=netaddr.IPNetwork('0.0.0.0/0')
ip1=netaddr.IPNetwork('1.1.1.0/24')
ip2=netaddr.IPNetwork('3.3.3.0/24')
ip3=netaddr.IPNetwork('128.0.0.0/16')
ip4=netaddr.IPNetwork('118.194.164.0/22')
ip=netaddr.cidr_merge([ip])
result1=ip
for ip in [ip1,ip2,ip3]:
    result1=iprem(result1,ip)
for ip in result1:
    print(ip)

ipaggerate

#!/bin/env python
import netaddr
ip1=netaddr.IPNetwork('1.0.0.0/8')
ip2=netaddr.IPNetwork('1.2.0.0/16')
ip3=netaddr.IPNetwork=('32.0.0.0/16')
ipnetworks=[ip1,ip2,ip3]
netaddr.cidr_merge(ipnetworks)

地址段分析

#!/bin/env python
#coding: utf-8
import netaddr,sys
ip=netaddr.IPNetwork(sys.argv[1])
start=ip.network
stop=ip.broadcast
wangguan=start+1
print "地址段:%s 地址范围:%s————%s 网关:%s" %(ip,start,stop,wangguan)

地址段分析2

#!/bin/env python
#coding: utf-8
import netaddr,sys
ip=netaddr.IPNetwork(sys.argv[1])
start=ip.network
wangguan=start+1
stop=ip.broadcast
startformat=str(start).replace('::','')
def startipv6format(ipv6):
    startformat=str(ipv6).replace('::','')
    count=startformat.count(':')
    replace1=''
    for num in range(7-count):
        replace1=replace1+':0000'
    if not ipv6.endswith('::'):
        replace1=replace1+':'
    startformat=ipv6.replace('::',replace1)
    return startformat
if start.version==6:
    start=str(start)
    start=startipv6format(start)
if stop.version==6:
    stop=str(stop)
    stop=startipv6format(stop)
start=str(start).upper()
stop=str(stop).upper()
wangguan=str(wangguan).upper()
#print "地址段:%s 地址范围:%s————%s 网关:%s" %(ip,start,stop,wangguan)
print "地址段:%s" %ip
print "开始地址%s" %(start)
print "结束地址%s" %(stop)
print "网关:%s" %wangguan
print ""

ip生成脚本

#!/usr/bin/env python
#coding: utf-8
from netaddr import IPNetwork
import sys
ip=sys.argv[1]
ip=IPNetwork(ip)
count=ip.size
for i in range(4):
    print "%s/%s" %((ip.ip+count*i),ip.prefixlen)

ipset 比对

#!/bin/env python
import netaddr
import copy
def huizong(filename):
    ipprefixs=[]
    for line in open(filename):
        line=line.strip()
        if not line or '/' not in line:continue
        ipprefix=netaddr.IPNetwork(line)
        ipprefixs.append(ipprefix)
    return  netaddr.cidr_merge(ipprefixs)

def iprem(sumnet,subnet):
    result=copy.copy(sumnet)
    for net in sumnet:


        if net in subnet:

            result.remove(net)
        if subnet in net and subnet!=net:
            result=result+netaddr.cidr_exclude(net,subnet)
            result.remove(net)


    return result


def ip_compare(left_side,right_side):
    left=huizong(left_side)
    right=huizong(right_side)
    for line in right:
        left=iprem(left,line)
    for ip in netaddr.cidr_merge(left):
        print(ip)

if __name__=='__main__':
    #ip_compare('chnroutes.txt', 'chnroutes_original.txt')   #实际新增
    ip_compare('chnroutes_original.txt','chnroutes.txt')     #实际删除

posted @ 2022-02-12 17:14  lifei888  阅读(146)  评论(0)    收藏  举报