私は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
これは機能します。私が困っているところは、最初と最後の3つのアドレスを「予約」したいということです。ここに私の現在の出力の例です:
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
であるように私が持っているしたいと思いますどのような。最後のアドレスから3を引いたアドレス4(最初の予約されていないアドレス)を動的にスライスする方法を見つけることができません。私は、サブネットのサイズから最初と最後の3つのアドレスを差し引いたものに応じて動的である解決策(スライス、アレイ、インデックス)を見つけることができませんでした。どんな指針も大変ありがとうございます。
返信いただきありがとうございます。あなたのコードを試しましたが、elifで構文エラーが発生しましたが、これは包括的なリストではサポートされていないようです。繰り返しをとり、文字列/配列/ dictに入れる別の方法はありますか? –
この例では、elifはうまくいくはずです。私はあなたが実際にデータを扱うコードで各行の '#...'を置き換えたと仮定しています?あなたが得ている構文エラーは何ですか? – mccatnm