Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)

 

 1 实验要求 :

    通过本实验,读者将掌握Python telnetlib库的常用方法。通过python脚本自动化登入多台设备并导出当前设备配置文件。

2 实验组网:

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第1张图片

3 配置思路及步骤

 要完成通过python脚本自动化登入设备。

1  首先完成设备Telnet预配置:配置Telnet密码,开启Telnet功能和允许Telnet登录。

1.1 配置AR1,LSW1,AC1设备的IP地址通过云实现主机与AR1互通

//AR1地址配置
undo terminal monitor   
system-view             
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]ip add 192.168.100.2 24
 
//LSW1地址配置
[LSW1]int vlan 1
[LSW1-Vlanif1]ip add 192.168.100.3 24

//AC1
[AC1]int vlan 1
[AC1-Vlanif1]ip add 192.168.100.4 24        

//FW1,很多时候这个登入都困难!
//初始账户和密码
Username:admin
Password:Admin@123
The password needs to be changed. Change now? [Y/N]: y     //要是重新更改密码
Please enter old password: Admin@123
Please enter new password: Admin@1234
Please confirm new password: Admin@1234
//登入成功!
undo terminal  monitor    //关闭提示
system-view               //进入系统视图
[USG6000V1]sysname FW1               //更改设备名称
//配置IP地址
[FW1]int g1/0/0
[FW1-GigabitEthernet1/0/0]ip add 192.168.100.5 24             

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第2张图片

1.2 查看到如下vianif下已有IP地址,表示地址配置成功!

//使用该命令自行查看
display ip interface brief 

 1.3 查看主机能否ping通设备

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第3张图片

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第4张图片 不然发现配置完地址后其它三台设备都能ping通,唯有防火墙ping不通。

 抓取AR1的g0/0/0接口进行报文分析:

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第5张图片

 先是网卡发出ARP解析包广播问谁是192.168.100.2请回复(request):

 然后是192.168.100.2的网口回复(reply)192.168.100.2 is at 00:e0:fc:d6:1c:c3

知道地址后发ICMP包进行单播(ping)请求(request):

收到请求进行回复(reply)

 进行抓取FW1的g1/0/0的报文分析为啥ping不通

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第6张图片

查看报文数据不难发现只要192.168.100.1一直在发requestq请求报文并未受到任何回复,这样就不难想到防火墙的的各区域通过规则:

 防火墙一共有四个区域:

 trust(安全区域):85

 untrust (非安全区域) :5

 dmz (非军事区) :50

 local (本地区域):100  (防火墙所以的接口都是在本地区域)

数字越大安全等级越高也就越受信任,默认高等级可以访问低等级,但低等级访问高等级就得网络安全人员给定相应的权限。

所以我们就得到:从192.168.100.1 到 192.168.100.2,192.168.100.2可以收到请求但不能回复,因为回复报文要经过本地区域(100)发送出去报文也就是从低等级到高等级需要配置相应的权限才能回复。

  1  将特定的接口加入到信任区域。   

[FW1]firewall zone trust 
[FW1-zone-trust]add int g1/0/0

  2  配置安全策略。

[FW1]security-policy           //进入
[FW1-policy-security]rule name telnet_alow  //为该策略取名
[FW1-policy-security-rule-telnet_alow]source-zone trust  //源区域
[FW1-policy-security-rule-telnet_alow]destination-zone local  //目的区域
[FW1-policy-security-rule-telnet_alow]action permit    //动作指定

 配置完后再次抓包发现已经有回复了说明安全策略配置完成并指定允许

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第7张图片

  但最终发现还是ping不通,这就是因为防火墙接口下的ping服务没有开启(防火墙的接口下有很多的服务需要手动开启)

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第8张图片

 3 开启ping操作服务

[FW1-GigabitEthernet1/0/0]service-manage ping permit 

  最终已ping成功!说明192.168.100.1已经可以成功的访问192.168.100.5Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第9张图片

抓包也看到已经有ping包回复了!

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第10张图片

1.4 配置Telnet密码,开启Telnet功能和允许Telnet登录

[AR1]user-interface vty 0 4   //进入vty
[AR1-ui-vty0-4]protocol inbound telnet //开启telnet,默认已经开启
[AR1-ui-vty0-4]authentication-mode ?   //查看认证模式
[AR1-ui-vty0-4]authentication-mode aaa   //选择aaa认证,相对更安全
[AR1]aaa      //到本地数据库创建3a用户
[AR1-aaa]local-user AR1 password cipher huawei@123
[AR1-aaa]local-user AR1 service-type ?            //查看服务类型,为创建的账户开启相应的服务
[AR1-aaa]local-user AR1 service-type telnet       //选择telnet服务
[AR1-aaa]local-user AR1 privilege level 15        //给账户提供最高权限15


[LSW1]user-interface vty 0 4
[LSW1-ui-vty0-4]protocol inbound telnet 
[LSW1-ui-vty0-4]authentication-mode aaa 
[LSW1-aaa]local-user LSW1 password cipher LSW1@123
[LSW1-aaa]local-user LSW1 service-type ?            //查看服务类型,为创建的账户开启相应的服务
[LSW1-aaa]local-user LSW1 service-type telnet       //选择telnet服务
[LSW1-aaa]local-user LSW1 privilege level 15        //给账户提供最高权限15


[AC1]user-interface vty 0 4 
[AC1-ui-vty0-4]protocol inbound  telnet 
[AC1-ui-vty0-4]authentication-mode aaa 
[AC1-ui-vty0-4]aaa
[AC1-aaa]local-user ac1 password cipher AC1@1234567
[AC1-aaa] local-user ac1 privilege level 15
[AC1-aaa]local-user ac1 service-type telnet

[FW1]user-interface vty 0 4
[FW1-ui-vty0-4]authentication-mode aaa 
[FW1-ui-vty0-4]protocol inbound telnet
[FW1-ui-vty0-4]aaa
[FW1-aaa]manager-user FW1
[FW1-aaa]password cipher Admin@1234
[FW1-aaa]level 15
[FW1-aaa]service-type telnet
[FW1]telnet server enable       //启动服务
[FW1-GigabitEthernet1/0/0]service-manage telnet permit //接口下开启服务不要忘了

1.5 查看是否配置正确:默认有一个admin账户,huawei账户时我们新建的并配置了相关配置。新建的账户用来登入设备。

dis th //自行查看

1.6 再次查看telnet服务是否开启,enable确认已经开启。

display telnet server status  //自行分别查看

 1.7 主机通过cmd/CRT/Xshell登入测试是否能登入成功

 如若出现以下问题是因为主机的telnet服务还未开启,查看上一篇文章解决

华为-python-网络编程与自动化-Python telnetlib库的常用方法(1)_A.丫三岁的博客-CSDN博客

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第11张图片

分别使用cmd登入设备测试telnet登入是否正常

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第12张图片

  cmd登入交换机LSW1时竟然被拒接???这能解决吗

 但Xshell7 能正常连接???难道端口冲突?Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第13张图片

 登入AC1时cmd和Xshell 7 又都已经连接不上了也就是都ping 不通了,但又换了个软件CRT时竟然又可以登上??难道...........

现在怎么说呢?配置和连接其实都是没什么问题的,只是...............

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第14张图片

防火墙在CRT登入成功!初始配置完成!

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第15张图片

 好像明白了什么.....................................................先进入下一步............

4 python脚本代码的编写

  (部分代码详解可以看上一篇文章)

华为-python-网络编程与自动化-Python telnetlib库的常用方法(1)_A.丫三岁的博客-CSDN博客华为-python-网络编程与自动化-Python telnetlib库的常用方法配置Telnet密码,开启Telnet功能和允许Telnet登录现以上问题是因为主机的telnet服务还未开启,我们只需 python脚本代码的编写https://blog.csdn.net/weixin_49070591/article/details/123966584

import telnetlib
import time
import os
import datetime


HostFile = "userinfo.txt"


for user in open(HostFile, "r").readlines():
    # print(user)
    host = user.strip().split(":")[0]
    # print(host)
    username = user.strip().split(":")[1]
    password = user.strip().split(":")[2]

    tn = telnetlib.Telnet(host)

    # 输入用户名和密码登入设备
    tn.read_until(b"Username:")
    tn.write(username.encode("ascii") + b"\n")
    tn.read_until(b"Password:")
    tn.write(password.encode("ascii") + b"\n")

    # 执行命令
    # 滚动显示
    tn.write(b"screen-length 0 temporary \n")
    tn.write(b"dis cu \n")
    time.sleep(2)
    dis = tn.read_very_eager().decode()

    # 创建文件夹
    date = datetime.datetime.now().strftime("%Y-%m-%d")
    if not os.path.exists("%s" % date):
        os.mkdir("%s" % date)

    # sys_name = dis.split("<")[1].split(">")[0]
    time_now = datetime.datetime.now().strftime("%H.%M")
    dis_cu = open("C:/Users/zhang/Desktop/huawei/%s-%s-%s.txt" % (date, host, time_now), "w")
    dis_cu.write(dis)
    dis_cu.close()
    tn.close()
    print("%s设备保存成功!" % host)
else:
    print("所有设备配置文件配置成功!")

 4.1 运行显示登入及查看配置显示成功!

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第16张图片

 查看保存的桌面文件

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第17张图片

 查看文件里面的内容

Python脚本登入多台华为设备-网络编程与自动化-Python telnetlib库的常用方法(2)_第18张图片

 均上配置文件保存成功!

你可能感兴趣的:(python,python,pycharm,网络安全,华为)