searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于python实现网络拓扑自动化生成

2023-09-26 06:25:03
162
0

前言

我想在这里分享一种基于Python和网络设备的LLDP自动化拓扑实现方法。LLDP(链路层发现协议)是一种用于发现和管理网络设备之间连接关系的协议,通过它我们可以获取到网络拓扑的信息,从而方便进行网络管理和故障排查;

使用Python库(如Netmiko)连接到网络设备。Netmiko是一个用于自动化网络设备的强大库,支持多种网络设备厂商和协议。

一旦建立了与设备的连接,我们就可以发送LLDP的查询命令,并获取到设备的邻居信息。这些信息包括设备的名称、接口和邻居设备的信息。

在获取了所有设备的邻居信息后,我们可以使用Python的图形库(如NetworkX)来绘制网络拓扑图。这将帮助我们更直观地了解网络设备之间的连接关系,从而有助于故障排查和网络规划。

 

案例展示

 

# 导入所需的库
from netmiko import ConnectHandler
import networkx as nx
import matplotlib.pyplot as plt

# 从文件中读取设备IP地址列表
devices = []
with open('ip.txt', 'r') as file:
    for line in file:
        ip = line.strip()
        devices.append({
            'device_type': 'cisco_ios',
            'ip': ip,
            'username': 'admin',
            'password': 'password',
        })

# 创建一个空的无向图
G = nx.Graph()

# 遍历设备列表
for device in devices:
    # 建立到设备的SSH连接
    net_connect = ConnectHandler(**device)

    # 发送LLDP查询命令并获取输出
    output = net_connect.send_command("show lldp neighbors")

    # 解析LLDP输出,提取邻居设备信息
    neighbors = []
    for line in output.splitlines():
        if "Port ID" in line:
            port_id = line.split(" ")[-1]
        elif "Device ID" in line:
            device_id = line.split(" ")[-1]
            neighbors.append((device_id, port_id))

    # 添加设备和边到图中
    for neighbor in neighbors:
        G.add_edge(device['ip'], neighbor[0], port=neighbor[1])

    # 关闭SSH连接
    net_connect.disconnect()

# 绘制拓扑图
pos = nx.spring_layout(G)
nx.draw_networkx(G, pos=pos, with_labels=True)
edge_labels = nx.get_edge_attributes(G, 'port')
nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=edge_labels)
plt.show()

0条评论
0 / 1000
陈俊良
2文章数
0粉丝数
陈俊良
2 文章 | 0 粉丝
陈俊良
2文章数
0粉丝数
陈俊良
2 文章 | 0 粉丝
原创

基于python实现网络拓扑自动化生成

2023-09-26 06:25:03
162
0

前言

我想在这里分享一种基于Python和网络设备的LLDP自动化拓扑实现方法。LLDP(链路层发现协议)是一种用于发现和管理网络设备之间连接关系的协议,通过它我们可以获取到网络拓扑的信息,从而方便进行网络管理和故障排查;

使用Python库(如Netmiko)连接到网络设备。Netmiko是一个用于自动化网络设备的强大库,支持多种网络设备厂商和协议。

一旦建立了与设备的连接,我们就可以发送LLDP的查询命令,并获取到设备的邻居信息。这些信息包括设备的名称、接口和邻居设备的信息。

在获取了所有设备的邻居信息后,我们可以使用Python的图形库(如NetworkX)来绘制网络拓扑图。这将帮助我们更直观地了解网络设备之间的连接关系,从而有助于故障排查和网络规划。

 

案例展示

 

# 导入所需的库
from netmiko import ConnectHandler
import networkx as nx
import matplotlib.pyplot as plt

# 从文件中读取设备IP地址列表
devices = []
with open('ip.txt', 'r') as file:
    for line in file:
        ip = line.strip()
        devices.append({
            'device_type': 'cisco_ios',
            'ip': ip,
            'username': 'admin',
            'password': 'password',
        })

# 创建一个空的无向图
G = nx.Graph()

# 遍历设备列表
for device in devices:
    # 建立到设备的SSH连接
    net_connect = ConnectHandler(**device)

    # 发送LLDP查询命令并获取输出
    output = net_connect.send_command("show lldp neighbors")

    # 解析LLDP输出,提取邻居设备信息
    neighbors = []
    for line in output.splitlines():
        if "Port ID" in line:
            port_id = line.split(" ")[-1]
        elif "Device ID" in line:
            device_id = line.split(" ")[-1]
            neighbors.append((device_id, port_id))

    # 添加设备和边到图中
    for neighbor in neighbors:
        G.add_edge(device['ip'], neighbor[0], port=neighbor[1])

    # 关闭SSH连接
    net_connect.disconnect()

# 绘制拓扑图
pos = nx.spring_layout(G)
nx.draw_networkx(G, pos=pos, with_labels=True)
edge_labels = nx.get_edge_attributes(G, 'port')
nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=edge_labels)
plt.show()

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0