【问题标题】:Filterig/removing/excluding private IPs with port from a nested list从嵌套列表中过滤/删除/排除带有端口的私有 IP
【发布时间】:2014-10-30 11:34:28
【问题描述】:

什么: 正在使用 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'>

【问题讨论】:

标签: python regex ip-address list-comprehension


【解决方案1】:

你可以这样做:

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 所建议的那样

【讨论】:

  • 这看起来很有希望,但我一直收到这个错误,“AttributeError: 'list' object has no attribute 'startswith'”,很好的材料供将来参考。
  • 已更新,但 Vizjerei 的答案一旦修复,就会更加紧凑。
  • 我最终选择了这个选项,但 Vizjrei 看起来很棒,非常感谢你们,我会在可能的时候回来投票。效果很好。
【解决方案2】:

如何进行列表理解并创建startswith 之类的:

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

【讨论】:

  • 天啊,我从来没有想过startswith 接受一个元组。真丢人。虽然你应该添加一些括号。此外,您应该在最后两个前缀中添加一个点,否则它们会过滤掉超出预期的内容。
  • 我可以很好地识别这一点,但我收到了这个错误。我看到的列表推导越多,我就越喜欢它们的实用性。 TypeError:“int”对象没有属性“getitem
  • @Vizjerei 不:括号需要在参数的开头,否则你会得到TypeError: startswith() takes at most 3 arguments (4 given)。请参阅我的更新答案。
  • @Germano thx 没有检查它是否有效,但现在它应该有效,再次编辑它
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2021-08-21
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
相关资源
最近更新 更多