2017-04-07 11 views
0

サブネット内にあるすべてのホストIPアドレスを出力します。このリストの開始アドレスと最終アドレスのみを出力するようにコードを修正します。最初と最後の値はどのように印刷しますか?

ここではどのようにアレイを使用しますか最初と最後の値を印刷するには?

import ipaddress 
print('enter subnet') # in CIDR Format 
x = input() 
IP= ipaddress.ip_network(x, strict = False) 
for y in IP.hosts(): 
print(y) 

出力電流出力

enter subnet 
192.0.0.0/29 
192.0.0.1 
192.0.0.2 
192.0.0.3 
192.0.0.4 
192.0.0.5 
192.0.0.6 

理想

HostMin: 192.0.0.1 
HostMax: 192.0.0.6 

========================= ================

UPDATE:

私ができたリストを使用した後

however this takes quite longer to compute whenever i give a large 
subnet 

like 192.0.0.0/8 takes longer to print the first and last value, 

for: IPV6 address calculations it hangs forever, 
for: example: the IPV6 address is 2001:db8::1/96 

this list will have 4294967294 elements since this IPV6 subnet has 
these many IP address and it hangs forever to print the first and 
last element of the list 
+0

http://stackoverflow.com/questions/930397/getting-the-last-element-of-a-list-in-python –

答えて

1

list[0]list[-1]はあなたの最初と最後の要素を取得し、最初と最後の値を印刷し、それぞれ

import ipaddress 
print('enter subnet') # in CIDR Format 
x = input() 
IP= ipaddress.ip_network(x, strict = False) 
k = list(IP.hosts()) 
print("HostMin: ",k[0]) 
print("HostMax: ",k[-1]) 
全体のIP範囲

import ipaddress 
def hosts(IPTYPE): 
    """Custom function derived from IPv6Network/IPv4Network.hosts to get only first and last host 

    """ 
    network = int(IPTYPE.network_address) 
    broadcast = int(IPTYPE.broadcast_address) 
    return IPTYPE._address_class(network+1),IPTYPE._address_class(broadcast) 

print('enter subnet') # in CIDR Format 
x = input() 
IP= ipaddress.ip_network(x, strict = False) 
m = hosts(IP) 
print("HostMin: ",m[0]) 
print("HostMax: ",m[1]) 
を発生させることなく、最初と最後のIPを取得するための

更新しました回答

+0

の可能性のある重複したおかげで、これは – Rahul

+0

を働いていたが、これは計算に非常に時間がかかります192.0.0.0/8のような大規模なサブネットを与えると、最初と最後の値を表示するのに時間がかかり、IPV6アドレスの計算には、IPV6アドレスを2001年に入力すると永遠にハングします。db8 :: 1/96 it 4294967294個の要素があり、リストの最初と最後の要素を印刷するためにハングアップします – Rahul

+0

私は最初のIPと最後のIPだけを瞬時に与えるipaddressモジュールから派生したカスタムメソッドを含めるように答えを更新しました。 – Himaprasoon

0

for y in IP.hosts():y = list(IP.hosts())で置き換えてから

print y[0] 
print y[-1] 

あなたはhosts()機能のドキュメントを読んでください「とは、ネットワーク内の使用可能なホストの反復子を返します」

+0

これは192.0.0.0/8のように大規模なサブネットを与えると、最初と最後の値を出力するのに時間がかかり、IPV6アドレスの計算には永久にハングするたびに計算に時間がかかります。例えば、2001年のIPV6アドレスを入力すると、 db8 :: 1/96それは4294967294要素を持ち、リストの最初と最後の要素を印刷するためにハングアップします – Rahul

0

あなたはここで、配列を使用しないでください。リストを使用してください!

first_item = list[0] 
last_item = list[-1] 
+0

ありがとう – Rahul

関連する問題