0
我有一個python腳本,它可以從netaddr生成IP子網信息。切片或陣列的動態範圍
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
This works。我遇到麻煩的是我想「保留」第一個和最後三個地址。這裏是我的電流輸出的一個例子:
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
我想切片會工作,這樣做,直到我選擇一個不同的子網長度。我無法知道如何動態地將地址四(第一個非保留)切片到最後一個地址減三。根據子網大小減去第一個和最後三個地址,我一直無法找到任何解決方案(slice,數組,索引)。任何指針將不勝感激。
感謝您的回覆。我嘗試了你的代碼,但是我在elif中得到了語法錯誤,看起來像在comprehend列表中不支持。是否有另一種方法來進行迭代並將其放入字符串/數組/字典中? –
在這個例子中elif應該很好。我假設你用代碼來替換每一行上的'#...'來實際處理數據?什麼是你得到的語法錯誤? – mccatnm