首页 > 编程语言 >元进网络自动化(3)---Python自动给路由器配置接口IP

元进网络自动化(3)---Python自动给路由器配置接口IP

时间:2022-11-12 16:00:17浏览次数:40  
标签:write Python IP self --- read str router until

利用Python自动登录到网络设备,根据回显不同来配置不同的参数,避免简单重复的劳动,提高网络相关工作的效率。

【网络拓扑】

元进网络自动化(3)---Python自动给网络设备下配置_网络自动化

【打印登录配置过程】

H:\Alphism\venv\Scripts\python.exe "H:/Alphism/Mest Inc/Python_eNSP.py"


 -----------------------------------------------------------------------------      

 User last login information:      

 -----------------------------------------------------------------------------

 Access Type: Telnet      

 IP-Address : 10.0.0.1      

 Time       : 2022-11-12 15:49:48-08:00      

 -----------------------------------------------------------------------------

<Router1>


<Router1>system

Enter system view, return user view with Ctrl+Z.

[Router1]


[Router1]

interface GI0/0/1

[Router1-GigabitEthernet0/0/1]

ip address 100.1.2.1 30

[Router1-GigabitEthernet0/0/1]


 -----------------------------------------------------------------------------      

 User last login information:      

 -----------------------------------------------------------------------------

 Access Type: Telnet      

 IP-Address : 10.0.0.1      

 Time       : 2022-11-12 15:49:50-08:00      

 -----------------------------------------------------------------------------

<Router2>


<Router2>system

Enter system view, return user view with Ctrl+Z.

[Router2]


[Router2]

interface GI0/0/1

[Router2-GigabitEthernet0/0/1]

ip address 100.1.2.2 30

[Router2-GigabitEthernet0/0/1]

IP Config is OK at 2022-11-12-1551


Process finished with exit code 0

【代码实现及注释】

import telnetlib
import re
import time
import socket

class LoginRouter():
def __init__(self, ip='10.0.0.2', port=23, user='mest', pw="mest"):
self.username = user
self.password = pw
self.host = ip
self.port = port
self.router_username_prompt = 'Username:'
self.router_password_prompt = 'Password:'
self.tn = telnetlib.Telnet(host=ip, port=self.port, timeout=1)
self.login()

def write(self, str='#'):
self.tn.write((str + '\n').encode('ascii'))

def read_until(self, str=']', timeout=1):
output = self.tn.read_until(str.encode('ascii'), timeout=3)
return output.decode('utf-8')

def read_all(self):
try:
self.write(']')
output = self.read_until(']')
return output
except socket.timeout:
print('Reading timeout')

# 登陆设备
def login(self):
try:
self.read_until(self.router_username_prompt)
self.write(self.username)
self.read_until(self.router_password_prompt)
self.write(self.password)
print(self.read_until(str='>'))
except:
print("Telnet Failure")

if __name__ == '__main__':
k = 0
j = time.strftime('%Y-%m-%d-%H%M',time.localtime(time.time()))
e = [2,3] #输入设备地址,这里是以10.0.0为默认
while k <= 1:
router = LoginRouter(ip = '10.0.0.'+str(e[k]), port = 23, user = 'mest', pw = 'mest')
router.write(str='display lldp neighbor bri\n')
lldp = router.read_until('>',timeout=20)
interfacet =re.findall(r'\S*GE\S*',lldp)
del interfacet[0:2]
interface= [str(i).replace('E','I') for i in interfacet]
device=re.findall(r'Router\S*',lldp) #获取设备名和端口名两个数组
router.write(str='system\n')
print(router.read_until(']'))
i=0
while i<len(interface)//2: #配置设备IP地址
if device[i][-1]<device[-1][-2]:
router.write(str='interface '+interface[i*2]+'\n')
print(router.read_until(']',timeout=10))
router.write(str='ip address 100.'+device[i][-1]+'.'+device[-1][-2]+'.2 30\n')
print(router.read_until(']',timeout=10))
else:
router.write(str='interface '+interface[i*2]+'\n')
print(router.read_until(']',timeout=10))
router.write(str='ip address 100.'+device[-1][-2]+'.'+device[i][-1]+'.1 30\n')
print(router.read_until(']',timeout=10))
i+=1
k+=1
router.read_all()
print(router.read_all())
print('IP Config is OK at '+str(j))

标签:write,Python,IP,self,---,read,str,router,until
From: https://blog.51cto.com/dcboy/5846640

相关文章

  • MBR40200PT-ASEMI插件肖特基二极管MBR40200PT
    编辑-ZMBR40200PT在TO-247封装里采用的2个芯片,其尺寸都是130MIL,是一款插件肖特基二极管。MBR40200PT的浪涌电流Ifsm为350A,漏电流(Ir)为0.05mA,其工作时耐温度范围为-65~175......
  • There are no TAP-Windows adapters on this system. You should be able to create
    openvpnnoTAP-Windowsadapters异常问题解决 Openvpn突然不可用提示适配器不存在一、报错信息内容:TherearenoTAP-Windowsadaptersonthissystem.You......
  • Linux-0.11操作系统源码调试
    学习操作系统有比较好的两种方式,第一种是跟着别人写一个操作系统出来,《操作系统真相还原》、《Orange's:一个操作系统的实现》等书就是教学这个的;另一种方式就是调试操作系......
  • 进程间通信-信号-pipe-fifo
    编译运行附件中的代码,提交运行结果截图理解代码,特别是相关系统调用的使用。一、有名管道FIFOFIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文......
  • AT32F421xx外设驱动1-led(寄存器)
    //****************************************************************//******连接LED指示灯GPIO初始化函数PA4//******输入参数:无//******返回值:无/......
  • 进程间通信-信号-pipe-fifo
    1.PIPE1.pipe.c:调用参数所对应的命令2.pipedemo.c:创建一个pipe并读/写3.pipedemo2.c4.stdinredir1.c:打印root权限5.stdinredir2.c6.testtty.c7.whotofile.c......
  • Oracle 19C学习 - 18. 索引
    什么是索引索引的主要作用就是加速表的查询。索引可以显示创建,执行索引命令创建。索引也可以隐式创建,主键和唯一键都是隐式创建索引。索引的特征索引是模式SchemaOb......
  • HTML标签-图片标签和列表标签
    HTML标签-图片标签图片标签:img:展示图片属性:src:指定图片的位置代码案例:  HTML标签列表标签案例:旅游网站首页1、确定使用table来完成布局2、如果某一行只有一......
  • jupyter-Notebook使用以及链接faiss库环境
    jupyter-Notebook使用以及链接faiss库环境开始1.推荐时用conda安装faiss库//cpu版本condainstall-cpytorchfaiss-cpu//gpu版本condainstall-cpytorchfaiss-g......
  • 2022-2023-1 20221306《计算机基础与程序设计》第十一周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK11作业目标:学习《C语言程序设计》......