使用以下代码,我从包含IP地址列表的文本文件中获取IP地址。然后通过SSH连接到Cisco路由器以进行所有设备通用的更改。但是这次我必须做出可变的改动。
示例:
我必须将ip地址(10.120.15.1)和SSH取入设备并应用以下命令
“access-list 150 permit ip 10.120.15.0 0.0.0.255 host 10.100.100.1”
IP地址已包含在变量“line”中,我必须拆分最后一个八位字节并将其从“1”更改为“0”,然后插入访问列表。
请分享您的意见。
import paramiko
import sys
import os
import time
import cmd
buff = ''
resp = ''
with open('Address.txt', 'r') as f:
for line in f:
line = line.strip()
dssh = paramiko.SSHClient()
dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
dssh.connect(line, username='cisco', password='cisco')
chan = dssh.invoke_shell()
chan.send('conf t\n')
time.sleep(1)
resp = chan.recv(9999)
chan.send('access-list 150 permit ip X.X.X.X 0.0.0.255 host 10.100.100.1\n exit\n')
time.sleep(1)
resp = chan.recv(9999)
dssh.close()
答案 0 :(得分:2)
您可以使用netaddr
Python包。
示例:
>>> n = IPNetwork('10.120.15.1/24')
>>> list(n)[0:3]
[IPAddress('10.120.15.0'), IPAddress('10.120.15.1'), IPAddress('10.120.15.2')]
>>> IPNetwork('10.120.15.1/24').network
IPAddress('10.120.15.0')
>>> str(IPNetwork('10.120.15.1/24').network)
'10.120.15.0'
对于您的脚本,您应该能够在同一个SSH会话中执行所有访问列表修改,而不是每个地址行一个SSH会话。
我还怀疑您在access-list
命令中反转了网络掩码 - 它应该是255.255.255.0
而不是0.0.0.255
(请参阅examples)。
此外,我发现您正在生成相同表单的许多访问规则。这将很难管理。相反,您应该编写一个引用网络对象组的访问规则。您应该只使用您的脚本添加/删除该组的成员。