更改IP地址的最后一个八位字节

时间:2014-04-02 06:30:55

标签: python-2.7 ip-address

使用以下代码,我从包含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()

1 个答案:

答案 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)。

此外,我发现您正在生成相同表单的许多访问规则。这将很难管理。相反,您应该编写一个引用网络对象组的访问规则。您应该只使用您的脚本添加/删除该组的成员。