码迷,mamicode.com
首页 > 系统相关 > 详细

遍历交换机里面的mac地址,与公司登记mac合法的mac地址进行对比

时间:2015-08-20 15:32:09      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:交换机 mac黑名单 登记 筛选 比对



脚本目的:查找mac黑名单


日    期:2015年08月20日

联系邮箱:linux_lcl@163.com

Q Q  群:1851 15701

51CTO博客首页:http://990487026.blog.51cto.com


开源社区,有你更精彩!



简介:

遍历交换机里面的mac地址,与公司登记mac合法的mac地址进行对比,匹配到了是合法的,未匹配到就是黑名单。



需求分析:查找mac黑名单


公司登记的PC,MAC,Server设备的mac地址,有一个表单 rmac文件

公司登记的是这样的格式 94-de-80-61-**-**


实际在交换机里面会与公司登记的mac1情况不一样,那么把交换机的mac地址,telnet界面复制出来,smac文件保存起来

实际交换机复制出来是这样的格式

IP Address       MAC Address     VLAN ID  Port Name / AL ID      Aging     Type
192.168.**.**     fa16-3e2f-a4**  200      GigabitEthernet1/0/**  11        D


那么问题来了,我要将公司登记的mac地址与交换机里面存在的mac地址,逐一比对,匹配到了,就OK,如果循环结束,没有被匹配到的,那么我是否可以理解为,设个设备是没有经过公司的登记,私自入网的,或者相关登记人员,在登记时,因一时疏忽,写错了其中mac地址的几位,比如,把8写成B,把E写成F,等。


问题又来了,我们需要允许出错的误差范围,mac地址由12位组成,一般情况下,允许错一位,或者2位吧。


=================================================================

执行脚本的条件:

-rwxr-xr-x. 1 root root 4.3K 7月   3 16:35 rmac

-rwxr-xr-x. 1 root root  34K 7月   3 16:35 smac


公司登记的mac地址文本rmac文件,格式如:94-de-80-61-**-**

公司交换机的mac地址文本smac文件 格式如下 :

192.168.**.**     fa16-3e2f-a4**  200      GigabitEthernet1/0/**  11        D



执行脚本,会提示输入位数的误差范围,

比如:输入 0 ,就是精准匹配,一边显示匹配结果,一边保存匹配到的文件mac_range_list

没有被匹配到的,就会生成黑名单  black_list


-rwxr-xr-x. 1 root root  15K 7月   3 16:35 black_list

-rwxr-xr-x. 1 root root 6.3K 7月   3 16:35 mac_range_list


因为我安装了python2.7,所以首行这么写。


说明:该脚本跳过对比 192.168.6.1.0网段,与192.168.200.0网段


================脚本开始==========================


#!/usr/local/python27/bin/python2.7
#screen cls
print "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
print "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
print "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
print "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
new1=open(‘mac_range_list‘,‘w‘)
new2=open(‘black_list‘,‘w‘)
import re
kong=[]
keystr=raw_input("Enter Error Range [0-12]  ")
key=int(keystr)

new1.write("Error Range "+keystr+"\n")
r1=r"\w\w\w\w-\w\w\w\w-\w\w\w\w"
r2=r"\w\w-\w\w-\w\w-\w\w-\w\w-\w\w"

stat2=1
stat4=0
stat5=0
# open switch mac 
for i in open(‘smac‘):
    # judge i is empty ?  
    judge1=i.find("192")
    if (judge1!=0):
        continue
    # as space split a list
    b1=i.split(‘ ‘)         
    # remove empty element 
    while ‘‘ in b1:             
        b1.remove(‘‘)
    #b[0] is ip
    sip=b1[0]
    # as "." split ip ziduan
    sip_list=sip.split(".")
    #sip_list[2] is wang duan
    sip_3=sip_list[2]
    sip_3=int(sip_3)
    # skip 1 and 200 wangduan 
    if (sip_3==1): 
        continue
    if (sip_3==200): 
        continue

    #print sip_3
   
    #b1[1] is mac
    c1= b1[1]
    d1=c1.upper()
    e1=d1.replace("-","")
    #print e1
    smac_list=list(e1)    
    q=smac_list
    #print smac_list   
    len1=len(smac_list)
    #print len1
    stat3=0
    
    for j in open(‘rmac‘):
        b2=j.upper()
        r2_list=re.findall(r2,b2)
        # remove kong 
        if r2_list==kong:
            continue
        l2=b2.replace("-","")
        c2=l2.replace(‘\"‘,"")
        #print c2
        regmac_list=list(c2)
        while ‘\n‘ in regmac_list:
            regmac_list.remove(‘\n‘)
    
        while ‘\"‘ in regmac_list:
            regmac_list.remove(‘\"‘)
        w=regmac_list 
        #stat5+=1
        #print regmac_list,stat5


        #count error range ip & mac
        stat1=0

        #range conut
        for k in range(0,len1):
            if smac_list[k]==regmac_list[k]:
                stat1+=1 

        # black count  smac recoder
        if (smac_list==regmac_list):
            stat3=1
            #print e1,c2
        if (stat1==len1-key): 
            stat2str=str(stat2)
            stat2str=str(stat2)
            new1.write(stat2str+":switch   mac:"+q[0]+q[1]+"-"+q[2]+q[3]+"-"+q[4]+q[5]+"-"+q[6]+q[7]+"-"+q[8]+q[9]+"-"+q[10]+q[11]+"       IP:"+sip+"\n")
            new1.write(stat2str+":regsiter mac:"+w[0]+w[1]+"-"+w[2]+w[3]+"-"+w[4]+w[5]+"-"+w[6]+w[7]+"-"+w[8]+w[9]+"-"+w[10]+w[11]+"\n\n")
            new1.write("\n")
            print "%s :switch   Mac  :%s%s-%s%s-%s%s-%s%s-%s%s-%s%s     IP:%s"  %(stat2,q[0],q[1],q[2],q[3],q[4],q[5],q[6],q[7],q[8],q[9],q[10],q[11],sip) 
            print "%s :register Mac  :%s%s-%s%s-%s%s-%s%s-%s%s-%s%s         \n "%(stat2,w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11]) 
            stat2+=1
    


    if(stat3==0):
        stat4+=1
        str4=str(stat4)
        new2.write(str4+"  :"+i)
    #break    
new1.close()
print "Error Range %s" %key
print "total %s: " %(stat2-1)

================脚本结束=============================================



谢谢大家浏览,如对本文存在疑问,请至邮箱linux_lcl@163.com,开源社区,有你更精彩!
















遍历交换机里面的mac地址,与公司登记mac合法的mac地址进行对比

标签:交换机 mac黑名单 登记 筛选 比对

原文地址:http://990487026.blog.51cto.com/10133282/1686361

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!