gpt4 book ai didi

python - 如何根据端口号对IP地址进行排序?

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:30 26 4
gpt4 key购买 nike

我正在创建自己的报告工具,并且正在尝试弄清楚如何使用端口号对 IP 地址进行排序。

如何使用端口号对 IP 地址进行排序,以便首先对 IP 地址进行排序,然后再通过端口号进行排序。我能够很好地对 IP 地址进行排序,但是当与端口号结合时,它就变得困难了。

a = ['192.168.0.3 (443/tcp)|', '192.168.0.176 (443/tcp)|', '192.168.0.40 (443/tcp)|', '192.168.0.15 (8443/tcp)|', '192.168.0.16 (8443/tcp)|', '192.168.0.12 (443/tcp)|', '192.168.0.9 (3389/tcp)|', '192.168.0.15 (443/tcp)|', '192.168.0.16 (443/tcp)|', '192.168.0.3 (3389/tcp)|', '192.168.0.14 (443/tcp)|']

print(a.sort(key=lambda s: map(int, s.split('.')))) #this works fine with just IP address not with the current format of (xxx/tcp). The pipe is for delimiters so please ignore.

我想先按 IP 地址对输出进行排序,然后对每个 IP 按端口号进行排序。因此,例如,前几个结果将是:

a= ['192.168.0.3 (443/tcp)|', '192.168.0.3 (3389/tcp)|', 192.168.0.9 (3389/tcp)|, ...']

最佳答案

使用re.findall:

import re

def get_ip_port(x):
*ips, port = map(int, re.findall('\d+', x))
return ips, port

sorted(a, key=get_ip_port)

输出:

['192.168.0.3 (443/tcp)|',
'192.168.0.3 (3389/tcp)|',
'192.168.0.9 (3389/tcp)|',
'192.168.0.12 (443/tcp)|',
'192.168.0.14 (443/tcp)|',
'192.168.0.15 (443/tcp)|',
'192.168.0.15 (8443/tcp)|',
'192.168.0.16 (443/tcp)|',
'192.168.0.16 (8443/tcp)|',
'192.168.0.40 (443/tcp)|',
'192.168.0.176 (443/tcp)|']

解释:

  • map(int, re.findall('\d+', x)):找到所有数字并将它们设为int
  • *ips, port: 解压上面的 int 并重新打包成除最后一个 (*ips) 和最后一个 (端口)
  • sorted(a, key=get_ip_port):因为 get_ip_port 返回两个键 (ips,port) , sorted 首先按 ipsa 进行排序,然后根据需要对 port 进行排序。

关于python - 如何根据端口号对IP地址进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57372527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com