2017-04-07 111 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,而不會產生整個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]) 
更新回答
+0

感謝的可能重複這個工作 – Rahul

+0

然而,這需要相當長計算每當我給一個大的子網,像192.0.0.0/8需要更長的時間來打印第一個和最後一個值,並且對於IPV6地址計算它永遠掛起,例如,如果我輸入IPV6地址爲2001:db8 :: 1/96它有4294967294元素,它掛起打印列表的第一個和最後一個元素 – Rahul

+0

我已經更新了我的答案,包括一個自ipaddress模塊​​派生的自定義方法,它只給出第一個和最後一個IP即時。 – 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地址計算它永遠掛起,例如,如果我輸入IPV6地址爲2001: db8 :: 1/96它有4294967294個元素,它掛起打印列表的第一個和最後一個元素 – Rahul

0

你不要在這裏使用數組「在網絡中的可用主機返回一個迭代」。使用列表!

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

感謝這工作 – Rahul

相關問題