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

脚本目的:查找mac黑名单

日    期:2015年08月20日

联系邮箱:[email protected]

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)

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

谢谢大家浏览,如对本文存在疑问,请至邮箱[email protected],开源社区,有你更精彩!

时间: 2024-07-28 21:36:11

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

通过jQuery遍历div里面的checkbox

遍历: $('#queryUser2 input[type="checkbox"]:checked').each( function () { a = a + $(this).val() + ","; } ); 实现全选的功能: $('#chkGiftGeneral').click(function () { $('#divGiftGeneral input[type="checkbox"]').attr("checked",

Cisco交换机里IP和MAC地址互查找出对应端口

交换机:Cisco2960.Cisco G3560X 服务器:10.15.44.164 AC-*-2D-*-84-* PC:10.15.44.69 服务器44.164→port 2-Cisco2960-port1→G3560X-port5 通过IP地址查找这个IP在那台交换机的接口下 通过MAC.IP地址查询对应交换机端口 1.开始运行Nbtstat –a ip 查询出mac地址 或者直接到G3560X交换机上通过show arp查找mac地址 没发现对应关系是ARP信息超时了就被删除,ARP和

在package.json里面的script设置环境变量,区分开发及生产环境。注意mac与windows的设置方式不一样

在package.json里面的script设置环境变量,区分开发及生产环境. 注意mac与windows的设置方式不一样. "scripts": { "publish-mac": "export NODE_ENV=prod&&webpack -p --progress --colors", "publish-win": "set NODE_ENV=prod&&webpack -p -

网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?

1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步发布于:http://www.52im.net/thread-2067-1-1.html) 2.关于作者 翟志军,个人博客地址:https://showme.codes/,Github:https://github.com/zacker330.感谢作者的原创分享. 作者的另一篇<即时通讯安全篇(七)

Secure CRT 如何连接虚拟机里面的CentOS系统 当主机使用有线网的时候 作者原创 欢迎转载

1.虚拟机的网卡配置如下图所示: 2.在CentOS 5.8的命令行界面:输入如下指令 然后准备修改里面的网关地址和自己的IP地址 3.同时查看自己的IP地址和网关 4.在第二步里面修改,网关地址应该和本机的网关地址是一样的,IP地址应该和本机的IPV4地址在同一个网段上,都是192.168.0.X,虚拟机里面的CentOS系统的网关地址和主机的gateway地址设置的应该是一样的 5.修改完毕之后,虚拟机里面按ESC键,然后输入":"(冒号不用输入),回车,最后输入"wq!

Secure CRT 如何连接虚拟机里面的CentOS系统——当主机使用无线网的时候 作者原创 欢迎转载

第一步:设置自己的无线网,并且分享给VM8这个虚拟网卡 第二步:查看VM8网卡的IP地址,如图是192.168.137.1 第三步:设置虚拟机的配置:选择VM8网卡并且是NAT的 第四步:设置虚拟机里面的CentOS系统的IP地址: 命令:vi /etc/sysconfig/network-scripts/ifcfg-eth0 ip地址和第二步里面的192.168.137.1在同一个网段就行,网关就是VM8网卡的ip地址:192.168.137.1,其他的设置不变 这个是更改DNS地址的命令:

Afianl框架里面的FinalBitmap加载网络图片

在Afianl框架里,FinalBitmap如何加载网络图片?有什么简单的方法吗?现在让麦子学院的android开发老师讲讲afina框架里面的finalbitmap加载网络图片的方法,Afinal里边FinalBitmap:用于显现bitmap图像,而无需思考线程并发和oom等疑问. 1.测验恳求 运用页面翻开http://avatar.csdn.net/C/6/8/1_bz419927089.jpg"可以看到一张图像. 2.新建FinalBitmap目标 1 FinalBitmap bitm

form里面的action和method(post和get的方法)使用

一.form里面的action和method的post使用方法 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="formsubmitpost.aspx.cs" Inherits="formsubmitpost" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xh

gdb 和 addr2line 调试 crash(包含如何调试so里面的crash)

嵌入式编程中会遇到各种crash的问题. 对于这样的问题,有两种调试方法: addr2line  和 gdb. 第一章   先讲解下gcc 编译加不加 -g 对程序的影响, 还有strip. //1.1.cpp #include <iostream> using namespace std; bool IsUnique() {         int k = 0, m = 0;         k = k/m;      //这里会crash         return true; } in