Chinaunix首页 | 论坛 | 博客
  • 博客访问: 58354
  • 博文数量: 16
  • 博客积分: 930
  • 博客等级: 准尉
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-16 16:57
文章分类

全部博文(16)

文章存档

2007年(13)

2006年(3)

我的朋友
最近访客

分类:

2007-09-04 14:59:53

目标:
利用expect脚本自动抓取网络设备的配置数据,并保存到指定的ftp服务器上

准备工作:
1、一台Linux主机,确认已经安装了expect软件包,expect的文档到google上取查
2、一个已搭建好的ftp服务器

实例:
1台Cisco路由器,1台Huawei NE系列路由器和1台Huawei 6503交换机,并且6503不能直接telnet,需要通过NE路由器做跳板登录

脚本:
1、抓取Cisco路由器配置的脚本:get_cisco_conf.exp

#!/usr/bin/expect -f

if { $argc != 3 } {
        send_user "usage: get_cisco_conf.exp ip password enablepassword\n"
        exit
}

set timeout 1
set TERM ANSI

set SERVER [lindex $argv 0]
set PASSWD [lindex $argv 1]
set ENPASSWD [lindex $argv 2]

spawn telnet
expect "telnet> "
send "open $SERVER\r"
sleep 1
expect "Password:"
send "$PASSWD\r"
sleep 1
expect "*>"
send "en\r"
sleep 1
expect "Password:"
send "$ENPASSWD\r"
sleep 1
expect "*#"

send "show run\r"
while (1) {
        sleep 1
        expect {
                " --More-- " { send " " }
                "*#" { break }
        }
}
send "exit\r"

interact

2、抓取Huawei NE路由器配置的脚本:get_hwrtne_conf.exp

#!/usr/bin/expect -f

if { $argc != 3 } {
        send_user "usage: get_hwrtne_conf.exp ip user password\n"
        exit
}

set timeout 1
set TERM ANSI

set SERVER [lindex $argv 0]
set USERNAME [lindex $argv 1]
set PASSWD [lindex $argv 2]

spawn telnet
expect "telnet> "
send "open $SERVER\r"
sleep 1
expect "Username:"
send "$USERNAME\r"
sleep 1
expect "Password:"
send "$PASSWD\r"
sleep 1
expect "*>"

send "disp cur\r"
while (1) {
        sleep 1
        expect {
                " ---- More ----" { send " " }
                "" { break }
        }
}
send "quit\r"

interact

3、抓取Huawei 6503交换机配置的脚本:get_hwsw6503_conf.exp,注意6503是通过NE路由器作为跳板登录的

#!/usr/bin/expect -f

if { $argc != 6 } {
        send_user "usage: get_hwsw6503_conf.exp ip user password swip swuser swpassword\n"
        exit
}

set timeout 1
set TERM ANSI

set SERVER [lindex $argv 0]
set USERNAME [lindex $argv 1]
set PASSWD [lindex $argv 2]

set SWSERVER [lindex $argv 3]
set SWUSERNAME [lindex $argv 4]
set SWPASSWD [lindex $argv 5]

spawn telnet
expect "telnet> "
send "open $SERVER\r"
sleep 1
expect "Username:"
send "$USERNAME\r"
sleep 1
expect "Password:"
send "$PASSWD\r"
sleep 1
expect "*>"

send "telnet $SWSERVER\r"
sleep 1
expect "Username:"
send "$SWUSERNAME\r"
sleep 1
expect "Password:"
send "$SWPASSWD\r"
sleep 1
expect "*>"

send "disp cur\r"

while (1) {
        sleep 1
        expect {
                " ---- More ----" { send " " }
                "" { break }
        }
}
send "quit\r"
sleep 1
expect ""
send "quit\r"

interact

4、抓取并ftp到指定服务器的shell脚本:go.sh ,和上述脚本存放在同一目录下

#!/bin/sh

PATH="/sbin:/usr/sbin:/bin:/usr/bin"
export PATH

#取系统当前时间,用来和设备IP组合起来做存档的文件名,格式:IP_日期时间.txt
T=`date +%Y%m%d%H%M`

#cisco路由器的地址和密码
cisco_rt="1.1.1.1"
cisco_rt_para="password enpass"
#抓取配置并进行适当的处理滤掉各种控制字符
./get_cisco_conf.exp $cisco_rt $cisco_rt_para | sed 's/ --More-- //g'| sed 's/\cM//g' | sed 's/\cH//g' | sed 's/ //g' > $cisco_rt"_"$T.txt

#Huawei路由器的地址和用户名、密码
huawei_rt="2.2.2.2"
huawei_rt_para="user pass"
#抓取配置并进行适当的处理滤掉各种控制字符
./get_hwrtne_conf.exp $huawei_rt $huawei_rt_para | sed 's/\cM//g' | sed 's/ //g' | sed 's/---- More ----//g' | sed 's/\cG//g' | sed 's/[42D//g' > $huawei_rt"_"$T.txt

#Huawei交换机的地址和用户名、密码
huawei_sw="3.3.3.3"
huawei_sw_para="user pass"
#抓取配置并进行适当的处理滤掉各种控制字符
./get_hwsw6503_conf.exp $huawei_rt $huawei_rt_para $huawei_sw $huawei_sw_para | sed 's/\cM//g' | sed 's/ //g' | sed 's/---- More ----//g' | sed 's/\cG//g' | sed 's/[42D//g' > $huawei_sw"_"$T.txt

#自动登录ftp服务器上传文件
ftp -nui<<EOF
open ftp.server.ip
user sysbackup password
asc
mput *_$T.txt
close
by
EOF

#删除临时文件
rm -f *_$T.txt

阅读(1648) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~