精华内容
下载资源
问答
  • 2021-01-14 05:27:19

    思科交换机端口down或up故障原因

    接入层交换机出现故障,这个交换机的端口f0/6下连一个tp-link 的四口小交换机,上联端口为cisco 3560,有一段时间发现这个F0/6经常down ,然后过一会又up,如此反复,时间有的时候有1天,有的时候有几个小时就发作一次。后来,查了网上的文章,总结了几个原因:

    1.可能是lookback包的问题,从f0/6发送的包,又被发回了f0/6造成环路,自动就吊死,关闭了,

    2.可能是个别厂商网卡有重复?(有疑问,看下面)

    3,电脑接入模块可能铜线有交叉问题,可能当时模块没做好,导致有两根铜线打到一块了,导致本地环路。

    根据我的故障,2是排除的,3,也可以排除

    因为我查看了交换机的日志信息,命令是 : show log

    00:19:07: %PM-4-ERR_DISABLE: psecure-violation error detected on Fa0/6, putting Fa0/6 in err-disable state

    00:19:07: %PORT_SECURITY-2-PSECURE_VIOLATION: Security violation occurred, caused by MAC address 001e.9000.bcd2 on port FastEthernet0/6.

    00:19:08: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/6, changed state to down

    可反映是做了端口安全,因为我接到故障后,立即去telnet这台交换机,在端口上做了port-sercurity,

    这个命令 switchport port-sercurity后,telnet立即断了,是因为,默认情况下,端口安全只允许一个Mac访问,我换了台电脑,登录端口模式下,no shut 和shut都试了很多次,都不行,

    然后查了资料,就在全局模式下输入,

    errdisable recovery cause security-violation,

    这个命令的意思是,将那些端口由于做了端口安全被关闭的端口恢复成正常状态、这样,再在端口模式下no shu一下,就可以用了。

    所以,我想我这个应该是下联tp-link的模块没做好吧,导致了可能有两根铜线搞到了一起。导致本地环路。不过,问题是解决了

    更多相关内容
  • MRTG监测交换机端口流量图解MRTG(MultiRouter Traffic Grapher, MRTG)是基于SNMP的典型网络流量统计分析工具。它通过SNMP协议从设备得到其流量信息,并将流量负载以包含JPEG格式图形的HTML文档的方式显示给用户,以...

    MRTG监测交换机端口流量图解

    MRTG(MultiRouter Traffic Grapher, MRTG)是基于SNMP的典型网络流量统计分析工具。它通过SNMP协议从设备得到其流量信息,并将流量负载以包含JPEG格式图形的HTML文档的方式显示给用户,以非常直观的形式显示流量负载。是一款应用非常广泛的网络流量统计工具。现在就根据自己的实际工作,讲解一下如何使用MRTG来监控交换机每个端口的流量。

    环境介绍:MRTG安装在Windows 2000 管理工作站上

    需要管理的两台交换机:

    Foundery Serveriron 800 四层交换机(IP address:10.86.11.138)

    Foundery Bigiron 8000 路由交换机 (IP address:10.86.11.139)

    准备工作:下载Perl for Windows NT/2000(http://www.activestate.com/)

    注意一定要下载版本 5.005 或更新的。

    下载MRTG forWindows NT/2000(http://people.ee.ethz.ch/~oetiker/WEBtools/mrtg/pub)

    需要知道交换机设备的 read-only SNMP community string

    笔者实际使用:ActivePerl-5.8.0.804-MSWin32-x86.zip

    mrtg-2.9.25 .zip

    两台交换机的read-only SNMP community string都是sdcdn

    软件安装:

    1.mrtg的安装

    只需把mrtg-2.9.25.zip解压到windows 2000 管理工作站上C:\mrtg目录下即可

    2.Perl的安装

    将ActivePerl-5.8.0.804-MSWin32-x86.zip解压后,会产生一个批处理文件:Installer.bat,双击 installer.bat。按照提示安装即可。默认安装目录是c:\perl。

    注意:查看控制面板---系统---高级---环境变量中变量path是否包含c:\perl\bin 的路径,若未包含,须编辑加入。

    3.生成MRTG默认的配置文件(可以自定义文件名,例如mrtg.cfg)

    运行 c:\mrtg\bin >perl cfgmaker sdcdn@10.86.11.138 sdcdn@10.86.11.139 --global "workdir: c:\netmanager" --output mrtg.cfg

    补充说明:10.86.11.138 10.86.11.139 分别是两台交换机的IP address;

    注意首先要保证c:\netmanager目录的存在。

    4.启动MRTG

    运行命令 c:\mrtg\bin>start /D c:\mrtg\bin wperl mrtg –logging=eventlog mrtg.cfg

    此时在c:\netmanager目录下产生大量的html文件

    由于每个端口相应产生一个html文件,不利于管理,我们可以继续汇总成一个html文件,在一个页面上监测所有交换机的端口。

    运行命令 c:\mrtg\bin>perl indexmaker mrtg.cfg --output=c:\netmanager\index.html

    这时会在c:\netmanager下产生文件index.html,打开观察

    至此,mrtg配置基本完成,现在您就可以轻松自如的监测交换机端口的流量了,还不抓紧体验一下!MRTG功能多多,例如:监测网络服务器的CPU利用率,带宽等等,感兴趣的读者可以继续研究!

    本文来自于胖鲨鱼网

    展开全文
  • 1、交换机端口state 由online转为no_light的时候,邮件告警交换机IP,对应端口以及对应的主机。【频次5分钟一次】 2、交换机光衰:交换机端口 为online,且rx power <300的时候,则发送告警邮件【一天两次】 以上...

    【背景:】公司最近一段时间虚拟机问题较多,由此引申出来对存储交换机的监控。

    【目标:】
    1、交换机端口state 由online转为no_light的时候,邮件告警交换机IP,对应端口以及对应的主机。【频次5分钟一次】
    2、交换机光衰:交换机端口 为online,且rx power <300的时候,则发送告警邮件【一天两次】
    以上规则由相应的运维人员提出,因厂而异

    【实现过程:】
    1、连接交换机并执行命令switchshow,sfpshow,alishow
    2、将命令结果保存至数据库
    3、对数据库数据进行分析。数据库为mysql8.0,若版本过低,则可能无法执行row number over (partition by )的语句
    4、发送邮件

    【代码:】
    1.py 实现目标1
    入库及online->no_light分析

    # _*_ coding=utf-8 _*_
    import paramiko
    import datetime,time,re
    import os
    import sys,logging
    # import socket
    import platform
    import xlwt,pymysql,gc
    import smtplib,base64
    import email.mime.text
    import email.mime.multipart
    # from email.mime.text import MIMEText
    # from email.mime.multipart import MIMEMultipart
    from email.mime.application import MIMEApplication
    
    day = time.strftime('%Y%m%d',time.localtime())
    inserttime = time.strftime('%Y%m%d%H%M',time.localtime())
    inserttime_read=inserttime[0:4]+"年"+inserttime[4:6]+"月"+inserttime[6:8]+"日 "+inserttime[8:10]+":"+inserttime[10:12]
    h = time.strftime('%Y%m%d%H',time.localtime())
    
    
    
    def sendmail(context,email_subject,file_excel_path= r"/root/switch/excel/SanSwitch", file_problem="SanSwitch_problem" ):
        form_adder = 'xxx@163.com'
        str_pwd = base64.b64decode("RGVkYzM0NTQjds").decode("utf-8") ##应公司要求,做了个简单的加密
        to_adder = ['xxx@xxx.com','xxx@xxx.com']
        smtp_server = 'xxxx.com'
    
        msg = email.mime.multipart.MIMEMultipart()
        txt = email.mime.text.MIMEText(context, 'plain', 'utf-8')
    
        msg['From'] = form_adder
        msg['To'] = ','.join(to_adder)
        msg['subject'] = str(inserttime_read)+ email_subject
        msg.attach(txt)
    
        ret = True
        try:
            server = smtplib.SMTP(smtp_server,25)
            # tls 方式验证
            server.starttls()
            server.login(form_adder,str_pwd)
            server.sendmail(form_adder,to_adder,msg.as_string())
            server.quit()
        except Exception as e:
            print(e)
            ret = False
        return ret
    
    
    
    def ssh_connect(ip,username,password,cmd,port=22):
        a=[]
        b=[]
        c=[]
        ssh = paramiko.SSHClient()  # 创建一个ssh客户端对象
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 设置以什么方式连接远程客户端,这里配置自动协商
        try:
            ssh.connect(hostname=ip, port=2222, username=username, password=password)  # 通过账号密码连接远程客户端
            for n in range(len(cmd)):
                stdin, stdout, stderr = ssh.exec_command(cmd[n])  # 远程执行命令,结果会返回标准输入、标准输出、标准错误输出
                # print(cmd[n])
                if n==0:
                    for i in stdout.readlines():        #            *******************************************************
                        i = i.strip()                   #            *                         祝                           *
                        j = i.split()                   #            *                         祖                           *
                        a.append((' '.join(j)))         #            *                         国                           *
                if n==1:                                #            *                         繁                           *
                    for i in stdout.readlines():        #            *                         荣                           *
                        i = i.strip()                   #            *                         富                           *
                        j = i.split()                   #            *                         强                           *
                        b.append((' '.join(j)))         #            *                         国                           *
                if n==2:                                #            *                         泰                           *
                    for i in stdout.readlines():        #            *                         民                           *
                        i = i.strip()                   #            *                         安                           *
                        j = i.split()                   #            *                                                      *
                        c.append((' '.join(j)))         #            ********************************************************
    
    
            ssh.close()
            return a,b,c
        except Exception as e:
            print("Exception:",e)
            connect_error_ip.append(ip)
            return a,b,c
    
    
    
    
    #连接数据库
    conn1=pymysql.connect(host='xx.xx.xx.xx',user='user',password=base64.b64decode("SUplVmhYTYSIDD82ZhNWpI").decode("utf-8"),database='devops', charset='utf8')
    cursor=conn1.cursor()
    
    ##设计3个表
    SQL_create_switchshow='create table if not exists pvs_switchshow' \
                      ' (id int NOT NULL AUTO_INCREMENT,' \
                      'insertTime varchar(45) COLLATE utf8_bin DEFAULT NULL,' \
                      'switchname varchar(20),ip varchar(16)  not null ,' \
                      'Index_switch varchar(5),' \
                      'port varchar(5),' \
                      'Address varchar(10),' \
                      'Media varchar(5),' \
                      'Speed varchar(5),' \
                      'State varchar(20),' \
                      'proto varchar(10),' \
                      'proto_port varchar(10),' \
                      'wwn varchar(30),primary key(id) )'
    
    SQL_create_sftpshow = " CREATE TABLE if not exists `pvs_sfpshow` (    `id` INT NOT NULL AUTO_INCREMENT,    " \
          "insertTime VARCHAR(45) COLLATE UTF8_BIN DEFAULT NULL, " \
          "IP VARCHAR(45) COLLATE UTF8_BIN DEFAULT NULL, " \
          "port VARCHAR(45)CHARACTER SET UTF8 COLLATE UTF8_BIN DEFAULT NULL,   " \
          "rx_dbm VARCHAR(45)CHARACTER SET UTF8 COLLATE UTF8_BIN DEFAULT NULL,    " \
          "rx_uw VARCHAR(45)CHARACTER SET UTF8 COLLATE UTF8_BIN DEFAULT NULL,    " \
          "tx_dbm VARCHAR(45)CHARACTER SET UTF8 COLLATE UTF8_BIN DEFAULT NULL,    " \
          "tx_uw VARCHAR(45)CHARACTER SET UTF8 COLLATE UTF8_BIN DEFAULT NULL,    PRIMARY KEY (`id`))  " \
          "ENGINE=INNODB AUTO_INCREMENT=18183 DEFAULT CHARSET=UTF8MB3 COLLATE = UTF8_BIN"
    
    
    SQL_create_alishow = "CREATE TABLE if not exists `pvs_alishow` (    `id` INT NOT NULL AUTO_INCREMENT,    " \
          "`insertTime` VARCHAR(45) COLLATE UTF8_BIN DEFAULT NULL, " \
          "IP VARCHAR(45) COLLATE UTF8_BIN DEFAULT NULL, " \
          "  `aliasname` VARCHAR(45)CHARACTER SET UTF8 COLLATE UTF8_BIN DEFAULT NULL,   " \
          " `wwn` VARCHAR(200)CHARACTER SET UTF8 COLLATE UTF8_BIN DEFAULT NULL,    " \
          " PRIMARY KEY (`id`))  " \
          "ENGINE=INNODB AUTO_INCREMENT=18183 DEFAULT CHARSET=UTF8MB3 COLLATE = UTF8_BIN"
    
    ##数据库建索引
    '''
    create index sfpshow_inserttime on devops.pvs_sfpshow(inserttime);
    create index switchshow_inserttime on devops.pvs_switchshow(inserttime);
    create index alishow_inserttime on devops.pvs_alishow(inserttime)
    '''
    
    
    
    #创建三张表
    # print(SQL_create_switchshow)
    cursor.execute(SQL_create_switchshow)
    cursor.execute(SQL_create_sftpshow)
    cursor.execute(SQL_create_alishow)
    
    
    ## 命令列表
    cmd = ["switchshow","sfpshow -all|grep -E 'TX|RX|Port'","alishow"]
    sfpshow_problem_list=[]  ##光衰问题列表
    count=0  ##光衰问题计数
    switchshow_problem_list=[] #问题交换机列表
    connect_error_ip=[]
    ip_list=['XX.XX','XX.XX']
    for ip in ip_list:
        l1,l2,l3 = ssh_connect(ip=ip,port=22,username="XXXX",password="XXXX",cmd=cmd)#此处阔以加密
        if l1 != []:
            switchName = l1[0].split(":")[1].strip()
            # print(switchName)
            ##switchshow 命令结果进行入库
            for i in range(len(l1)):
                if re.match("^\d",l1[i]):
                    #print(l1[i])
                    if l1[i].split()[5] == 'Online':
                        # print(l1[i].split()[0], l1[i].split()[5],l1[i].split()[8])
                        if len(l1[i].split()[8]) != 1:
                            # print(len(l1[i].split()[8]))
                            SQL1="insert into devops.pvs_switchshow (insertTime,switchName,ip,Index_switch,port,Address,Media,Speed,State,proto,proto_port,wwn)" \
                                 " values ("+inserttime+",\""+switchName+"\","+\
                                 "\""+ip+"\","+\
                                 "\""+l1[i].split()[0]+"\","+\
                                 "\""+l1[i].split()[1]+"\","+\
                                 "\""+l1[i].split()[2]+"\","+\
                                 "\""+l1[i].split()[3]+"\","+\
                                 "\""+l1[i].split()[4]+"\","+\
                                 "\""+l1[i].split()[5]+"\","+\
                                 "\""+l1[i].split()[6]+"\","+\
                                 "\""+l1[i].split()[7]+"\","+\
                                 "\""+l1[i].split()[8] +"\")"
                            print(SQL1)
                            cursor.execute(SQL1)
                            conn1.commit()
                        else:
                            # print("特殊情况")
                            # print(len(l1[i].split()[8]))
                            t=l1[i].split()[8]+' '+l1[i].split()[9]+' '+l1[i].split()[10]+' '+l1[i].split()[11]+' '+l1[i].split()[12]+' ' + \
                              l1[i].split()[13] + ' '+l1[i].split()[14]
                            # print(t)
                            SQL1 = "insert into devops.pvs_switchshow (insertTime,switchName,ip,Index_switch,port,Address,Media,Speed,State,proto,proto_port,wwn)" \
                                   " values ("+inserttime+",\""+switchName+"\","+\
                                   "\""+ip+"\","+\
                                   "\""+l1[i].split()[0]+"\","+\
                                   "\""+l1[i].split()[1]+"\","+\
                                   "\""+l1[i].split()[2]+"\","+\
                                   "\""+l1[i].split()[3]+"\","+\
                                   "\""+l1[i].split()[4]+"\","+\
                                   "\""+l1[i].split()[5]+"\","+\
                                   "\""+l1[i].split()[6]+"\","+\
                                   "\""+l1[i].split()[7]+"\","+\
                                   '\"' + t + '\")'
                            print(SQL1)
                            cursor.execute(SQL1)
                            conn1.commit()
                    else:
                        #print(l1[i].split()[0], l1[i].split()[5])
                        SQL1 = "insert into devops.pvs_switchshow (insertTime,switchName,ip,Index_switch,port,Address,Media,Speed,State,proto)" \
                               " values ("+inserttime+",\""+switchName+"\","+\
                               "\""+ip+"\","+\
                               "\""+l1[i].split()[0]+"\","+\
                               "\""+l1[i].split()[1]+"\","+\
                               "\""+l1[i].split()[2]+"\","+\
                               "\""+l1[i].split()[3]+"\","+\
                               "\""+l1[i].split()[4]+"\","+\
                               "\""+l1[i].split()[5]+"\","+\
                               '\"' + l1[i].split()[6] + '\")'
                        print(SQL1)
                        cursor.execute(SQL1)
                        conn1.commit()
                    '''
                    #print(l1[i].split()[0])
                    if A == None:
                        A="AlarmState_10_3_125_203_list_"+l1[i].split()[0]
                    if B == None:
                        B=l1[i].split()[5]
            
                    exec("{}=B".format(A))
                    print(A)
                    print(B)
                    '''
    
    
        ##SFPSHOW 命令数据入库
        # print("L2++++++++++++++++++++++++++++++++++++++++")
    
    
        if l2 != []:
            for i in range(len(l2)):
                #print(l2[i])
                if "RX Power" in ''.join(l2[i]):
                    if "inf" not in ''.join(l2[i]):
                        if "inf" not in ''.join(l2[i + 1]):
                            #print('10.3.125.203', i)
                            port = l2[i - 1].split()[1].split(":")[0]
                            RX_DBM = l2[i].split('dBm')[0].split(':')[1].strip()
                            TX_DBM = l2[i + 1].split('dBm')[0].split(':')[1].strip()
                            RX_UW = l2[i].split('uW')[0].split('(')[1].strip()
                            TX_UW = l2[i + 1].split('uW')[0].split('(')[1].strip()
                            SQL1 = r'insert into devops.pvs_sfpshow (insertTime,IP,port,rx_dbm,rx_uw,tx_dbm,tx_uw) values("%s","%s","%s","%s","%s","%s","%s")' % \
                                   (inserttime, ip, port, RX_DBM, RX_UW, TX_DBM, TX_UW)
                            # print(SQL1)
                            cursor.execute(SQL1)
                            conn1.commit()
                            ## 因要关联alishow,此处的将改为sql查询方式
                            # if float(RX_UW) <= 300.0 and float(RX_DBM) < -5.0:
                            #     text = "switchname:" + ip + "  port:" + port + "  RX_POWER_DBM:" + RX_DBM + "  RX_UW:" + RX_UW + "  TX_POWER_DBM:" + TX_DBM + "  TX_UW:" + TX_UW
                            #     sfpshow_problem_list.append(text)
                            #
                            #     ##问题计数
                            #     count = count + 1
    
        # print(count)
        # print('\n'.join(sfpshow_problem_list))
    
    
    
        # print("L3++++++++++++++++++++++++++++++++++++++++")
        if l3 != []:
            L3=' '.join(l3).replace('alias','\nalias').replace('zone','\nzone').replace('Effective','\nEffective')
            # print(l3)
            list_alishow=L3.split('\n')
            for i in range(len(list_alishow)):
               if re.match('^alias',list_alishow[i]):
                    #print(list_alishow[i])
                    wwn=" ".join(list_alishow[i].split()[2:])
                    server_name=list_alishow[i].split()[1]
                    SQL1="insert into devops.pvs_alishow (insertTime,IP,aliasname,wwn) " \
                         "values (" + inserttime +",\""  +ip+"\",\""+server_name+"\",\""+wwn+"\")"
                    print(SQL1)
                    cursor.execute(SQL1)
                    conn1.commit()
    ##找出状态变化的port【从online变为no_light】
    '''
    select tt1.port,tt1.ip,tt1.inserttime,tt1.switchname,tt1.state from 
            (select *,row_number() over (partition by port,ip,switchname order by inserttime desc) as t from devops.pvs_switchshow )tt1 
         where  exists  
            (select port,state from 
                (select *,row_number() over (partition by port,ip,switchname order by inserttime desc) as t from devops.pvs_switchshow )tt2 
            where tt2.t=2 and tt2.state='Online' and tt1.port=tt2.port ) and tt1.t=1 and tt1.state='No_Light';
    
    '''
    
    ### 找出状态变化的port【从online变为no_light】,状态变化的时间范围8天,alishow表里匹配不出则显示none
    SQL1="select ttttt.*,tt3.aliasname,tt3.t from " \
            "(select tt1.switchname,tt1.ip,tt1.port,tt1.inserttime,tt1.state,tt2.inserttime tt2_inserttime,tt2.state tt2_state,tt2.wwn " \
                "from         " \
                    "(select *,row_number() over (partition by port,ip,switchname order by inserttime desc) as t " \
                        "from devops.pvs_switchshow             " \
                            "where inserttime>=date_format(date_sub(now(), interval 8 day),'%Y%m%d%H%i'))tt1 ,                 " \
                     "(select *,row_number() over (partition by port,ip,switchname order by inserttime desc) as t " \
                        "from devops.pvs_switchshow         " \
                            "where inserttime>=date_format(date_sub(now(), interval 8 day),'%Y%m%d%H%i'))tt2            " \
                    "where tt2.t=2 and tt2.state='Online' and tt1.port=tt2.port and tt1.ip=tt2.ip and tt1.t=1 and tt1.state='No_Light' )ttttt" \
         " left join              " \
            "(select aliasname,inserttime t3_inserttime,wwn ,row_number() over (partition by aliasname order by inserttime desc) as t " \
                "from devops.pvs_alishow where inserttime>=date_format(date_sub(now(), interval 8 day),'%Y%m%d%H%i')) tt3     " \
         " on ttttt.wwn=tt3.wwn  where tt3.t=1 or tt3.t is null";
    cursor.execute(SQL1)
    res=cursor.fetchall()
    list_problem=list(res)
    if len(list_problem) != 0:
        context_status_change = inserttime_read+'时交换机状态变化online → No_Light的端口数量有:'+str(len(list_problem))+"个\n分别是:\n"
        for i in list_problem:
            # print("交换机 {} {}:{}端口 由 {}时的状态:{} 在 {} 时转变为:{},对应的服务器是{},wwn是{} ".format(
            #     i[0],i[1],i[2],i[5],i[6],i[3],i[4],i[8],i[7]))
            context_status_change = context_status_change +"\n交换机 {} {}:{}端口 由 {}时的状态:{} 在 {} 时转变为:{},对应的服务器是{},wwn是{} ".format(i[0],i[1],i[2],i[5],i[6],i[3],i[4],i[8],i[7])
        print("\n\n\n")
    else:
        context_status_change = inserttime_read + '时所有交换机没有端口发生变化:online → No_Light\n\n'
    ###sfpshow关联alishow表
    
    
    
    
    
    
    
    ##邮件内容
    print(context_status_change)
    if len(connect_error_ip)!=0 or len(list_problem) !=0:
        sendmail(context="ssh登录不上的IP有:\n"+'\n'.join(connect_error_ip)+'\n\n\n\n\n'+context_status_change,email_subject='存储交换机监控告警信息')
    # print('\n'.join(l1))
    # print('\n'.join(l2))
    ##邮件格式
    print(connect_error_ip)
    print(inserttime[0:4]+"年"+inserttime[4:6]+"月"+inserttime[6:8]+"日 "+inserttime[8:10]+":"+inserttime[10:12])
    cursor.close()
    conn1.close()
    
    
    

    光衰的脚本2.py 实现目标2
    代码如下

    # _*_ coding=utf-8 _*_
    import paramiko
    import datetime,time,re
    import os
    import sys,logging
    # import socket
    import platform
    import xlwt,pymysql,gc
    import smtplib,base64
    import email.mime.text
    import email.mime.multipart
    # from email.mime.text import MIMEText
    # from email.mime.multipart import MIMEMultipart
    from email.mime.application import MIMEApplication
    
    
    day = time.strftime('%Y%m%d',time.localtime())
    inserttime = time.strftime('%Y%m%d%H%M',time.localtime())
    h = time.strftime('%Y%m%d%H',time.localtime())
    inserttime_read=inserttime[0:4]+"年"+inserttime[4:6]+"月"+inserttime[6:8]+"日 "+inserttime[8:10]+":"+inserttime[10:12]
    
    
    
    
    def sendmail(context,email_subject,file):
        form_adder = 'xxx@163.com'
        str_pwd = base64.b64decode("RGDSDSWSDVkYzM0NTQj").decode("utf-8")
        to_adder = ['XXX@163.com','XXXX@163.com']
        smtp_server = 'XXX.com'
    
        msg = email.mime.multipart.MIMEMultipart()
        txt = email.mime.text.MIMEText(context, 'plain', 'utf-8')
    
        msg['From'] = form_adder
        msg['To'] = ','.join(to_adder)
        msg['subject'] = str(inserttime_read)+ email_subject
        msg.attach(txt)
    
        # ##附件内容
        # file = file_excel_path+'.'+h+".xls"
        part = MIMEApplication(open(file, 'rb').read())
        part.add_header('Content-Disposition', 'attachment', filename=file)
        msg.attach(part)
    
        ret = True
        try:
            server = smtplib.SMTP(smtp_server,25)
            # tls 方式验证
            server.starttls()
            server.login(form_adder,str_pwd)
            server.sendmail(form_adder,to_adder,msg.as_string())
            server.quit()
        except Exception as e:
            print(e)
            ret = False
        return ret
    
    #操作excel
    def w_excel(res,file):
        book = xlwt.Workbook() #新建一个excel
        sheet = book.add_sheet('rx_power') #新建一个sheet页
        title = ['switchname','ip','port','inserttime','wwn','aliasname','rx_dbm','rx_uw']
        #写表头
        i = 0
        for header in title:
            sheet.write(0,i,header)
            i+=1
    
    
        #写入数据
        for row in range(1,len(res)):
            for col in range(0,len(res[row])):
                sheet.write(row,col,res[row][col])
            row+=1
        col+=1
        book.save(file)
        print("导出成功!")
    
    
    
    
    #连接数据库
    conn1=pymysql.connect(host='xxx',user='user',password=base64.b64decode("SUplVmhaSDFSDFSDFYT2ZhNWpI").decode("utf-8"),database='devops', charset='utf8')
    cursor=conn1.cursor()
    
    
    ###sfpshow关联alishow表
    SQL2="select tt1.switchname,tt.ip,tt.port,tt.inserttime,tt1.wwn,tt3.aliasname,tt.rx_dbm,tt.rx_uw " \
            "from " \
                "(select inserttime,ip,port,rx_dbm,rx_uw,tx_dbm,tx_uw ," \
                    "row_number() over (partition by Ip,port order by inserttime desc) as t " \
                        "from devops.pvs_sfpshow Where inserttime>=date_format(date_sub(now(), interval 8 day),'%Y%m%d%H%i') ) tt  " \
         "left join " \
                "(select *,row_number() over (partition by port,ip,switchname order by inserttime desc) as t " \
                        "from devops.pvs_switchshow  where inserttime>=date_format(date_sub(now(), interval 8 day),'%Y%m%d%H%i'))tt1  " \
                            "on tt1.ip=tt.ip and tt1.port=tt.port " \
         "left join      " \
                "(select aliasname,inserttime t3_inserttime,wwn ,row_number() over (partition by aliasname order by inserttime desc) as t " \
                        "from devops.pvs_alishow where inserttime>=date_format(date_sub(now(), interval 8 day),'%Y%m%d%H%i')) tt3      " \
                            "on tt1.wwn=tt3.wwn  " \
         "where (tt3.t=1 or tt3.t is null) and tt.rx_dbm <-5 and tt.rx_uw<300 and tt1.t=1 and tt.t=1 and tt1.state='Online' " \
         " order by tt.ip, tt.port "
    
    SQL3="select distinct tt1.IP " \
            "from " \
                "(select inserttime,ip,port,rx_dbm,rx_uw,tx_dbm,tx_uw ," \
                    "row_number() over (partition by Ip,port order by inserttime desc) as t " \
                        "from devops.pvs_sfpshow Where inserttime>=date_format(date_sub(now(), interval 8 day),'%Y%m%d%H%i') ) tt  " \
         "left join " \
                "(select *,row_number() over (partition by port,ip,switchname order by inserttime desc) as t " \
                        "from devops.pvs_switchshow  where inserttime>=date_format(date_sub(now(), interval 8 day),'%Y%m%d%H%i'))tt1  " \
                            "on tt1.ip=tt.ip and tt1.port=tt.port " \
         "left join      " \
                "(select aliasname,inserttime t3_inserttime,wwn ,row_number() over (partition by aliasname order by inserttime desc) as t " \
                        "from devops.pvs_alishow where inserttime>=date_format(date_sub(now(), interval 8 day),'%Y%m%d%H%i')) tt3      " \
                            "on tt1.wwn=tt3.wwn  " \
         "where (tt3.t=1 or tt3.t is null) and tt.rx_dbm <-5 and tt.rx_uw<300 and tt1.t=1 and tt.t=1 and tt1.state='Online' " \
         " order by tt1.IP "
    
    
    cursor.execute(SQL2)
    res2=cursor.fetchall()
    list_problem2=list(res2)
    
    cursor.execute(SQL3)
    res3=cursor.fetchall()
    list_problem3=list(res3)
    
    if len(list_problem2) != 0:
        context_problem_rx="\n\n\n"+inserttime_read+'时交换机端口状态为Online的 rx_power<300 且 rx_dbm<-5的端口数量有:'+str(len(list_problem2))+"个\n分别是:\n\n\n"
        for i in range(len(list_problem2)):
            if  list_problem2[i][5] == None:
                if list_problem2[i][4] ==None:
                    if i >0 and list_problem2[i][1] !=list_problem2[i-1][1]:
                        context_problem_rx += "\n"
                    context_problem_rx+="\n交换机 {} IP:{}:{}端口 在 {} 时的rx_power为:{} rx_dbm 为{}:对应的服务器是{},wwn是{} ".format(
                        list_problem2[i][0], list_problem2[i][1], list_problem2[i][2], list_problem2[i][3], list_problem2[i][7],
                        list_problem2[i][6], "未知的服务器", "未知的wwn号")
    
                else:
                    if i >0 and list_problem2[i][1] !=list_problem2[i-1][1]:
                        context_problem_rx += "\n"
                    context_problem_rx +="\n交换机 {} IP:{}:{}端口 在 {} 时的rx_power为:{} rx_dbm 为{}:对应的服务器是{},wwn是{} ".format(
                        list_problem2[i][0], list_problem2[i][1], list_problem2[i][2], list_problem2[i][3], list_problem2[i][7],
                        list_problem2[i][6], "未知的服务器", list_problem2[i][4])
    
            else:
                if i > 0 and list_problem2[i][1] != list_problem2[i - 1][1]:
                    context_problem_rx += "\n"
                context_problem_rx +="\n交换机 {} IP:{}:{}端口 在 {} 时的rx_power为:{} rx_dbm 为{}:对应的服务器是{},wwn是{} ".format(
                    list_problem2[i][0], list_problem2[i][1], list_problem2[i][2], list_problem2[i][3], list_problem2[i][7],
                    list_problem2[i][6], list_problem2[i][5], list_problem2[i][4])
    
    else:
        context_problem_rx = inserttime + '时交换机端口rx_power没有异常\n\n'
    
    ##邮件内容
    print(context_problem_rx)
    #邮件附件
    file=r"e:\\SANSwitch\sanswitch."+inserttime+".xls"
    w_excel(res2,file)
    sendmail(context=context_problem_rx,email_subject='存储交换机监控光衰告警信息',file=file)
    # print('\n'.join(l1))
    # print('\n'.join(l2))
    ##邮件格式
    cursor.close()
    conn1.close()
    
    
    
    
    展开全文
  • 华三交换机端口映射命令配置教程

    千次阅读 2020-12-22 17:00:55
    华三交换机端口映射命令配置教程一,用固定的公网ip做映射命令Systemint dialer 0[Quidway-Ethernet3/0] nat server protocol tcp global 200.200.200.1 外网端口 inside 192.168.1.254 内网端口[Quidway-Ethernet3/...

    华三交换机端口映射命令配置教程

    一,用固定的公网ip做映射命令

    System

    int dialer 0

    [Quidway-Ethernet3/0] nat server protocol tcp global 200.200.200.1 外网端口 inside 192.168.1.254 内网端口

    [Quidway-Ethernet3/0] nat server protocol tcp global 200.200.200.1 外网端口 inside 192.168.1.254 内网端口

    【提示】

    1、global后跟公网地址,inside后跟的是私网服务器地址,www和ftp可以改为端口号

    2、内部用户不能使用公网地址来访问内部服务器,必须使用内网地址访问.,如

    192.168.1.0/24网段的用户,不能访问https://200.200.200.1,而只能访问https://192.168.1.254

    二,如果没有固定ip,对于上面命令要作修改,修改如下

    system

    int dialer 0

    nat server pro tcp global current 内网端口 inside 192.168.1.2 外网端口

    删除命令

    在前面加上undo nat server pro tcp global current 内网端口 inside 192.168.1.2 外网端口

    三,display nat all命令用来显示所有的地址转换的配置信息

    【视图】

    任意视图

    【缺省级别】

    1:监控级

    【参数】

    【描述】

    display nat all命令用来显示所有的地址转换的配置信息。

    【举例】

    # 显示所有的关于地址转换的配置信息。

    display nat all

    NAT address-group information:

    There are currently 1 nat address-group(s)

    1 : from 202.110.10.10 to 202.110.10.15

    NAT outbound information:

    There are currently 2 nat outbound rule(s)

    Ethernet1/0: acl(2001) --- NAT address-group(1) [no-pat]

    Ethernet2/0: --- static

    NAT server in private network information:

    There are currently 1 internal server(s)

    Interface:Ethernet1/0, Protocol:6(tcp),

    [global] 202.110.10.10: 8080 [local] 10.110.10.10: 80(www)

    NAT static information:

    There are currently 2 static table(s)

    GlobalAddr InsideAddr Vpn-instance

    192.168.1.111 2.3.4.5 ----

    4.4.4.4 3.3.3.3 ----

    NAT aging-time value information:

    tcp ---- aging-time value is 86400 (seconds)

    udp ---- aging-time value is 300 (seconds)

    icmp ---- aging-time value is 60 (seconds)

    pptp ---- aging-time value is 86400 (seconds)

    dns ---- aging-time value is 60 (seconds)

    tcp-fin ---- aging-time value is 60 (seconds)

    tcp-syn ---- aging-time value is 60 (seconds)

    ftp-ctrl ---- aging-time value is 7200 (seconds)

    ftp-data ---- aging-time value is 300 (seconds)

    NAT log information:

    log enable : enable acl 2000

    flow-begin : enable

    flow-active : 10(minutes)

    表1-5 display nat all命令显示信息描述表

    字段

    描述

    NAT address-group information

    显示NAT地址池信息

    There are currently 1 nat address-group(s)

    存在1条NAT地址池信息

    1 : from 202.110.10.10 to 202.110.10.15

    1号地址池的IP地址范围从202.110.10.10到202.110.10.15

    NAT outbound information:

    显示内部地址和外部地址的转换配置信息

    There are currently 2 nat outbound rule(s)

    存在2条地址转换关联信息

    Ethernet1/0: acl(2001) --- NAT address-group(1) [no-pat]

    在Ethernet1/0配置了1个地址转换关联:ACL规则2001与地址池1关联,进行多对多方式的地址转换;[no-pat]表示不进行端口的转换

    Ethernet2/0: --- static

    在Ethernet1/0配置了静态地址转换

    NAT server in private network information

    显示内部服务器信息

    There are currently 1 internal server(s)

    存在1条内部服务器信息

    Interface:Ethernet1/0, Protocol:6(tcp),

    [global] 202.110.10.10: 8080 [local] 10.110.10.10: 80(www)

    在Ethernet1/0配置了1个内部服务器:使用TCP协议;公网地址是202.110.10.10,端口号为8080;内部地址是10.110.10.10,端口号为80

    NAT static information:

    静态地址转换信息

    There are currently 2 static table(s)

    存在2条静态转换表项

    GlobalAddr

    外部IP地址

    InsideAddr

    内部IP地址

    Vpn-instance

    内部IP地址所属的三层VPN名

    NAT aging-time value information

    显示各个协议的NAT转换有效时间

    tcp ---- aging-time value is 86400 (seconds)

    TCP协议地址转换有效时间为86400秒

    udp ---- aging-time value is 300 (seconds)

    UDP协议地址转换有效时间为300秒

    icmp ---- aging-time value is 60 (seconds)

    ICMP协议地址转换有效时间为60秒

    pptp ---- aging-time value is 86400 (seconds)

    PPTP协议地址转换有效时间为86400秒

    dns ---- aging-time value is 60 (seconds)

    DNS协议地址转换有效时间为60秒

    tcp-fin ---- aging-time value is 60 (seconds)

    TCP 协议fin 或 rst连接地址转换有效时间为60秒

    tcp-syn ---- aging-time value is 60 (seconds)

    TCP 协议syn连接地址转换有效时间为60秒

    ftp-ctrl ---- aging-time value is 7200 (seconds)

    FTP协议控制链路地址转换有效时间为7200秒

    ftp-data ---- aging-time value is 300 (seconds)

    FTP协议数据链路地址转换有效时间300秒

    NAT log information

    log enable : enable acl 2000

    日志使能信息,对匹配acl 2000的数据流做日志记录

    flow-begin : enable

    新建流使能

    flow-active : 10(minutes)

    活跃流的间隔时间为10分钟

    四.区分路由器和防火墙

    在Telnet的设备上输入以下命令:

    disp ver

    Copyright Notice:

    All rights reserved (Feb 22 2008).

    Without the owner's prior written consent, no decompiling

    nor reverse-engineering shall be allowed.

    Huawei Versatile Routing Platform Software

    VRP software, Version 3.40, Feature 1652

    Copyright (c) 1998-2008 Huawei Technologies Co., Ltd. All rights reserved.

    Quidway SecPath //此处如果是SecPath,则为防火墙100F uptime is 0 week, 0 day, 3 hours, 10 minutes

    CPU type: Mips IDT RC32438 266MHz

    256M bytes DDR SDRAM Memory

    16M bytes Flash Memory

    Pcb Version:3.0

    Logic Version:1.0

    BootROM Version:1.17

    [SLOT 0] 4FE (Hardware)3.0, (Driver)2.0, (Cpld)1.0

    [SLOT 1] 3FE (Hardware)3.0, (Driver)2.0, (Cpld)1.0

    dis ver

    Copyright Notice:

    All rights reserved (Jun 14 2005).

    Without the owner's prior written consent, no decompiling

    nor reverse-engineering shall be allowed.

    Huawei-3Com Versatile Routing Platform Software

    VRP(R) software, Version 3.40, Release RT-0011

    Copyright (c) 2003-2005 Hangzhou Huawei-3Com Tech. Co.,Ltd. All rights reserved.

    Copyright (c) 2000-2003 Huawei Tech. Co.,Ltd. All rights reserved.

    Quidway AR28-31//此为路由器,AR28-31为路由器的型号. uptime is 0 week, 0 day, 21 hours, 13 minutes

    CPU type: PowerPC 8245 300MHz

    128M bytes SDRAM Memory

    32M bytes Flash Memory

    128K bytes NvRAM Memory

    Pcb Version:1.0

    Logic Version:1.0

    BootROM Version:9.12

    [SLOT 0] 2FE (Hardware)2.1, (Driver)2.0, (Cpld)0.0

    [SLOT 2] 4E1-F (Hardware)1.0, (Driver)1.0, (Cpld)1.0

    展开全文
  • 3、查看广播风暴既然故障工作子网中没有ARP病毒,同时楼层交换机与核心交换机之间的物理连接也是正常的,那么局域网中可能存在广播风暴现象,该现象造成了网络传输通道发生了堵塞,这样一来故障工作子网中的客户端...
  • 原理:在智象智能运维平台系统配置安装过程中,利用snmp协议在交换机上设置trap陷阱,当端口状态发生改变时,通知监控主机,监控主机配置snmptrapd进行接收,然后告警给用户。 参考文献:...
  • Agenda1,常用线缆及收发器2,交换机端口类型3,常用命令4,常用诊断工具5,光口不能UP故障6,电口为半双工故障7,端口UP/DOWN故障8,端口err-disable故障9,网络排障方法总结10,Console Port介绍11,Lenovo TOR ...
  • 进入特权模式(可以对交换机的配置文件进行管理,查看配置信息,进行网络测试和调试等) •Switch#configure terminal !进入全局配置模式(可以配置交换机的全局性参数) •Switch(config)#Interface fastethernet...
  • #_*_ coding:utf8 _*_import paramiko # SSH 登录操作模块import timeimport re # 字符匹配查找模块import logging # 日志Log = logging.getLogger("__name__") # 获取实例formatter = logging.Formatter('%(asctime...
  • 交换机端口假死(err-disable)解决方法

    千次阅读 2020-03-03 14:44:32
    出现了这个问题,我们不得不重视起交换机端口“假死”的现象,寻求在交换机不重启的状态下将该端口“拯救”回来 的方法。 拯救步骤1:查看日志/端口的状态    登录进入交换机后,执行show log,会看到如下的提示:...
  • graylog配置 首先点击system菜单,在点击inputs。 2.在下列菜单中选择syslog tcp或者syslog udp均可,点击旁边到launch new input 3.指定一个名字、端口1514 即可 4.配置完成如下 交换机配置 info-...
  • 交换机端口假死(err-disable…

    千次阅读 2017-06-01 18:21:25
    原文地址:交换机端口假死(err-disable)解决方法作者:物喜达者出现了这个问题,我们不得不重视起交换机端口“假死”的现象,寻求在交换机不重启的状态下将该端口“拯救”回来 的方法。 拯救步骤1:查看日志/端口的...
  • 交换机端口限速总结

    万次阅读 2013-06-25 15:53:46
    可限速的交换机一般都在三层或者以上的交换机,自2008年之后新出的交换机型号二层设备就可以做到QOS限速,精确度达到1Mbps,例如Cisco 2960系列交换机。在这之后的大多数国内的标准二层交换机都可以做多限速,精确度...
  • 拯救步骤1:查看日志/端口的状态拯救步骤2:将端口从错误状态中恢复回来拯救步骤3:显示被置于错误状态端口的恢复情况交换机端口假死 用“重启”来应付单位中有若干台CISCO3550的交换机,分别放在...
  • 描述:华为网络设备交换机路由器查看日志命令方法 命令: display logbuffer
  • 求助,华为交换机肿么屏蔽445端口acl number 3000 rule 1 deny tcp destination-port eq 445 rule 5 deny udp destination-port eq 445华为交换机接口怎么建不了接口组答:华为的不一样,华为的配置做trunk的配置是...
  • 华为交换机常用查看命令

    千次阅读 2022-03-01 14:56:57
    display mac-address flapping record 查看MAC地址漂移记录 display ip routing-table 查看路由表 dis version 收集版本信息 dis device 设备信息 dis environment 温度 display power 电源状态 display fan 风扇...
  • 写在前面:一般在网络中会在接入层交换机边缘端口上配置端口安全用于防止非法或不可以信任的网络设备接入到网络中,以便于提高网络的安全性。1.拓扑图2.网络需求在接入层交换机上配置端口安全提高网络安全性能,...
  • 拯救步骤1:查看日志/端口的状态 登录进入交换机后,执行show log,会看到如下的提示: 21w6d: %ETHCNTR-3-LOOP_BACK_DETECTED: Keepalive packet loop-back detected on FastEthernet0/20. 21w6d: %PM-4-ERR_...
  • 华三h3c交换机运维查看相关配置信息

    万次阅读 多人点赞 2019-07-02 09:56:38
    华三h3c交换机运维查看相关配置信息1、dis cpu //查看CPU2、dis memory //查看内存3、dis device //查看硬件4、dis power //查看电源5、dis fan //查看风扇6、dis env //查看温度7、dis version //查看版本8、dis ...
  • 我的一台3750G透过单模光纤接2960交换机,今天早上之间网络不通,3750G和2960上的SFP模块指示灯都不亮,查看CISCO 3750G的日志,有如下提示: Apr 27 05:22:03: %LINEPROTO-5-UPDOWN: Line protocol on Interface ...
  • 几天在维护宿舍网络时碰着一个当时...华为交换机配置于是上网查了查,大白了个中的原理:交换机正在事情的端口,溘然变成封锁状态的假死现象,第一可以用重启交换机来办理,第二可以用呼吁规复。对付用呼吁规复的要...
  • 交换机端口锁死的原因及解决办法

    千次阅读 2013-11-14 18:07:33
    这几天连续遇到交换机端口err-disabled,没在意,今天竟然在关键链路上出现了这个情况,用show inter gi0/17的时候看到端口关闭,括号里面有这个提示,看来不细心会带来大麻烦,如何启用因错误而锁死的端口一直没搞过, ...
  • 思科交换机端口down或up故障原因接入层交换机出现故障,这个交换机的端口f0/6下连一个tp-link 的四口小交换机,上联端口为cisco 3560,有一段时间发现这个F0/6经常down ,然后过一会又up,如此反复,时间有的时候有1...
  • Cisco 交换机端口故障解决(二)

    千次阅读 2012-12-30 12:01:00
    Cisco 交换机端口故障解决(二) 交换机端口假死 用“重启”来应付  “假死”现象蔓延 不得不根治?  拯救步骤1:查看日志/端口的状态  拯救步骤2:将端口从错误状态中恢复回来 ...
  • 交换机中有一张mac地址表,记录了mac地址和交换机端口的对应关系,一个端口可以对应多个mac地址,但一个mac地址不能对应多个端口。 交换机可以在一个接入端口学习很多的MAC地址,但是会提供配置方式来修改一个端口...
  • 一个有问题的SFP或光纤线会造成丢失与主机,存储或另一台交换机的连接问题,在交换机的error log中可能有如下显示: 2007/12/06-23:50:56, [FW-1424], 7682,, WARNING, SWITCH_1, Switch status changed from ...
  • 我们都知道,组建我们的网络,交换机是必不可少的一个设备,我们都会用它来做一些相应的配置,如划分VLAN、VTP、以及生成树这些,,但是当我们配置了这些以后呢?我们如何来保证我们局域网内的端口安全呢?这是一个...
  • 华三交换机常用命令

    2018-06-25 16:41:38
    华三交换机常用命令,适用于H3C S xxxx-xx 系列。 ,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,319
精华内容 5,727
关键字:

交换机端口查看log