2017-04-07 78 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

相关问题