用python 网络自动化统计交换机有多少端口UP

用python统计交换机有多少端口UP

用python统计交换机有多少端口UP,可以间接的反馈有多少个用户在线。我们使用上次的脚本将可达的网络设备ip统计到reachable_ip.txt中,这次我们使用reachable_ip.txt来登陆设备来统计多少端口是UP的

云配置

请添加图片描述

拓扑

请添加图片描述

交换机配置SSH

aaalocal-user admin password cipher Huawei@123   //创建python用户,密码为123local-user admin privilege level 15local-user admin service-type ssh
#
user-interface vty 0 4authentication-mode aaaprotocol inbound ssh
#
stelnet server enable
ssh user admin authentication-type all
ssh user admin service-type all
ssh client first-time enable

这个时候我们就能与交换机互访,并SSH登陆了

目的

用python统计交换机有多少端口UP,可以间接的反馈有多少个用户在线。

代码

使用以下代码统计出有多少IP是可达的,他会统计后写入到一个文本文件中,也可以自己手动写或者写个循环

import  pythonping  # 导入 pythonping 库,用于执行 ping 操作
import os  # 导入 os 库,用于操作文件和系统功能# 如果名为 'reachable_ip.txt' 的文件存在,删除它
if os.path.exists('reachable_ip.txt'):os.remove('reachable_ip.txt')ip_list = range(2, 6)  # 创建一个IP列表# 遍历IP列表
for ip in ip_list:ip = '192.168.56.' + str(ip)  # 构建IP地址ping_result = pythonping.ping(ip)  # 执行ping操作f = open('reachable_ip.txt', 'a')  # 打开 'reachable_ip.txt' 文件,以追加模式写入if 'Reply' in str(ping_result):  # 检查ping结果中是否包含 'Reply'print(ip + ' is reachable.')  # 如果包含 'Reply',打印IP地址是可达的f.write(ip + "\n")  # 将可达的IP地址写入 'reachable_ip.txt' 文件中else:print(ip + ' is not reachable.')  # 如果不包含 'Reply',打印IP地址是不可达的f.close()  # 关闭文件
192.168.56.2 is reachable.
192.168.56.3 is reachable.
192.168.56.4 is reachable.
192.168.56.5 is reachable.Process finished with exit code 0#检测到这些IP是可达的,我们接下来用另外一个脚本去登陆上去进行统计

正式统计交换机端口UP的数量的代码

import paramiko  # 导入 paramiko 库,用于 SSH 连接
import time  # 导入 time 库,用于添加延迟等待
import re  # 导入 re 库,用于正则表达式操作
import datetime  # 导入 datetime 库,用于处理日期和时间
import socket  # 导入 socket 库,用于网络通信# 获取用户名和密码
username = input("Username: ")  # 输入用户名
password = input("Password: ")  # 输入密码# 获取当前日期和时间
now = datetime.datetime.now()
date = "%s-%s-%s" % (now.month, now.day, now.year)  # 获取当前日期
time_now = "%s-%s-%s" % (now.hour, now.minute, now.second)  # 获取当前时间switch_with_tacacs_issue = []  # 存储 TACACS 认证失败的交换机列表
switch_not_reachable = []  # 存储不可达的交换机列表
total_number_of_up_port = 0  # 统计所有已连接的端口数量# 读取可访问的 IP 地址列表文件
with open('reachable_ip.txt') as iplist:number_of_switch = len(iplist.readlines())  # 计算交换机数量total_number_of_ports = number_of_switch * 24  # 计算总端口数量(每台交换机有24个端口)iplist.seek(0)  # 重置文件指针到文件开头for line in iplist.readlines():  # 逐行读取 IP 地址列表try:ip = line.strip()  # 去除行末尾的换行符,得到IP地址字符串ssh_client = paramiko.SSHClient()  # 创建 SSHClient 对象ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 设置自动添加主机密钥ssh_client.connect(hostname=ip, username=username, password=password)  # SSH 连接到交换机print("\nYou have successfully connected to ", ip)  # 打印成功连接的消息command = ssh_client.invoke_shell()  # 创建交互式 shellcommand.send(b'screen-length 0 temporary\n')  # 发送命令,设置命令行分页为0command.send(b'display  interface  brief  | include  up\n')  # 发送命令,显示已启用的端口time.sleep(1)  # 等待1秒,确保命令执行完毕output = command.recv(65535)  # 接收命令输出print(output.decode("ascii"))  # 打印交换机输出search_up_port = re.findall(r'GigabitEthernet', output.decode("utf-8"))  # 用正则表达式匹配已启用的端口number_of_up_port = len(search_up_port)  # 计算已连接端口数量print(ip + " has " + str(number_of_up_port) + " ports up.")  # 打印已连接端口数量信息total_number_of_up_port += number_of_up_port  # 更新总的已连接端口数量except paramiko.ssh_exception.AuthenticationException:  # 处理认证异常print("TACACS is not working for " + ip + ".")  # 打印 TACACS 认证失败消息switch_with_tacacs_issue.append(ip)  # 将无法通过 TACACS 认证的交换机加入列表except socket.error:  # 处理网络异常print(ip + " is not reachable.")  # 打印不可达消息switch_not_reachable.append(ip)  # 将不可达的交换机加入列表iplist.close()  # 关闭 IP 地址列表文件# 输出统计信息print("\n")print("There are totally " + str(total_number_of_ports) + " ports available in the network.")print(str(total_number_of_up_port) + " ports are currently up.")print("port up rate is %.2f%%" % (total_number_of_up_port / float(total_number_of_ports) * 100))print('\nTACACS is not working for below switches: ')for i in switch_with_tacacs_issue:print(i)print('\nBelow switches are not reachable: ')for i in switch_not_reachable:print(i)# 将结果写入文件f = open(date + ".txt", "a+")f.write('AS of ' + date + " " + time_now)f.write("\n\nThere are totally " + str(total_number_of_ports) + " ports available in the network.")f.write("\n" + str(total_number_of_up_port) + " ports are currently up.")f.write("\nport up rate is %.2f%%" % (total_number_of_up_port / float(total_number_of_ports) * 100))f.write("\n***************************************************************\n\n")f.close()  # 关闭文件

结果

Username: admin
Password: Huawei@123You have successfully connected to  192.168.56.2Info: The max number of VTY users is 5, and the numberof current VTY users on line is 1.The current login time is 2023-12-09 23:08:19.
<Huawei>screen-length 0 temporary
Info: The configuration takes effect on the current user terminal interface only.
<Huawei>display  interface  brief  | include  up
PHY: Physical
*down: administratively down
(l): loopback
(s): spoofing
(b): BFD down
(e): ETHOAM down
(dl): DLDP down
(d): Dampening Suppressed
InUti/OutUti: input utility/output utility
Interface                   PHY   Protocol InUti OutUti   inErrors  outErrors
GigabitEthernet0/0/1        up    up          0%     0%          0          0
GigabitEthernet0/0/2        up    up          0%     0%          0          0
GigabitEthernet0/0/3        up    up          0%     0%          0          0
NULL0                       up    up(s)       0%     0%          0          0
Vlanif1                     up    up          --     --          0          0
<Huawei>
192.168.56.2 has 3 ports up.You have successfully connected to  192.168.56.3Info: The max number of VTY users is 5, and the numberof current VTY users on line is 1.The current login time is 2023-12-09 23:08:21.
<Huawei>screen-length 0 temporary
Info: The configuration takes effect on the current user terminal interface only.
<Huawei>display  interface  brief  | include  up
PHY: Physical
*down: administratively down
(l): loopback
(s): spoofing
(b): BFD down
(e): ETHOAM down
(dl): DLDP down
(d): Dampening Suppressed
InUti/OutUti: input utility/output utility
Interface                   PHY   Protocol InUti OutUti   inErrors  outErrors
GigabitEthernet0/0/1        up    up          0%     0%          0          0
GigabitEthernet0/0/2        up    up          0%     0%          0          0
GigabitEthernet0/0/3        up    up          0%     0%          0          0
GigabitEthernet0/0/4        up    up          0%     0%          0          0
NULL0                       up    up(s)       0%     0%          0          0
Vlanif1                     up    up          --     --          0          0
<Huawei>
192.168.56.3 has 4 ports up.You have successfully connected to  192.168.56.4Info: The max number of VTY users is 5, and the numberof current VTY users on line is 1.The current login time is 2023-12-09 23:08:23.
<Huawei>screen-length 0 temporary
Info: The configuration takes effect on the current user terminal interface only.
<Huawei>display  interface  brief  | include  up
PHY: Physical
*down: administratively down
(l): loopback
(s): spoofing
(b): BFD down
(e): ETHOAM down
(dl): DLDP down
(d): Dampening Suppressed
InUti/OutUti: input utility/output utility
Interface                   PHY   Protocol InUti OutUti   inErrors  outErrors
GigabitEthernet0/0/1        up    up          0%     0%          0          0
GigabitEthernet0/0/2        up    up          0%     0%          0          0
NULL0                       up    up(s)       0%     0%          0          0
Vlanif1                     up    up          --     --          0          0
<Huawei>
192.168.56.4 has 2 ports up.You have successfully connected to  192.168.56.5Info: The max number of VTY users is 5, and the numberof current VTY users on line is 1.The current login time is 2023-12-09 23:08:25.
<Huawei>screen-length 0 temporary
Info: The configuration takes effect on the current user terminal interface only.
<Huawei>display  interface  brief  | include  up
PHY: Physical
*down: administratively down
(l): loopback
(s): spoofing
(b): BFD down
(e): ETHOAM down
(dl): DLDP down
(d): Dampening Suppressed
InUti/OutUti: input utility/output utility
Interface                   PHY   Protocol InUti OutUti   inErrors  outErrors
GigabitEthernet0/0/1        up    up          0%     0%          0          0
GigabitEthernet0/0/2        up    up          0%     0%          0          0
GigabitEthernet0/0/3        up    up          0%     0%          0          0
GigabitEthernet0/0/4        up    up          0%     0%          0          0
GigabitEthernet0/0/5        up    up          0%     0%          0          0
NULL0                       up    up(s)       0%     0%          0          0
Vlanif1                     up    up          --     --          0          0
<Huawei>
192.168.56.5 has 5 ports up.There are totally 96 ports available in the network.
14 ports are currently up.
port up rate is 14.58%TACACS is not working for below switches: Below switches are not reachable: Process finished with exit code 0

执行完后,会生成一个以日期为命名的文本文档

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Cisco Packet Tracer】VLAN通信 多臂/单臂路由/三层交换机

在进行本文的实验之前&#xff0c;请确保掌握以下内容&#xff1a; 【Cisco Packet Tracer】交换机 学习/更新/泛洪/VLAN实验 【Cisco Packet Tracer】路由器实验 静态路由/RIP/OSPF/BGP 【Cisco Packet Tracer】路由器 NAT实验 本文介绍VLAN间的通信方法&#xff0c; 包括…

FreeRTOS的任务优先级、Tick以及状态讲解(尊敬的嵌入式工程师,不妨进来喝杯茶)

任务优先级和Tick 在FreeRTOS中&#xff0c;任务的优先级和Tick是两个关键的概念&#xff0c;它们直接影响任务的调度和执行。 任务优先级 每个任务都被分配一个优先级&#xff0c;用于决定任务在系统中的调度顺序。 优先级是一个无符号整数&#xff0c;通常从0开始&#xff0…

Mysql- 流程函数-(If, CASE WHEN)的使用及练习

目录 4.1 If函数语法格式 4.2 CASE WHEN 条件表达式格式 4.3 update与 case when 4.4 练习题1 4.5 练习题2 4.6 练习题3-行转列 4.7 牛客练习题 4.8 LeetCode练习题 4.1 If函数语法格式 IF(expr1,expr2,expr3) 解释&#xff1a; 如果表达式expr1true(expr1 <>…

Xcode doesn’t support iOS 16.6

xocde版本低&#xff0c;手动放入16.6的依赖文件 https://gitee.com/qiu1993/iOSDeviceSupport/blob/master/iOS16/16.6.zip 路径 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport

分割回文串

分割回文串 描述 : 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 题目 : LeetCode 131.分割回文串 : 131. 分割回文串 分析 : 字符串如何判断回文本…

20 Redis进阶 - 运维监控

1、理解Redis监控 Redis运维和监控的意义不言而喻&#xff0c;可以以下三个方面入手 1.首先是Redis自身提供了哪些状态信息&#xff0c;以及有哪些常见的命令可以获取Redis的监控信息; 2.一些常见的UI工具可以可视化的监控Redis; 3.理解Redis的监控体系;2、Redis自身状态及命…

Vue3-02-ref() 响应式详解

ref() 是什么 ref() 是一个函数&#xff1b; ref() 函数用来声明响应式的状态&#xff08;就是来声明变量的&#xff09; ref() 函数声明的变量&#xff0c;是响应式的&#xff0c;变量的值改变之后&#xff0c;页面中会自动重新渲染。ref() 有什么特点 1.ref() 可以声明基础…

VUE语法--toRefs与toRef用法

1、功能概述 ref和reactive能够定义响应式的数据&#xff0c;当我们通过reactive定义了一个对象或者数组数据的时候&#xff0c;如果我们只希望这个对象或者数组中指定的数据响应&#xff0c;其他的不响应。这个时候我们就可以使用toRefs和toRef实现局部数据的响应。 toRefs是…

MIT线性代数笔记-第28讲-正定矩阵,最小值

目录 28.正定矩阵&#xff0c;最小值打赏 28.正定矩阵&#xff0c;最小值 首先正定矩阵是一个实对称矩阵 由第 26 26 26讲的末尾可知正定矩阵有以下四种判定条件&#xff1a; 所有特征值都为正左上角所有 k k k阶子矩阵行列式都为正&#xff08; 1 ≤ k ≤ n 1 \le k \le n …

DDD系列 - 第6讲 仓库Repository及Mybatis、JPA的取舍(一)

目录 一、领域层定义仓库接口1.1 设计聚合1.2 定义仓库Repository接口二 、基础设施层实现仓库接口2.1 设计数据库2.2 集成Mybatis2.3 引入Convetor2.4 实现仓库三、回顾一、领域层定义仓库接口 书接上回,之前通过一个关于拆解、微服务、面向对象的故事,向大家介绍了如何从微…

58.Nacos源码分析2

三、服务心跳。 3.服务心跳 Nacos的实例分为临时实例和永久实例两种&#xff0c;可以通过在yaml 文件配置&#xff1a; spring:application:name: order-servicecloud:nacos:discovery:ephemeral: false # 设置实例为永久实例。true&#xff1a;临时; false&#xff1a;永久ser…

【C/C++笔试练习】多态的概念、虚函数的概念、虚表地址、派生类的虚函数、虚函数的访问、指针引用、动态多态、完全数计算、扑克牌大小

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;多态的概念&#xff08;2&#xff09;虚函数的概念&#xff08;3&#xff09;虚表地址&#xff08;4&#xff09;派生类的虚函数&#xff08;5&#xff09;虚函数的访问&#xff08;6&#xff09;分析程序&#xff08;7&…

C# WPF上位机开发(会员管理软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 好多同学都认为上位机只是纯软件开发&#xff0c;不涉及到硬件设备&#xff0c;比如听听音乐、看看电影、写写小的应用等等。如果是消费电子&#…

HibernateJPA快速搭建

1. 先创建一个普通Maven工程&#xff0c;导入依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><depe…

Java 匿名内部类使用的外部变量,为什么一定要加 final?

问题描述 Effectively final Java 1.8 新特性&#xff0c;对于一个局部变量或方法参数&#xff0c;如果他的值在初始化后就从未更改&#xff0c;那么该变量就是 effectively final&#xff08;事实 final&#xff09;。 这种情况下&#xff0c;可以不用加 final 关键字修饰。 …

报错:Parsed mapper file: ‘file mapper.xml 导致无法启动

报错 &#xff1a; Logging initialized using class org.apache.ibatis.logging.stdout.StdOutImpl adapter. Registered plugin: com.github.yulichang.interceptor.MPJInterceptor3b2c8bda Parsed mapper file: file [/Mapper.xml] application无法启动 我这边产生原因是项…

! [remote rejected] master -> master (pre-receive hook declined)

! [remote rejected] master -> master (pre-receive hook declined) 如图&#xff1a; 出错解决方法 首先输入命令 git branch xindefenzhi然后&#xff0c;进入这个新创建的分支 git checkout branch然后重新git push就可以了

爬虫学习-基础库的使用(urllib库)

目录 一、urllib库介绍 二、request模块使用 &#xff08;1&#xff09;urlopen ①data参数 ②timeout参数 &#xff08;2&#xff09;request &#xff08;3&#xff09;高级用法 ①验证 ②代理 ③Cookie 三、处理异常 ①URLError ②HTTPError 四、解析链接 ①urlparse ②…

Kernel(一):基础

本文主要讨论210的kernel基础相关知识。 内核驱动 驱动是内核中的硬件设备管理模块,工作在内核态,程序故障可能导致内核崩溃,程序漏洞会使内核不安全 根文件系统提供根目录,进程存放在根文件系统中,内核启动最后会装载根文件系统 应用程序不属于内核,…

1828_ChibiOS中的对象FIFO

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 最初的这个理解&#xff0c;当看到后面之后就知道有点偏差了。其实&#xff0c;这个传输就是一个单纯的FIFO而不是两个FIFO之间的什么操作。 2.…