Python3排序IP地址4,6和主机名



我正在考虑编写一个排序IP地址的函数(IPv4和;6)连同主机名。例如

127.0.0.1
test.com
10.10.23.4
98.137.246.8
2001:0db8:85a3:0000:0000:8a2e:0370:7334
98.137.246.7

我已经尝试过这个代码,它只适用于IPv4。谁能帮我写个函数把它们都排序一下?

sorted(sorted_ips, key=lambda ip: struct.unpack("!L", inet_aton(ip))[0])

输出应该是,因此按地址升序排序。

10.10.23.4
98.137.246.7
98.137.246.8
2001:0db8:85a3:0000:0000:8a2e:0370:7334
test.com

提前感谢。

使用ipaddress.ip_address:

from ipaddress import ip_address
def ipsorter(s):
try:
ip = int(ip_address(s))
except ValueError:
return (1, s)
return (0, ip)
sorted(l, key=ipsorter)

输出:

['10.10.23.4',
'98.137.246.7',
'98.137.246.8',
'127.0.0.1',
'2001:0db8:85a3:0000:0000:8a2e:0370:7334',
'test.com']

最新更新