python自动化运维管理拓扑

这篇具有很好参考价值的文章主要介绍了python自动化运维管理拓扑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、简介

2、实验环境

3、拓扑图

4、需求及其代码

4.1、测试连通性

4.2、远程登陆

4.3、配置loopback

4.4、监控内存使用率

4.5、自动化巡检内存使用率

4.6、自动化配置snmp服务

4.7、提取分析字符串


🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发和前端开发。
🦅主页:@逐梦苍穹
🍔您的一键三连,是我创作的最大动力🌹

1、简介

这部分实验是属于python自动化管理拓扑、配置拓扑的实验。模拟企业配置中,使用python自动化批量管理网络设备,减少人力物力时间成本的场景。

2、实验环境

ensp软件+centos。

ensp中需要配置好cloud,连接本地的vmnet8虚拟网卡,centos需要设置nat。

cloud

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

centos8

centos8需要能ping同vmnet8的网关和拓扑里面的192.168.99.254/24的ip地址。

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

3、拓扑图

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

4、需求及其代码

4.1、测试连通性

在centos8虚拟机上,测试是否能够ping通实验拓扑中设备(RT、CoreSW1、CoreSW2、AccessSW1、AccessSW2)的管理IP地址:

Ping AccessSW1管理IP地址:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

Ping AccessSW2管理IP地址截图:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

Ping CoreSW1管理IP地址截图:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

Ping CoreSW2管理IP地址截图:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

Ping RT 管理IP地址截图:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

4.2、远程登陆

远程登陆到设备RT:

代码:

import paramiko
import time

ip = "3.3.3.3"
user = "python"
passwd = "123456"

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip, username=user, password=passwd,look_for_keys=False)

command = ssh_client.invoke_shell()

command.send("dis version\n")
time.sleep(1)
output = command.recv(65535).decode("ascii")
name = output.split("<")[-1][:-1]
name = name + "-xzl42"
print(name)

command.send("sys\n")
command.send("sysname " + name + "\n")
time.sleep(1)

command.send("dis ospf routing\n")
time.sleep(1)

output = command.recv(65535)
print(output.decode("ascii"))
ssh_client.close()

输出结果:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

4.3、配置loopback

需求:远程登陆到设备Core SW1和Core SW2上配置loopback42,设置IP地址为92.92.92.92/32并保存配置。并输出该接口的IP配置信息.

代码:

import paramiko
import re
import time

ips = ["1.1.1.1", "2.2.2.2"]
user = "python"
passwd = "123456"

for ip in ips:
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        ssh_client.connect(hostname=ip, username=user, password=passwd)

        command = ssh_client.invoke_shell()
        command.send("screen-length 0 temporary\n")
        time.sleep(1)
        command.send("sys\n")
        command.send("interface LoopBack 42\n")
        command.send("ip address 92.92.92.92 32\n")
        time.sleep(1)
        command.send("display ip interface LoopBack 42\n")
        time.sleep(1)
        output = command.recv(65535).decode("utf-8")
        print(output)
    except Exception as e:
        print(f"无法连接或配置设备: {str(e)}")
    finally:
        ssh_client.close()

输出结果:

①设备Core SW1输出:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

②设备Core SW2输出:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

4.4、监控内存使用率

要求:查看实验拓扑中3台设备(RT、CoreSW2、AccessSW2)的内存使用率情况。

这里使用多线程+正则表达式来实现:

代码:

import paramiko
import time
from multiprocessing import Process
import re

def internalStorage(ip):
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(hostname=ip, username="python", password="123456")

    cmd = ssh_client.invoke_shell()
    cmd.send("screen-length 0 temporary\n")
    cmd.send("dis memory-usage\n")
    time.sleep(1)
    result = b''
    recv_ready_status = True
    while recv_ready_status:
        output = cmd.recv(65535)
        result += output
        time.sleep(1)
        recv_ready_status = cmd.recv_ready()
    output_end = result.decode("ascii")
    name = output_end.split("<")[-1][:-1]

    lines = output_end.split("\n")
    for line in lines:
        result = re.search(r'Memory Using Percentage Is: (\d+)%', line)
        if result != None:
            output_end = result.group(1)
            break
    
    print("{} meory-usage: {}%".format(name,output_end))
    ssh_client.close
if __name__ == '__main__':
    ips = ["3.3.3.3", "2.2.2.2", "192.168.99.20"]
    ls = []
    for i in ips:
        p=Process(target=internalStorage,args=(i,))
        ls.append(p)
    for i in ls:
        i.start()

输出:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

4.5、自动化巡检内存使用率

在4.3的基础上实现对三台设备的自动化巡检内存使用率并输出,每隔20秒巡检一次:

import paramiko
import time
from multiprocessing import Process
import re

def internalStorage(ip):
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(hostname=ip, username="python", password="123456")

    cmd = ssh_client.invoke_shell()
    cmd.send("screen-length 0 temporary\n")
    cmd.send("dis memory-usage\n")
    time.sleep(1)
    result = b''
    recv_ready_status = True
    while recv_ready_status:
        output = cmd.recv(65535)
        result += output
        time.sleep(1)
        recv_ready_status = cmd.recv_ready()
    output_end = result.decode("ascii")
    name = output_end.split("<")[-1][:-1]

    lines = output_end.split("\n")
    for line in lines:
        result = re.search(r'Memory Using Percentage Is: (\d+)%', line)
        if result != None:
            output_end = result.group(1)
            break
    
    print("{} meory-usage: {}%".format(name,output_end))
    ssh_client.close
if __name__ == '__main__':
    while True:
        ips = ["3.3.3.3", "2.2.2.2", "192.168.99.20"]
        ls = []
        for i in ips:
            p=Process(target=internalStorage,args=(i,))
            ls.append(p)
        for i in ls:
            i.start()
        time.sleep(20)

4.6、自动化配置snmp服务

需求:通过python脚本,在设备CoreSW1上配置snmp服务,只允许win10-vscode作为网管平台访问其snmp服务:

代码:

import paramiko
import time
from multiprocessing import Process

def sshLogin(ip):
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(hostname=ip, username="python", password="123456")

    cmd = ssh_client.invoke_shell()
    try:
        cmd.send("sy\n")

        cmd.send("acl 2000\n")

        cmd.send("rule 5 permit source 192.168.99.101 0.0.0.0\n")
        time.sleep(1)
        cmd.send("rule 100 deny\n")
        cmd.send("quit\n")
        cmd.send("dis acl all\n")
        cmd.send("snmp-agent\n")
        time.sleep(1)
        cmd.send("snmp-agent community read pub-xzl-42 acl 2000\n")
        time.sleep(1)
        cmd.send("snmp-agent community write prv-xzl-42 acl 2000\n")
        time.sleep(1)
        cmd.send("snmp-agent sys-info version v1 v2c\n")
        time.sleep(1)
        cmd.send("dis snmp-agent community\n")
        output = cmd.recv(65535).decode("utf-8")
        print(output)
    except:
        print("出错")
    ssh_client.close()

if __name__ == '__main__':
    ips = ["1.1.1.1"]

    ls = []
    for i in ips:
        p=Process(target=sshLogin,args=(i,))
        ls.append(p)
    for i in ls:
        i.start()

输出:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

测试snmp服务正常,开启抓包抓取到平台获取到的system组信息:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

抓包截图:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

4.7、提取分析字符串

从如下字符串中提取相应信息并保存到json文件,读出保存的json文件并打印出来。

字符串:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

代码:

import re
import json

def convert_prefix_to_subnet_mask(prefix):
    # 将子网掩码的位数转换为字符串
    subnet_mask = '1' * prefix + '0' * (32 - prefix)
    
    # 将字符串转换为四段十进制数字
    octets = [int(subnet_mask[i:i+8], 2) for i in range(0, 32, 8)]
    
    # 将数字转换为点分十进制格式
    subnet_mask_str = '.'.join(map(str, octets))
    
    return subnet_mask_str

# 给定的字符串
str_data = '''
Interface           IP Address/Mask      Physical   Protocol
LoopBack0           1.1.1.1/32           up         up(s)
MEth0/0/1           unassigned           down       down
NULL0               unassigned           up         up(s)
Vlanif1             unassigned           down       down
Vlanif10            172.16.52.10/24      up         up
Vlanif20            172.16.62.10/24      up         up
Vlanif30            192.168.72.1/30      up         up
Vlanif99            192.168.99.201/24    up         up
'''

# 提取接口信息的正则表达式
interface_regex = re.compile(r'(\S+)\s+([\d.]+(?:\+\S+)?)/(\d+)\s+\S+\s+\S+')

# 提取接口信息
interface_matches = interface_regex.findall(str_data)

# 创建 JSON 数据
json_data = {
    "文件描述": "本json文件保存网络设备接口IP信息",
    "创建者": "xzl42",
    "接口IP信息": [{"接口名": name, "IP地址": ip, "子网掩码": convert_prefix_to_subnet_mask(int(prefix))} for name, ip, prefix in interface_matches]
}

# 将 JSON 数据保存到文件
with open('jsonData.json', 'w', encoding='utf-8') as json_file:
    json.dump(json_data, json_file, indent=4, ensure_ascii=False)

# 读取 JSON 文件并打印
with open('jsonData.json', 'r', encoding='utf-8') as json_file:
    loaded_data = json.load(json_file)
    print(json.dumps(loaded_data, indent=4, ensure_ascii=False))

输出:

python自动化运维管理拓扑,python,numpy,开发语言,运维,自动化,网络,ensp

json文件:

{
  "文件描述": "本json文件保存网络设备接口IP信息",
  "创建者": "xzl42",
  "接口IP信息": [
    {
      "接口名": "LoopBack0",
      "IP地址": "1.1.1.1",
      "子网掩码": "255.255.255.255"
    },
    {
      "接口名": "Vlanif10",
      "IP地址": "172.16.52.10",
      "子网掩码": "255.255.255.0"
    },
    {
      "接口名": "Vlanif20",
      "IP地址": "172.16.62.10",
      "子网掩码": "255.255.255.0"
    },
    {
      "接口名": "Vlanif30",
      "IP地址": "192.168.72.1",
      "子网掩码": "255.255.255.252"
    },
    {
      "接口名": "Vlanif99",
      "IP地址": "192.168.99.201",
      "子网掩码": "255.255.255.0"
    }
  ]
}

              文章来源地址https://www.toymoban.com/news/detail-818725.html

到了这里,关于python自动化运维管理拓扑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python-自动化篇-运维-网络-IP

    IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等。 Python提供了一个强大的第三方模块IPy (https://g

    2024年02月19日
    浏览(46)
  • 智能python自动化运维常用模块

    通过第三方模块获取服务器的基本性能、块设备、网卡接口、网络地址库等信息。 1.1 系统性能模块psutil:获取系统性能信息、内存信息、磁盘信息、网络信息、用户信息等。 1.2 IP地址处理模块IPy: 处理IP地址,网段等。 1.3 DNS处理模块dnspython: 实现dns服务监控以及解析结果的校

    2024年02月08日
    浏览(48)
  • Linux6.2 ansible 自动化运维工具(机器管理工具)

    第一章 LINUX ansible 自动化运维工具(机器管理工具) 一、概述 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现 Ansible能批量配置、部署、管理

    2024年02月14日
    浏览(46)
  • 42了解自动化运维工具 Saltstack 的基本用法,包括配置管理、批量执行

    Saltstack 是一款流行的自动化运维工具,可以用于配置管理、批量执行等任务。下面是 Saltstack 的基本用法教程。 安装 Saltstack 首先需要在控制节点上安装 Saltstack。具体安装方法可以参考 Saltstack 的官方文档。在安装过程中需要选择一个角色,通常有 master 和 minion 两个选项,

    2024年02月06日
    浏览(55)
  • 利用Python实现网络运维自动化:实战示例

    💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】 🎖️ 一站式轻松构建小程序、Web网站、移动应用:👉注册地址 🤟 基于Web端打造的:👉轻量化工具创作平台 💅 想寻找共同学习交流,摸鱼划水的小伙伴,请点击【全栈技术交流群】 随着网络规模的不断扩大

    2024年04月11日
    浏览(75)
  • python自动化运维——模拟键盘鼠标重复性操作Pyautoui

    将程序与cmd.xls文件放在同一文件夹,每一步的截图也放在当前文件夹 通过图片在屏幕上面进行比对,找到点击处进行自动化操作 自动化rpa测试 1. Pyautoui 模块:主要针对图片进行定位 pyautogui.locateCenterOnScreen() ,在屏幕上面找到该图片位置后进行 pyautogui.click 单击,双击,右键

    2024年02月06日
    浏览(45)
  • 【Kubernetes 企业项目实战】06、基于 Jenkins+K8s 构建 DevOps 自动化运维管理平台(中)

    目录 一、基于 Jenkins+k8s+Git+Docker Hub 等技术链构建企业级 DevOps 容器云平台 1.1 安装 Jenkins 1.1.1 安装 nfs 服务 1.1.2 在 kubernetes 中部署 jenkins 1.2 配置 Jenkins ​1.2.1 获取管理员密码 1.2.2 安装插件 1.2.3 创建第一个管理员用户 1.3 测试 jenkins 的 CI/CD 1.3.1 在 Jenkins 中安装 kubernetes 插件

    2024年01月16日
    浏览(78)
  • DevOps极速入门丨Gitlab丨Jenkins丨harbor丨CICD丨自动化丨运维开发

    一、DevOps介绍 软件开发最开始是由两个团队组成: 开发计划由开发团队从头开始设计和整体系统的构建。需要系统不停的迭代更新。 运维团队将开发团队的Code进行测试后部署上线。希望系统稳定安全运行。 这看似两个目标不同的团队需要协同完成一个软件的开发。 在开发

    2023年04月18日
    浏览(68)
  • 基于云计算的自动化部署与自动化运维:提高运维效率

    作者:禅与计算机程序设计艺术 随着互联网技术的飞速发展,网站流量日益增长,用户对网站功能及其可用性的需求也越来越高,越来越多的人开始担忧网站的安全和稳定性。因此,如何快速、准确地处理网站故障、迅速恢复网站服务并保障网站高可用,成为企业必须重点关

    2024年02月11日
    浏览(45)
  • 云计算是指利用互联网所提供的基础设施、网络服务和平台,实现数据中心的虚拟化、动态管理、自动化运维功能

    作者:禅与计算机程序设计艺术 云计算是指利用互联网所提供的基础设施、网络服务和平台,实现数据中心的虚拟化、动态管理、自动化运维功能。传统的数据中心的资源由专业IT人员手动管理,而云计算则让硬件资源可按需弹性扩展、弹性迁移、自动化伸缩、降低成本。

    2024年02月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包