【发布时间】:2018-01-23 12:11:09
【问题描述】:
我有从 netaddr 生成 IP 子网信息的 python 脚本。
from netaddr import *
ipnetwork = raw_input("Enter IP address: ")
ip = IPNetwork(ipnetwork)
print "Network ID:", ip.network
print "Network Broadcast:", ip.broadcast
print "Subnet Mask:", ip.netmask
print "Prefix Length:", ip.prefixlen
print "Wildcard Mask:", ip.hostmask
print "Network Size:", ip.size
print "Host range is:", ip[1], "-", ip[-2]
for ip in IPNetwork(ipnetwork).iter_hosts():
print '%s' % ip
这行得通。我遇到麻烦的地方是我想“保留”第一个和最后三个地址。这是我当前输出的示例:
Enter IP address: 192.168.100.17/28
Network ID: 192.168.100.16
Network Broadcast: 192.168.100.31
Subnet Mask: 255.255.255.240
Prefix Length: 28
Wildcard Mask: 0.0.0.15
Network Size: 16
Host range is: 192.168.100.17 - 192.168.100.30
192.168.100.17
192.168.100.18
192.168.100.19
192.168.100.20
192.168.100.21
192.168.100.22
192.168.100.23
192.168.100.24
192.168.100.25
192.168.100.26
192.168.100.27
192.168.100.28
192.168.100.29
192.168.100.30
我想要的结果是
192.168.100.17 Reserved
192.168.100.18 Reserved
192.168.100.19 Reserved
192.168.100.20
192.168.100.21
192.168.100.22
192.168.100.23
192.168.100.24
192.168.100.25
192.168.100.26
192.168.100.27
192.168.100.28 SW2-VLAN 100
192.168.100.29 SW1-VLAN 100
192.168.100.30 HSRP VLAN 100
我认为切片会起作用并且确实有效,直到我选择不同的子网长度。我不知道如何动态地将地址四(第一个非保留)切片到最后一个地址减去三。我找不到任何解决方案(切片、数组、索引),它会根据子网大小减去第一个和最后三个地址是动态的。任何指针将不胜感激。
【问题讨论】:
标签: arrays python-2.7 slice