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

news2024/11/18 5:57:49

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

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

云配置

请添加图片描述

拓扑

请添加图片描述

交换机配置SSH

aaa
 local-user admin password cipher Huawei@123   //创建python用户,密码为123
 local-user admin privilege level 15
 local-user admin service-type ssh
#
user-interface vty 0 4
 authentication-mode aaa
 protocol 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()  # 创建交互式 shell
            command.send(b'screen-length 0 temporary\n')  # 发送命令,设置命令行分页为0
            command.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@123

You have successfully connected to  192.168.56.2

Info: The max number of VTY users is 5, and the number
      of 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.3

Info: The max number of VTY users is 5, and the number
      of 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.4

Info: The max number of VTY users is 5, and the number
      of 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.5

Info: The max number of VTY users is 5, and the number
      of 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.coloradmin.cn/o/1298737.html

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

相关文章

创建dockerSwarm nfs挂载

创建dockerSwarm nfs挂载 nfs高可用部署(lsyncd两主机双向同步) nfs高可用部署(lsyncd三主机三向同步) 1. 通过 Volume 1.1 创建 Docker Volume 每个 swarm 节点均创建相同名称的 Docker Volume&#xff08;名称为 nfs120&#xff09; docker volume create --driver local …

PyTorch实现逻辑回归

最终效果 先看下最终效果&#xff1a; 这里用一条直线把二维平面上不同的点分开。 生成随机数据 #创建训练数据 x torch.rand(10,1)*10 #shape(10,1) y 2*x (5 torch.randn(10,1))#构建线性回归参数 w torch.randn((1))#随机初始化w&#xff0c;要用到自动梯度求导 b …

[Linux] Apache的配置与运用

一、web虚拟主机的构台服务器上运行多个网站&#xff0c;每个网站实际上并不独立占用整个服务器&#xff0c;因此称为"虚拟"虚拟主机的虚拟主机服务可以让您充分利用服务器的硬件资源&#xff0c;大大降低了建立和运营网站的成本 Httpd服务使构建虚拟主机服务器变得容…

[LeetCode周赛复盘] 第 119 场双周赛20231209

[LeetCode周赛复盘] 第 119 场双周赛20231209 一、本周周赛总结100130. 找到两个数组中的公共元素1. 题目描述2. 思路分析3. 代码实现 100152. 消除相邻近似相等字符1. 题目描述2. 思路分析3. 代码实现 100147. 最多 K 个重复元素的最长子数组1. 题目描述2. 思路分析3. 代码实…

数据结构之归并排序及排序总结

目录 归并排序 归并排序的时间复杂度 排序的稳定性 排序总结 归并排序 归并排序大家只需要掌握其递归方法即可&#xff0c;非递归方法由于在某些特殊场景下边界难控制&#xff0c;我们一般很少使用非递归实现归并排序。那么归并排序的递归方法我们究竟是怎样实现呢&#xff…

蓝桥杯航班时间

蓝桥杯其他真题点这里&#x1f448; //飞行时间 - 时差 已过去的时间1 //飞行时间 时差 已过去的时间2 //两个式子相加会发现 飞行时间 两段时间差的和 >> 1import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public cl…

ECS云主机容量大于2TB,初始化Linux数据盘(parted)

本文为您介绍当容量大于2TB时&#xff0c;如何在Linux环境下适用parted分区工具初始化数据盘。 操作场景 本文以“CentOS 7.6 64位”操作系统为例&#xff0c;介绍当磁盘容量大于2TB时&#xff0c;如何使用parted分区工具在Linux操作系统中为数据盘设置分区&#xff0c;操作回…

使用粗糙贴图制作粗纹皮革手提包3D模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

对无向图进行邻接矩阵的转化,并且利用DFS(深度优先)和BFS(广度优先)算法进行遍历输出, 在邻接矩阵存储结构上,完成最小生成树的操作。

一 实验目的 1&#xff0e;掌握图的相关概念。 2&#xff0e;掌握用邻接矩阵和邻接表的方法描述图的存储结构。 3&#xff0e;掌握图的深度优先搜索和广度优先搜索遍历的方法及其计算机的实现。 4&#xff0e;理解最小生成树的有关算法 二 实验内容及要求 实验内容&#…

管理类联考——数学——真题篇——按知识分类——数据

文章目录 排列组合2023真题&#xff08;2023-05&#xff09;-数据分析-排列组合-组合-C运算-至少-需反面思考真题&#xff08;2023-08&#xff09;-数据分析-排列组合-相邻不相邻-捆绑法插空法-插空法注意空位比座位多1个&#xff0c;是用A&#xff1b;捆绑法内部排序用A&#…

实现简易的一对一用户聊天

服务端 package 一对一用户;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector…

langchain入门及两种模型的使用

一、简介 1、OpenAi、chatgpt Openai就是开发chatgpt系列AI产品的公司。 chatgpt是一款AI产品&#xff0c;chatgpt plus也是一款AI产品&#xff0c;后者可以看做是前者的会员版/付费版。 chatgpt-3.5、chatgpt-4这俩简单说都是AI技术模型&#xff0c;后者可以看做是前者的升…

linux下的进程程序替换

进程程序替换 替换概念替换函数execl()execv()execvp()/execlp()execle()/execvpe() 如何在C/C程序里面执行别的语言写的程序。小tips 替换概念 当进程调用一种exec函数时&#xff0c;该进程的用户空间代码和数据完全被新程序替换&#xff0c;从新程序的代码部分开始运行。调用…

案例005:基于小程序的电子点菜系统开发设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【机器学习】亚马逊云科技基础知识:以推荐系统为例。你知道机器学习的关键所在么?| 机器学习管道的各个阶段及工作:以Amazon呼叫中心转接问题为例讲解

有的时候,暂时的失利比暂时胜利要好得多。 ————经典网剧《mao pian》,邵半仙儿 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域TOP

MongoDB中的sort()排序方法、aggregate()聚合方法和索引

本文主要介绍MongoDB中的sort()排序方法、aggregate()聚合方法和索引。 目录 MongoDB的sort()排序方法MongoDB的aggregate()聚合方法MongoDB的索引 MongoDB的sort()排序方法 在MongoDB中&#xff0c;sort()方法是用来对查询结果进行排序的。sort()方法可以用于在查询语句中对指…

红队攻防实战之ThinkPHP-RCE集锦

你若不勇敢&#xff0c;谁又可以替你坚强&#xff1f; ThinkPHP 2.x RCE漏洞 1、查询phpinfo() 2、任意代码执行 3、Getshell 蚁剑连接&#xff1a; ThinkPHP5 5.0.23 RCE漏洞 发送数据包&#xff1a; 成功执行id命令&#xff1a; 工具验证 ThinkPHP5 SQL注入漏洞 &&am…

Android开发,JNI,NDK,C++层操作java的对象实践

Android开发&#xff0c;JNI&#xff0c;NDK&#xff0c;C层操作java的对象实践 1.数组 在jni中调用数组 extern "C" JNIEXPORT void JNICALL Java_com_example_myapplication_MainActivity_testArr(JNIEnv *env, jobject thiz, jint a, jstring s,jintArray ints…

Axure网页端高交互组件库, 下拉菜单文件上传穿梭框日期城市选择器

作品说明 组件数量&#xff1a;共 11 套 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;web端原型设计、桌面端原型设计 作品特色 本作品为「web端组件库」&#xff0c;高保真高交互 (带仿真功能效果)&#xff1b;运用了动态面板、中继…

LNMP网站架构分布式搭建部署

1. 数据库的编译安装 1. 安装软件包 2. 安装所需要环境依赖包 3. 解压缩到软件解压缩目录&#xff0c;使用cmake进行编译安装以及模块选项配置&#xff08;预计等待20分钟左右&#xff09;&#xff0c;再编译及安装 4. 创建mysql用户 5. 修改mysql配置文件&#xff0c;删除…