从嵌套列表中过滤/删除/排除私有IP及其端口

0 投票
2 回答
1308 浏览
提问于 2025-04-20 00:55

什么是这个问题:

这里使用的是Python 2.7。

我正在使用virustotal的API来生成一个IP地址的列表,格式是列表。当我对这个对象使用type()时,它返回的是列表。在下面有一个数据的例子。有没有办法通过过滤器、正则表达式的列表推导,或者一些通配符系统,来去掉所有以10、172.16到172.31和192.168开头的IP地址呢?

为什么要这样做:

从报告中生成了一些常见的IP地址,但对我来说这些是没用的。我已经做了一个列表推导来过滤掉特定的地址,但这个列表在不断增长,很明显,排除的列表会让主列表变得更慢。我想去掉所有不重要的IP地址,这样就不会因为无用的记录而拖慢我的脚本。

怎么做:

unique = [xte for xte in unique if xte not in fil2]

fil2 = [['255.255.255.255',67],['137.170.185.211',123],['213.186.33.99',53],['10.0.2.15',68]]

数据的例子:

>>> fil2 = [['255.255.255.255',67],['137.170.185.211',123],['213.186.33.99',53],['10.0.2.15',68]]
>>> type(fil2)
<type 'list'>

2 个回答

0

你可以试着用列表推导式来做一个类似于 startswith 的功能,像这样:

ips = [ip for ip in file2[0] if not str(ip[0]).startswith(('192.168.','10.','172.16.','172.31.')) ]
0

你可以这样做:

dont_start_with_these = ('10.', '172.16.', '172.31.', '192.168')

filtered_ip = [ip for ip in fil2 if not ip[0].startswith(dont_start_with_these)]

补充:这是一个更简洁的解决方案,感谢Vizjerei的建议。

撰写回答