网络管理:网络设备的批量化操作 推荐 原创 wandering 2013-04-18 00:05:18 博主文章分类:网络 ©著作权 文章标签 网络管理 批量操作 网络设备批量操作 文章分类 网络安全 ©著作权归作者所有:来自51CTO博客作者wandering的原创作品,请联系作者获取转载授权,否则将追究法律责任 新浪微博: @wandering博客地址: dayong.info在深入进行网络工作一段时间后,开始着手解决AAA、NTP、SYSLOG基础服务(简称:基础服务)的可用性和线上设备相关配置的正确性问题。前期,一边优化、重构基础服务,一边修正线上配置。但这个项目是个系统工程,无法在短期内完成,因此即要保持战果让已修正的配置不再出错,还希望新增加的设备可以直接进行正确配置。另外,如何保证其他工程师也正确配置设备,也是需要解决的问题,毕竟工作最终是需要多个团队共同协作的。因此,自动检查线上所有重要交换机和路由器的网管服务、Spanning-Tree、VTP Mode等重要配置是否正确,成了必须优先解决的问题。最直接的方法就是直接检查相应配置,这符合网络管理人员的思维和操作习惯。因此,决定优先解决多台设备的批量执行命令需求。本人一直对程序设计有这样的观点,不能解决问题的程序不是好程序,因此程序首先要实现功能,其次才是程序的效能。只有在规模、需求达到相当程度后才有必要对效率、性能追求极致。对非专业开发人员来说更是要注意精力、时间的分配,20%的投入获得80%的回报其投入产出比是相当可观的,再多花80%的精力去提升最多20%的性能是必须慎重对待的。因此,决定采用模拟人机交互方式实现网络设备的批量化操作。程序实现基本逻辑是: 1)自动登录交换机、路由器批量执行命令,将结果输出。 2)对输出结果进行二次处理,实现不同目标。这样,基本可以解决大部分网络管理需要,其主要优点是简单,会操作交换机/路由器的人就可以使用。但是,此方法最大的问题是效率,因为本质上只是由程序模仿手工操作,需要考虑cli可以接受的操作频率等问题。曾考虑过SNMP、TCL-Script、NET-CONF等方法,但考虑到自己的能力及精力分配、跨厂商平台兼容性问题最终放弃。网上可以查到的模拟人工命令交互操作的方法有2个:perl、expect首先考虑的是perl,因为有perl编程基础,有其他同事写好的相似功能脚本,但最终放弃。因为perl的switch模块不支持Cisco的Nexus平台内容输出,其解决方法非常复杂,要修改switch模块的源代码,这样会产生自己的分支,管理维护成本太高,不利于程序的持续开发和推广 。最后,选择expect,其原理是执行命令,根据不同输出反馈采取不同操作,重复这个过程。关于expect的学习使用,不在本文的关注范围。以下最新版本的代码:#!/usr/local/bin/expect # # Statement: sw-telnet.exp <ip> <cmd-prefix> <uid> <pwd> # # <ip> ip for telnet # <cmd-prefix> For example, sw-backup is cmd-prefix of sw-backup.cmd.h3c and # sw-backup.cmd.cisco # <uid> uid for telnet # <pwd> pwd for telnet # # # Depends: <cmd-prefix>.cmd.h3c # <cmd-prefix>.cmd.cisco # # # Last modified: 2012/05/24 # # set path_cmd "/aaa/bin" set cmd_telnet "telnet" set timeout_default 10 set timeout $timeout_default set vendor "cisco" # Arg 1 set ip [lindex $argv 0] if { $ip == "" } { puts "" puts "Statement: command <ip> <cmd-prefix> <uid> <pwd>" puts " ^^" puts " <ip> ip for telnet" puts " <cmd-prefix> For example, sw-backup is cmd-prefix of sw-backup.cmd.h3c and" puts " sw-backup.cmd.cisco" puts " <uid> uid for telnet" puts " <pwd> pwd for telnet" puts "" exit 1 } # Arg 2 set cmd_prefix [lindex $argv 1] if { $cmd_prefix == "" } { puts "" puts "Statement: command <ip> <cmd-prefix> <uid> <pwd>" puts " ^^^^^^^^^^" puts " <ip> ip for telnet" puts " <cmd-prefix> For example, sw-backup is cmd-prefix of sw-backup.cmd.h3c and" puts " sw-backup.cmd.cisco" puts " <uid> uid for telnet" puts " <pwd> pwd for telnet" puts "" exit 1 } # Arg 3 set uid [lindex $argv 2] if { $uid == "" } { #set uid "backup" puts "" puts "Statement: command <ip> <cmd-prefix> <uid> <pwd>" puts " ^^^" puts " <ip> ip for telnet" puts " <cmd-prefix> For example, sw-backup is cmd-prefix of sw-backup.cmd.h3c and" puts " sw-backup.cmd.cisco" puts " <uid> uid for telnet" puts " <pwd> pwd for telnet" puts "" exit 1 } # Arg 4 set pwd [lindex $argv 3] if { $pwd == "" } { #set pwd "M2dpSF6rSU" puts "" puts "Statement: command <ip> <cmd-prefix> <uid> <pwd>" puts " ^^^" puts " <ip> ip for telnet" puts " <cmd-prefix> For example, sw-backup is cmd-prefix of sw-backup.cmd.h3c and" puts " sw-backup.cmd.cisco" puts " <uid> uid for telnet" puts " <pwd> pwd for telnet" puts "" exit 1 } #___ start telnet ___ spawn $cmd_telnet "$ip" sleep 1 expect "H3C" { set vendor "h3c" } expect -re "Username:|Login:|login:" { send "$uid\r" sleep 1 } expect "Password:" { send "$pwd\r" sleep 1 } #_____ login failed _____ expect { "Access denied" { exit } "Connection refused" { exit } "Login failed" { exit } "Login incorrect" { exit } "Login invalid" { exit } "Password incorrect." { exit } "timeout expired!" { exit } } #_____ Command sets selection by vendor (cisco, h3c) _____ switch -- $vendor cisco { # vendor: cisco set timeout_cisco 60 set timeout $timeout_cisco #___ get commands __ set file [ open "$path_cmd/$cmd_prefix.cmd.$vendor" "r" ] set cmd_count 0 while 1 { if { [gets $file line] == -1 } break incr cmd_count set cmd_list($cmd_count) $line } close $file expect -re ".*# *$" send "term len 0\r\n\n\n" set i 1 while { $i <= $cmd_count } { expect -re ".*# *$" send "$cmd_list($i)\r\n\n\n" incr i sleep 1 } expect -re ".*# *$" send "exit\r" } h3c { # vendor: h3c set timeout_h3c 10 set timeout $timeout_h3c #___ get commands __ set file [ open "$path_cmd/$cmd_prefix.cmd.$vendor" "r" ] set cmd_count 0 while 1 { if { [gets $file line] == -1 } break incr cmd_count set cmd_list($cmd_count) $line } close $file set i 1 while { $i <= $cmd_count } { expect -re "<.*>$" send "$cmd_list($i)\r\r\r\r" expect -re "\- More \-+$" { set timeout 3 set more "yes" while {$more == "yes"} { #puts "___ more ___\r" send " " expect -re "<.*>$" { #puts "___ there's no more ___" set more "no" } } set timeout $timeout_h3c } incr i sleep 1 } expect -re "<.*>$" send "quit\r" } default { # vendor: unkown puts "\nError: Unkown Vendor!\n" exit } expect eof puts "\nVendor: $vendor" puts "Command list:" set i 1 while { $i <= $cmd_count } { puts "$i) $cmd_list($i)" incr i } puts "" exit*注:脚本目前只支持Cisco和H3C两个主流平台。*注:注意设置程序运行路径变量 path_cmd 。举例,假设需要对设备1.2.3.4做以下操作: 1)备份running-config 2)查看cpu状态首先,需要建立4个文件,脚本会自动判断Cisco或H3C设备类型执行相应命令集: 1)backup.cmd.ciscodir show ver show inv show run 2)backup.cmd.h3cdir disp verion disp device manuinfo disp curr 3)version.cmd.ciscoshow process cpu sort | exclude 0.00% show process cpu history 4)version.cmd.h3cdisplay cpu-usage其次,写crontab:0 3 * * * /aaa/bin/sw-telnet.exp 1.2.3.4 backup test_uid test_pwd > /bak/1.2.3.4_show-run_$(date +"%Y%m%d") */10 * * * * /aaa/bin/sw-telnet.exp 1.2.3.4 version test_uid test_pwd >> /bak/1.2.3.4_show-ver_$(date +"%Y%m%d")OK,这样就实现了对1.2.3.4的自动抓取running-config和记录cpu状态。在此代码基础上,完成了以下工作:对全网重要设备抓取running-config,并实现关键配置检查报警对某产品相关服务器接入交换机端口进行流量监控、报警(公司监控不能查看port-channel属性)对某IDC核心交换机的mac地址表监控,增减幅度超过5%报警自动批量执行命令脚本是核心代码,可以通过其它程序调用实现更复杂的功能,例如对多个IP批量操作,具体实现本文不再赘述。希望本文能够对有需要的朋友有所帮助,程序代码可以任意使用。 赞 收藏 评论 分享 举报 上一篇:香港自助旅行提纲 下一篇:数据中心常见网络攻击 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 批量登陆网络设备读取信息 重复的工作变成标准化流程,标准流程自动化;本文以ensp模拟器为环境,介绍使用python对网络设备进行批量自动化获取设备信息操作,读者可自行修改命令实现自动化配置下发; python 网络自动化运维 批量登陆网络设备 批量获取配置 备份---网络设备的配置定时自动备份 公司现有江苏、浙江、上海的所有网络设备配置备份的需求。我是kali linux环境,ubuntu ,CentOS, Oracle Linux, Red Hat Linux理论上支持。apt updateapt upgrade –yapt-get install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1- nginx vim ruby Linux磁盘管理和网络协议 一、磁盘阵列RAID"RAID"一词是由David Patterson, Garth A. Gibson, Randy Katz 于1987年在加州大学伯克利分校发明的。在1988年6月SIGMOD会议上提交的论文"A Case for Redundant Arrays of Inexpensive Disks"(中文翻译:廉价磁盘冗余阵列案例)中提出。为了提升磁盘系统性能,他们提出用许多块廉价的 Linux 包管理器 网络协议 磁盘管理 网络管理:网络设备的批量化操作 http://wandering.blog.51cto.com/467932/1180302 网络管理 设备 网络设备批量操作 适用于对网络设备的批量添加、删除等操作。 ip地址 返回结果 python 网络设备的日志管理 http://www.365master.com/asset/4/20100601/58945.shtml 在一个完整的信息系统里面,日志系统是一个非常重要的功能组成部分。查看交换机、路由器和其他网络设备的日志,可以帮助网管员迅速了解和诊断问题。一些网管员认为日志管理是信息安全管理的内容,和系统管理关系不大,这绝对是错误的。很多硬件设备的操作系统也具有独立的日志功能,本文以校园网 职场 日志 网络设备 休闲 日志管理 网络设备的文件管理 H3C设备的文件管理 H3C 设备文件管理 网络设备的集群管理 1.随着通信技术的发展,数字网络的应用逐步普及,是的ip地址资源越来越紧缺,由于传统的设备管理采用分散的管理方式,每台网络设备网管都需要占用一个公网互联网(ip)地址,不仅占用大量的ip资源,维护工作量也大,因此有了一种较为合理的网络设备管理方法,就是集群管理。 2.传统的网络设备管理方法a.直接到网络设备布放地点,通过串口直接连接网络设备,对设备进行配置管理b.通过snmp协议或者te 华为 集群 ntp 设备管理 ndtp 网络设备管理 设备管理路由器硬件概述: 路由器可以被简单地看做是一台没有输入输出设备的计算机,它也会有相应的处理器,存储器等支持内部系统的运行。处理器:路由器的处理器负责执行处理包所需的工作,不如路由器发现、路由转发以及做出路由决定等。路由器处理包的速度在很大程度上取决于处理器的类型。存储器:在路由器中主要与4种类型的存储器。①RAM:随机访问存储器,相当于计算机的内存。RAM中运行的主要软件 路由器 center style color justify 利用ansible批量备份网络设备 干货满满,利用ansible批量备份网络设备配置,奉上源代码和git仓库,以及devnet主机两台! git 网络设备 网络配置 crt批量备份网络设备脚本 利用vbs脚本通过secureCRT远程登录来批量备份网络设备脚本使用:打开secureCRT然后选择脚本,运行此脚本就可此脚本调用e:/设备备份/ip.txt文件,此文件内格式:ip地址 用户名 密码 设备名#$language = "Vbscript"#$interface = "1.0"crt.Screen.Synchronous =&n secure CRT 自动备份 Python批量备份网络设备配置 距离自己上次用shell写过网络配置备份好几年了,详细的shell脚本可以在本博客内搜索。由于之前的脚本一直可以部署在CentOS上,所以自己就很少去重写python的用法。最近想想还是整合一下,毕竟python支持多种操作系统平台的使用。下面直接上代码,目前python脚本都放在“/app/apps/Network-scripts”下,同时该目录下还有一个NETdevice.conf的文件存放账 python 网络配置自动备份 网络设备 网络设备 网络设备 Cisco 网络设备管理 一、路由器交换机的硬件介绍 (一)处理器(CPU) (二)存储器 1.RAM 路由交换 设备管理 网络设备配置与管理 由器路由过程 1 首先它侦听到节点的数据帧。 2通过路由表计算出到达目的地的最佳路程。3 路由器再次取出目的地的地址,从地址中找出电脑的主机ID从而通过交换器发送到电脑主机的的一个完成过程。 &n 路由器 路由表 配置文件 测试结果 ansible 管理网络设备 Ansible是一种自动化工具,用于简化管理网络设备和服务器的配置和部署。它提供了一种基于文本的配置管理系统,可以将任务自动化并将其部署到多个设备上。在网络设备管理方面,使用Ansible可以帮助管理员更轻松地管理和配置他们的网络设备。使用Ansible管理网络设备有许多好处。首先,Ansible是一种轻量级的工具,易于安装和配置。它只需要一个控制节点和一组被管理的设备,就可以完成大部分的操作 Ansible 网络设备 自动化工具 网络设备学习之网络设备的安装与连接 主要知识点: 1、常见的网络连接规则和连接电缆长度限制 2、机架式设备的机柜安装 3、路由器的主要接口类型 4、交换机的级联、堆栈和群集技术及连接方法 5、路由器的广域网设备连接方法     1、网络连接规则: 几个概念: (1)不对称交换机网络:网络中各交换机端口速率不完全一样,有10Mbps,100Mbps,10/100Mbps和1000Mbps等。 网络 职场 设备 学习 休闲 python 网络设备 python ssh网络设备 [ TOC ]0. 前言自上一篇文章《用python怎么telnet到网络设备》,简单使用了telnetlib库给大家演示了下,但是,现实环境中仍不建议去使用telnet。SSH(Secure Shell)协议也是属于TCP/IP协议族里的一种,端口号22,可以代替telnet来远程管理的一种方法。SSH提供了双向认证、数据加密等方法保证数据的安全性,推荐使用SSHv2版本1. 测试环境及关键代码 python 网络设备 python ssh登录设备 网络设备 python 用户名 网络设备采用什么架构 网络设备的选型 一、选择交换机的主要技能指标交换机:交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。选择参数:1、转发技术2、吞吐量(以太网的吞吐量的最大理论值被称为限速,是指交换机有足够的能力以全速处理各种尺寸的数据封包转发)3、管理功能4、延时功能5、单/ 网络设备采用什么架构 丢包 链路 最佳路径 网络之网络设备 中继器: 10Mbps最多4个中继器分段连接,而一个100Mbps最多2个中继器。也有多端口中继集线器。L2二层交换机(网桥): 用于连接相同类型,不同传输速率的不通网段。L路由3层交换机: 有分担网络负荷,网络安全,跨网段的公网和和局域网的设备。4~7层交换机: 负载均衡器,防火墙,广域网加速器等。网关: 协议转换和数据转发。代理服务器(流量控制和安全 数据 二层交换 网络安全 流量控制 协议转换