python网络自动化运维之telnetlib实验(EVE-NG+pycharm)

2021/11/12 9:40:20

本文主要是介绍python网络自动化运维之telnetlib实验(EVE-NG+pycharm),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

运行环境:

       物理机:win10 1903

       网络设备:EVE-NG模拟器上运行思科三层路由器

       网络设备OS版本:cisco ios(versions 15.6)

       python环境:pycharm 3.3

       python解析器版本:3.7

 

实验目的:给R4的lo1口配置地址:2.2.2.2/24

实验括扑:

 

 

 

  1. 因为我的环境较为特殊,Telnetlib要接入的是eve中的虚拟接口,而且eve中的端口都是默认打开的,并且不需要输入账号与密码,也就是说,只要是通过web页面点击设备进行访问,全部都是免Telnet、ssh就能够进入到管理界面(实际上通过web管理下,eve是通过telnet向设备发送命令)。那这样的话就没有办法去模拟真机环境下的Telnet和SSH,所以我就又想了个办法,那我用python先登录到R3,然后在R3上去登录其他路由器(比如R4),这样不也可以吗?下面我将这样来演示,先登录到R3,再从R3上去Telnet R4。退出也是通过捕捉关键字来实现退出。
  2. 因为做这个实验时间本人环境等问题还没有解决,后面想到了更好的方法将在后面展示,本篇文章将对所存在问题进行详细描述;本人写作能力有限,而且还是新手、文章可能难以理解,望各位见谅。
  3. 下面的每台三层交换机都默认配置了Telnet和SSH,Telnet用户名是python,密码是123,SSH用户名是ccie,密码是cisco

以下代码参考《网络工程师的python之路》这本书:

import telnetlib        #导入Telnetlib模块

host = "192.168.142.128"
user = "python"         #定义四个变量,分别是地址、用户名、密码、和退出字符串
password = "123"
enter =  "enter"
exit_telnet = "exit"

tn = telnetlib.Telnet(host,32771)   #赋值tn,尝试以Telnet登录到192.168.142.128,32771。

tn.write(b"\r\n")   #输入换行符,等于输入enter键。进入用户模式
tn.write(b"en\n")   #进入R3的特权模式
tn.read_until(b"Password: ")    #用read_until检测关键字:Password
tn.write(password.encode('ascii') + b"\n")  #当符合关键字条件之后,输入用户名,并用\n换行
tn.write(b"telnet 192.168.2.12\n")   #利用python将Telnet到R4的命令发送给R3

tn.read_until(b"Username: ")        #登录到R4后,会提示Username,跟前面一样,读取关键字
tn.write(user.encode('ascii') + b"\n")
tn.read_until(b"Password: ")        #登录到R4后,读取关键字,并输入密码
tn.write(password.encode('ascii') + b"\n")
# ----------------------------------------下面的配置都是网工烂熟于心的配置了,这里就不再介绍---------
tn.write(b"en\n")
tn.write(b"123\n")
tn.write(b"conf t\n")
tn.write(b"int lo1\n")
tn.write(b"ip add 2.2.2.2 255.255.255.0\n")
tn.write(b"do sh ip int br\n")
tn.write(b"end\n")
tn.write(b"exit\n")
tn.read_until(b"[Connection to")    #检测是否退出了R4的Telnet,这里只需检测是否为[Connection开头即可。
tn.write(exit_telnet.encode('ascii') + b"\n")   #当检测到已经退出R4的Telnet,说明已经退回到R3的特权模式。这里再次输入exit退出。

tn.close()
print(tn.read_all().decode('ascii'))    #用read_all方法将登录SW1后执行命令的所有过程都记录下来,并通过print打印出来
                                        #我觉得最有可能的是,要进行打印的字符串pycharm无法识别,导致只显示一个1.
最终效果:

 

 

 



这篇关于python网络自动化运维之telnetlib实验(EVE-NG+pycharm)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程