忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: 北极星

#自己编了个批量备份交换机配置的程序。(更新一个版本) [复制链接]

论坛徽章:
0
发表于 2009-09-16 22:30 |显示全部楼层
原帖由 cheveu 于 2009-9-16 00:38 发表
方法一:0、1组合。
0、copy run tftp,同样可以达到保存当前配置的目的。
1、用windows下的脚本可以实现你同样的功能,而且密码是可以预先写在文档里让脚本按顺序读取的。不过需要搭配1使用。

方法二:2、 ...



谢谢你的建议:
copy run tftp的方法我也想过,但由于要用到tftp这个外部软件,所以无法知道拷备进度,软件上就太好操作。而且如果一个用户,不是备份局域网内的交换机,而且备份外网的交换机,而他的电脑是通过NAT出去的,这样tftp这个方法就不起作用了。


脚本的方法也有一个问题就是分页,不知道会分几页,我用的解决办法,就是后面多输出几个“空格”,以保证能显示到最后一页。不过总感觉这个方法不太严密,呵呵。
还有我试的脚本,好象cmd窗口一定要在当前窗口,不然就无法运行下去。
网上看到在secureCRT也中也可以用脚本,但不知道为何我一直没有成功过,有成功的朋友能给个代码吗?

其实关于分页---more---的问题,在cisco和华三上我现在已经基本解决,锐捷等我有测试交换机后,应该也可以解决。

[ 本帖最后由 北极星 于 2009-9-16 22:46 编辑 ]

论坛徽章:
0
发表于 2009-09-16 22:34 |显示全部楼层
原帖由 ssffzz1 于 2009-9-16 08:39 发表
LS的方法也不错的。

1.1.27  screen-length
【命令】
screen-length screen-length
undo screen-length
【视图】
用户界面视图
【缺省级别】
2:系统级
【参数】
screen-length:指定下一 ...



谢谢,有空我来试试看这个命令,cisco有没有相应的命令?

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
发表于 2009-09-16 23:40 |显示全部楼层
原帖由 北极星 于 2009-9-16 22:34 发表



谢谢,有空我来试试看这个命令,cisco有没有相应的命令?



有,但是忘记了。见到设备才能想起来。

论坛徽章:
0
发表于 2009-09-17 14:49 |显示全部楼层
顶一下,拿来看看

论坛徽章:
0
发表于 2009-09-17 17:01 |显示全部楼层
看一看先,楼主很有创意。

论坛徽章:
0
发表于 2009-09-18 17:28 |显示全部楼层
原帖由 cheveu 于 2009-9-16 00:38 发表
方法一:0、1组合。
0、copy run tftp,同样可以达到保存当前配置的目的。
1、用windows下的脚本可以实现你同样的功能,而且密码是可以预先写在文档里让脚本按顺序读取的。不过需要搭配1使用。

方法二:2、 ...


你这么多回帖就这个有价值撒。

这个应该能配合楼主的输出用,改改还能统计别的比如bpduguard,udld之类的

#!/bin/awk -f

#
#Int[1]=switch_name Int[2]=interface_number Int[3]=Admin_Status Int[4]=IP
#
#Int[7]=Vlan Int[8]=Voice_Vlan
#
#Int[10]=Description
#
#Int[100]=access/trunk/routed Int[101]=accss_vlan Int[102]=trunk_native_vlan
#
#Int[103]=voice_vlan
#

BEGIN { FS="\n"; RS="!"; OFS="\t"; ORS="\n";

        if(sub("^-","",ARGV[1])){ __COMMAND=ARGV[1]; ARGV[1]=""; ARGIND++ } else __EXIT_SCR="TRUE";

        __COUNT_VLAN="c";
        __VERBOSE="v";
        __PORT_USAGE="u";
        __REVERSE_PORT_USAGE="U";
        __HELP_FLAG="h"; __HELP_FULL_FLAG="help";

        Int[1]="switch_name"; Int[2]="interface_number"; Int[3]"=Admin_Status"; Int[4]="IP";
                Int[7]="Vlan"; Int[8]="Voice_Vlan";
                Int[10]="Description";
                Int[100]="access/trunk/routed"; Int[101]="accss_vlan"; Int[102]="trunk_native_vlan";
                Int[103]="voice_vlan";
                TOTAL_PORTS=0; CLOSED_PORTS=0;

#########################################
#       Initial Output by category      #
#########################################
        if(__COMMAND~__COUNT_VLAN){
                print "Counting ports in VLAN...";
                if(__COMMAND~__VERBOSE) {
                        printf ("%-16s\t%-8s\t%-4s\t%-4s\t%s\n", "Switch","Int","Admin","Vlan","Voice","Destination"); }
        }
        else if(__COMMAND~__PORT_USAGE){
                print "Counting ports usage..."
                if(__COMMAND~__VERBOSE) {
                        printf ("%-16s\t%-8s\t%4s\t%10s\t%10s\n", "Switch","Int","Admin","Shutdowned","Toatal Ports"); }
        }
        else if(__COMMAND~__HELP_FLAG || __COMMAND~__HELP_FULL_FLAG){
                __EXIT_SCR="TRUE";
                __PRINT_HELP_MESSAGE()
                exit 0
        }
        else if(__EXIT_SCR~"TRUE"){
                __PRINT_HELP_MESSAGE()
                exit 0
        };

}

$2~/^interface/{
#########################################
#       Filt interface config           #
#########################################
        for(foo in Int){ Int[foo]="N/A"}
        Int[1]=FILENAME; sub(".*/","",Int[1]); sub(".txt","",Int[1]);
        bar = 1; while ( bar <= NF ) {
                if( sub("^interface ","",$bar)){
                        sub("gabitEthernet\|stEthernet\|rt-channel\|back","",$bar); Int[2]=$bar;
                        if(Int[2]~"Vlan\|Loop\|Nu") {Int[100]="routed"}
                }
                if( sub("description ","",$bar)){ sub(" ","",$bar); Int[10]=$bar};
                if( sub("switchport mode ","",$bar)){ sub(" ","",$bar); Int[100]=$bar}
                        else if($bar~"no switchport"){ Int[100]="routed"};
                if( sub("ip address","",$bar)){
                        if( $bar!~"no") {Int[100]="routed"; Int[4]=$bar}
                        else if(Int[2]~"Vlan\|Loop\|Nu") {Int[100]="routed"}
                }
                if( sub("switchport access vlan ","",$bar)){ sub(" ","",$bar); Int[101]=$bar};
                if( sub("switchport voice vlan ","",$bar)){ sub(" ","",$bar); Int[103]=$bar};
                if( sub("switchport trunk native vlan ","",$bar)){ sub(" ","",$bar); Int[102]=$bar};
                if( sub("shutdown","",$bar)){ if( $bar~"no" ){ Int[3]="open"} else { Int[3]="close"}};
                bar++;
                }

#########################################
#       Verbose Output by category      #
#########################################
        if(__COMMAND~__COUNT_VLAN){
                if( Int[3]~"close"){ Int[7]="N/A"; Int[8]="N/A"}
                else if( Int[100]~"access"){ Int[7]=Int[101]; Int[8]=Int[103]}
                else if(Int[100]~"trunk"){
                        if(Int[102]~"N/A"){ Int[7]=Int[100]}
                        else {Int[7]=Int[102];Int[8]=Int[103]}
                }
                else if(Int[100]~"routed"){
                        Int[7]="N/A"; Int[8]="N/A";
                }
                else if(Int[100]~"N/A"){
                        if(Int[2]~"Vlan"){Int[100]="routed"; Int[7]=Int[100]}
                        else if(Int[101]~"N/A" && Int[102]~"N/A"){ Int[7]=1}
                        else if(Int[101]~"N/A"){ Int[100]="trunk"; Int[7]=Int[102]; Int[8]=Int[104]}
                        else{Int[100]="access"; Int[7]=Int[101]; Int[8]=Int[103]}
                }
                else{Int[7]=Int[100]};

                if(__COMMAND~__VERBOSE){
                        printf ("%-16s\t%-8s\t%-4s\t%-4s\t%s\n", Int[1],Int[2],Int[3],Int[7],Int[8]); }

                if(Int[3]!~"close") {Vlan[Int[7]]++; if(!(Int[8]~"N/A")){Vlan[Int[8]]++;}}
        }
        else if(__COMMAND~__PORT_USAGE){
                if(Int[2]~"Po|Nu|Vl|Lo"){}
                else if(Int[2]~"0/49\|0/50\|0/51\|0/52"){}
                else{
                        TOTAL_PORTS ++;
                        if(Int[3]~"close") {CLOSED_PORTS ++;}
                }
                if(__COMMAND~__VERBOSE){
                        printf ("%-16s\t%-8s\t%-4s\t%10s\t%10s\n", Int[1],Int[2],Int[3],CLOSED_PORTS,TOTAL_PORTS);}
        }

}

function __PRINT_HELP_MESSAGE( _ARGV_END_, __THISFILE_NAME, __THISFILE_ALIAS, __FUNC_foo){

#########################################
#       Usage and Help content          #
#########################################
        for(__FUNC_foo=1; __FUNC_foo < 75; __FUNC_foo++){printf("%s","=");}; print "" ;

        __THISFILE_NAME="count_ports_vlan.awk "
        __THISFILE_ALIAS="alias_name"

        print
        print "\33[1m""NAME: "
        print "\33[0m\t"__THISFILE_NAME;
        print
        print "\33[1m""ALIAS: "
        print "\33[0m\t"__THISFILE_ALIAS;
        print
        print "\33[1m""SYNOPSIS:"
        print "\33[0m\t"__THISFILE_NAME"-c[v] config_file(s)";
        print "\33[0m\t"__THISFILE_NAME"-u[v] config_file(s)";
        print "\33[0m\t"__THISFILE_NAME"-h";
        print
        print "\33[1m""DESCRPITION:"
        print
        print "\33[1m""OPTIONS:"
        print "\33[0m\t""-c\tCount ports number in each VLAN."
        print "\33[0m\t""-u\tCount ports utilization by accumulating unshut ports."
        print "\33[0m\t""-c\tDisplay this page."
        print
        print "\33[0m\t""config_file(s):""\tFilename(s) of the device configuration(s)."
        print
        print "\33[1m""Example:"
        print "\33[0m\t"__THISFILE_NAME" -cv skbra/*"
        print
        print "\33[0m\t"__THISFILE_ALIAS" -u AUSYDCRS6506_01.txt"
        print

}


END {
        for(foo=1; foo < 75; foo++){printf("%s","=");}; print "" ;

#########################################
#       Summarized output by category   #
#########################################
        if(__COMMAND~__COUNT_VLAN){
                print "VLAN information:"; print "VLAN ID\t","Ports Number";
                for (foo in Vlan){
                        if(Vlan[foo]!=0 && (foo!~"N/A\|routed\|trunk")){print "Vlan",foo":",Vlan[foo];}
                }
                for(foo=1; foo < 75; foo++){printf("%s","=");}; print "" ;
        }
        else if(__COMMAND~__PORT_USAGE){
                print "Used ports statistics:"; print "Non-Shutdowned\t","Total Ports", "Percentage";
                NON_SHUT_PORTS=TOTAL_PORTS - CLOSED_PORTS;
                printf ("%-16d\t%-11d\t%+9.2f%1s\n", NON_SHUT_PORTS, TOTAL_PORTS, NON_SHUT_PORTS*100/TOTAL_PORTS,"%");
                for(foo=1; foo < 75; foo++){printf("%s","=");}; print "" ;
        };
}!

论坛徽章:
0
发表于 2009-09-18 17:33 |显示全部楼层
原帖由 cheveu 于 2009-9-16 00:38 发表
方法一:0、1组合。
0、copy run tftp,同样可以达到保存当前配置的目的。
1、用windows下的脚本可以实现你同样的功能,而且密码是可以预先写在文档里让脚本按顺序读取的。不过需要搭配1使用。

方法二:2、 ...



顺便说下,根据平台不同,一般有两种语法
term pa le
term l

而窗口宽度的问题可以使用以下命令解决
term w

论坛徽章:
0
发表于 2009-09-19 23:35 |显示全部楼层
原帖由 cnadl 于 2009-9-18 17:28 发表


你这么多回帖就这个有价值撒。

这个应该能配合楼主的输出用,改改还能统计别的比如bpduguard,udld之类的

#!/bin/awk -f

#
#Int[1]=switch_name Int[2]=interface_number Int[3]=Admin_Status In ...



呵呵,高手开始一个个出来了。

论坛徽章:
0
发表于 2009-09-20 22:34 |显示全部楼层
学习一下

论坛徽章:
0
发表于 2009-09-23 02:14 |显示全部楼层
谢谢,楼主无私奉献
以前也做过类似的东西,难点主要是兼容多种品牌和类型设备
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP