通过netmiko多线程采集华为设备版本 管理IP 设备名称自动生成表格并最后面列出登入失败的IP地址
时间: 2024-05-13 14:17:48 浏览: 68
好的,我可以给你提供一个大致的思路:
1. 首先,你需要编写一个函数,用于采集华为设备版本,设备名称等信息。你可以使用Netmiko库来完成这个任务。
2. 接下来,你需要编写一个函数,用于从一个文本文件或者数据库中读取管理IP地址,并且将每个IP地址与对应的设备名称进行匹配,然后将这些信息存储在一个字典中。
3. 接着,你需要编写一个函数,用于生成一个表格。你可以使用Python的PrettyTable库来完成这个任务。
4. 最后,你需要编写一个函数,用于对所有管理IP地址进行登陆操作。如果登陆失败,则将该IP地址添加到一个列表中。
下面是一个简单的代码示例,其中 `get_device_info` 函数用于采集设备信息,`get_mgmt_ips` 函数用于读取管理IP地址,`generate_table` 函数用于生成表格,`check_login` 函数用于检查IP地址是否能够登陆:
```python
from netmiko import ConnectHandler
from prettytable import PrettyTable
def get_device_info(ip, username, password):
device = {
'device_type': 'huawei',
'ip': ip,
'username': username,
'password': password,
}
with ConnectHandler(**device) as conn:
version = conn.send_command('display version')
hostname = conn.send_command('display current-configuration | include sysname').strip().split()[1]
return {
'ip': ip,
'hostname': hostname,
'version': version,
}
def get_mgmt_ips(filename):
mgmt_ips = {}
with open(filename) as f:
for line in f:
ip, hostname = line.strip().split()
mgmt_ips[ip] = hostname
return mgmt_ips
def generate_table(data):
table = PrettyTable()
table.field_names = ['IP', 'Hostname', 'Version']
for row in data:
table.add_row(row)
print(table)
def check_login(ip, username, password):
device = {
'device_type': 'huawei',
'ip': ip,
'username': username,
'password': password,
}
try:
with ConnectHandler(**device) as conn:
pass
except:
return False
return True
if __name__ == '__main__':
mgmt_ips = get_mgmt_ips('mgmt_ips.txt')
data = []
failed_ips = []
for ip, hostname in mgmt_ips.items():
if check_login(ip, 'username', 'password'):
device_info = get_device_info(ip, 'username', 'password')
data.append([device_info['ip'], device_info['hostname'], device_info['version']])
else:
failed_ips.append(ip)
generate_table(data)
print('Login failed IPs:', failed_ips)
```
需要注意的是,这只是一个简单的示例代码,你需要根据自己的实际情况进行修改和完善。
阅读全文