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

用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

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

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ModuleNotFoundError: No module named ‘docx‘

ModuleNotFoundError: No module named ‘docx’ 文章目录 ModuleNotFoundError: No module named docx背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时&#xff0c;报错&#xff1a; Traceback (most recent call last): Fi…

循环依赖:解析软件设计的迷局

目录 引言 循环依赖的本质 影响与挑战 1. 编译和构建问题 2. 耦合度增加 3. 难以进行单元测试 4. 可扩展性降低 解决循环依赖的策略 1. 模块重构 2. 引入接口抽象 3. 依赖注入 4. 模块化与分层设计 5. 使用工具进行分析 实际案例&#xff1a;Spring框架的循环依赖…

Redis高效恢复策略:内存快照与AOF

第1章&#xff1a;Redis宕机恢复的重要性和挑战 大家好&#xff0c;我是小黑。今天咱们来聊聊Redis宕机后的恢复策略。想象一下&#xff0c;你的网站突然宕机了&#xff0c;所有的数据都飘了&#xff0c;这种情况下&#xff0c;快速恢复数据就显得尤为重要。Redis作为一个高性…

令牌桶算法理解学习(限流算法)

令牌桶算法是网络流量整形&#xff08;Traffic Shaping&#xff09;和速率限制&#xff08;Rate Limiting&#xff09;中最常使用的一种算法。典型情况下&#xff0c;令牌桶算法用来控制发送到网络上的数据的数目&#xff0c;并允许突发数据的发送。 用简单的话语来说就是限制…

研表究明,文字的序顺并不定一能响影GPT-4读阅

深度学习自然语言处理 原创作者&#xff1a;yy 很多年前&#xff0c;你一定在互联网上看过这张图&#xff0c;展示了人脑能够阅读和理解打乱顺序的单词和句子&#xff01;而最近东京大学的研究发现&#xff0c;大语言模型&#xff08;LLMs&#xff09; 尤其是 GPT-4&#xff0c…

STM32 标准外设SPL库、硬件抽象层HAL库、低层LL库区别?

1、STM32 之一 HAL库、标准外设库、LL库_ZCShou的博客-CSDN博客_ll库&#xff08;仔细阅读&#xff09; 2、STM32标准外设库、 HAL库、LL库 - King先生 - 博客园 3、STM32 之 HAL库_戈 扬的博客&#xff08;仔细阅读&#xff09; 4、STM32 LL 为什么比 HAL 高效&#xff1…

文档或书籍扫描为 PDF:ScanPapyrus Crack

ScanPapyrus 可让您快速轻松地将文档或书籍扫描为 PDF&#xff0c;批处理模式使扫描过程快速高效&#xff0c;自动处理书籍并将其拆分为单独的页面 用于快速扫描文档、书籍或打印照片的扫描仪软件 快速扫描文档 使用此扫描仪软件&#xff0c;您无需在扫描仪和计算机之间来回移动…

架构LNMP

目录 1.安装Nginx服务 2.安装 MySQL 服务 3.安装配置 PHP 解析环境 4.部署 Discuz&#xff01;社区论坛 Web 应用 1.安装Nginx服务 实验准备 systemctl stop firewalld systemctl disable firewalld setenforce 0 安装依赖包 yum -y install pcre-devel zlib-devel gcc…

【Python】Selenium自动化测试框架

设计思路 本文整理归纳以往的工作中用到的东西&#xff0c;现汇总成基础测试框架提供分享。 框架采用python3 selenium3 PO yaml ddt unittest等技术编写成基础测试框架&#xff0c;能适应日常测试工作需要。 1、使用Page Object模式将页面定位和业务操作分开&#xff0…

Gilisoft Video Editor——迈出剪辑的第一步

今天博主分享的是又一款剪辑软件——视频剪辑手&#xff08;GiliSoft Video Editor&#xff09;&#xff0c;对剪辑视频感兴趣的小伙伴千万不要错过。这是一款专门用于视频剪辑的软件&#xff0c;功能比较简单&#xff0c;相比于专业的pr是比不了的&#xff0c;但是制作一些简单…

C/C++ 编程规范总结

目录 前言 一、编程规范的作用 二、规范的三种形式 三、规范的内容 1. 基本原则 原则1-1 原则1-2 原则1-3 原则1-4 原则1-5 原则1-6 原则1-7 2. 布局 规则2-1-1 规则2-1-2 规则2-1-3 规则2-1-4 规则2-1-5 规则2-1-6 规则2-2-1 规则2-2-2 规则2-2-3 建议2…

掌握iText:轻松处理PDF文档-基础篇

关于iText iText是一个强大的PDF处理库&#xff0c;可以用于创建、读取和操作PDF文件。它支持PDF表单、加密和签署等操作&#xff0c;同时支持多种字体和编码。maven的中央仓库中的最新版本是5.X&#xff0c;且iText5不是完全免费的&#xff0c;但是基础能力是免费使用的&…

pWnOS v2.0

该靶机绑定了静态IP地址 10.10.10.100&#xff0c;所以这里需要修改我们的网络配置&#xff01;整个网段修改为10.10.10.0/24 信息收集 主机存活探测 arp-scan -l 端口信息探测 nmap -sT --min-rate 10000 -p- 10.10.10.100 &#xff08;只开放了22 80端口&#xff09; 服务…

2023-12-10 LeetCode每日一题(爬楼梯)

2023-12-10每日一题 一、题目编号 70. 爬楼梯二、题目链接 点击跳转到题目位置 三、题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 示例 2&#xff1a; 提…

【Python】手把手教你用tkinter设计图书管理登录UI界面(三)

上一篇&#xff1a;【Python】手把手教你用tkinter设计图书管理登录UI界面&#xff08;二&#xff09;-CSDN博客 下一篇&#xff1a; 紧接上一篇文章&#xff0c;继续完善项目功能&#xff1a;用户登录。由于老王的注册部分有亿点点复杂&#xff0c;还没完成&#xff0c;但是…

期末速成数据库极简版【分支循环函数】(4)

目录 全局变量&局部变量 局部变量定义declare 局部变量赋值select 局部变量赋值select 【1】分支结构IF 【2】分支结构CASE 简单CASE语句 搜索CASE语句 【3】循环结构While 【4】系统函数 常用字符串函数 时间函数 【5】自定义函数—标量函数 函数创建 函…

oops-framework框架 之 Excel转Json

引擎&#xff1a; CocosCreator 3.8.0 环境&#xff1a; Mac Gitee: oops-plugin-excel-to-json 注&#xff1a; 作者dgflash的oops-framework框架QQ群&#xff1a; 628575875 配置 作者dgflash在oops-framework的框架中&#xff0c;提供了关于Excel数据表转换为Json和TypeSc…

typora中显示除号的问题

问题 在latex中“除号&#xff08; \div &#xff09;” 通常用 \div。但在typora中写数学公式时&#xff0c;却发现 “除号” 如果使用 \div 并没有显示为 “ \div ”&#xff0c;而是 “ ∇ ⋅ \nabla \cdot ∇⋅ ”。 原因 typora中&#xff0c;\div 显示为 ∇ ⋅ \…

Html转PDF,前端JS实现Html页面导出PDF(html2canvas+jspdf)

Html转PDF&#xff0c;前端JS实现Html页面导出PDF&#xff08;html2canvasjspdf&#xff09; 文章目录 Html转PDF&#xff0c;前端JS实现Html页面导出PDF&#xff08;html2canvasjspdf&#xff09;一、背景介绍二、疑问三、所使用技术html2canvasjspdf 四、展示开始1、效果展示…

Java第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类&#xff0c;用户只要创建这些类的对象&#xff0c;使用相应的方法&#xff0c;即使不具备有关的网络支持&#xff0c;也可 以编写出高质量的网络…