一、简介
本文将使用python模块中的junos-eznc来控制juniper的 Junos OS系统,此模块可以在windows平台和UNIX平台上使用
二、实验环境
1.操作系统:win10
2.python版本: python3.6.6
3.junos-eznc模块版本:2.2.0
4.Juniper设备型号:SRX550M
5.Juniper软件版本:Junos 15.1X49-D30.3
三、安装junos-eznc模块
pip install junos-eznc
四、简单实例
from pprint import pprint from jnpr.junos import Device host = 'xx.xx.xx.xx' #JuniperIP地址 user = 'xxx' #用户名 password = 'xxx' #密码 with Device(host=host,user=user,password=password) as dev: pprint(dev.facts) #pprint是可以格式化打印,打印内容为设备信息
部分截图
五、常见方法介绍
1. dev = Device(host,user,password,mode,port,console_has_banner=True) 连接对象
host #Juniper远程主机地址 user #用户名 password #密码 mode #模式,默认是netconf协议,也可使用telnet,serial port #端口,默认是22,此处用数字或者字符串都行
Device里的方法:
1.1 dev.open()
1.2 dev.facts 设备信息
1.3 dev.cli('command')
模拟在cli执行命令,返回结果,如dev.cli('show interfaces terse ge-0/0/1.0 ') ,查看ge-0/0/1.0接口简洁信息,只支持一个管道符|,如dev.cli(" show configuration | display set | grep route"),显示的结果跟show configuration | display set一样
六、常见问题
1.出现jnpr.junos.exception.ConnectTimeoutError
可能原因: 1>接口未放行netconf流量 set security zones security-zone XXXX interfaces ge-0/0/0.0 host-inbound-traffic system-services netconf 2>端口(默认22),ip,用户名或者密码错误
2.出现jnpr.junos.exception.ConnectRefusedError
可能原因: 1>未开启netconf端口服务 set system services netconf ssh #开启netconf协议,允许netconf承载在ssh上
七、案例解析
7.1 查看路由表
from jnpr.junos import Device from jnpr.junos.op.routes import RouteTable from getpass import getpass from pprint import pprint hostIp = input('HostIp:') user = input('UserName:') passwd = input('Password:') #getpass在pycharm中无法使用,故使用input dev = Device(hostIp,user=user,password=passwd) dev.open() routes = RouteTable(dev) routes.get() #得到总的路由条目 routes.get('192.168.1.0/24') #填写网段或者ip/掩码都可以,返回的是被包含在该网段的条目数,即/24可以包含/25,/26...之类的 routes.get('192.168.1.0/24',protocol='direct') #获得符合被包含在网段192.168.1.0/24,协议是直连的条目数,一般协议为static,direct,local... pprint(routes.keys()) #格式化打印出匹配到的路由名称,返回的是列表的形式 dev.close()
八、参考文献
1.https://www.juniper.net/documentation/en_US/junos-pyez/topics/task/installation/junos-pyez-server-installing.html