的Python 3只,IPv4的,同樣的想法與@user但使用新的Python3標準庫:ipaddress
IPv4由4個字節表示。所以下一個IP實際上是下一個數字,一系列IP可以表示爲整數的範圍。
0.0.0.1是1
0.0.0.2是2
...
0.0.0.255是255
0.0.1.0是256
0.0.1.1是257
按代碼(忽略In []:和Out [] :)
In [68]: from ipaddress import ip_address
In [69]: ip_address('0.0.0.1')
Out[69]: IPv4Address('0.0.0.1')
In [70]: ip_address('0.0.0.1').packed
Out[70]: b'\x00\x00\x00\x01'
In [71]: int(ip_address('0.0.0.1').packed.hex(), 16)
Out[71]: 1
In [72]: int(ip_address('0.0.1.0').packed.hex(), 16)
Out[72]: 256
In [73]: int(ip_address('0.0.1.1').packed.hex(), 16)
Out[73]: 257
ip.packed.hex()
返回的4個字節的十六進制形式,因爲它是在十六進制 ,它是較短的(例如:0xff的十六進制== 255十進制== 0b11111111二進制), 並且因此,經常被用於表示字節。 int(hex, 16)
返回與十六進制值相對應的整數值 ,因爲它更爲人性化,並可用作ip_address
的輸入。
from ipaddress import ip_address
def ips(start, end):
'''Return IPs in IPv4 range, inclusive.'''
start_int = int(ip_address(start).packed.hex(), 16)
end_int = int(ip_address(end).packed.hex(), 16)
return [ip_address(ip).exploded for ip in range(start_int, end_int)]
ips('192.168.1.240', '192.168.2.5')
返回:
['192.168.1.240',
'192.168.1.241',
'192.168.1.242',
'192.168.1.243',
'192.168.1.244',
'192.168.1.245',
'192.168.1.246',
'192.168.1.247',
'192.168.1.248',
'192.168.1.249',
'192.168.1.250',
'192.168.1.251',
'192.168.1.252',
'192.168.1.253',
'192.168.1.254',
'192.168.1.255',
'192.168.2.0',
'192.168.2.1',
'192.168.2.2',
'192.168.2.3',
'192.168.2.4']
難道只是一個'IPv4'地址的文件?或者那裏還有'IPv6's? – will
@只會IPv4 – Leadri