gpt4 book ai didi

python - 如何使用 Scapy 过滤 IP 列表的数据包

转载 作者:行者123 更新时间:2023-11-28 17:13:39 24 4
gpt4 key购买 nike

我正在尝试用 Python(使用 Scapy)过滤特定网站的数据包。我有网站可能的 IP(用于负载平衡)列表。我想过滤所有这些 IP 的数据包。我怎样才能做到这一点?

对于单个 IP,我使用以下代码:

bpf_filter = "ip and host " + addr
sniff(timeout=10, prn=pkt_callback, store=0)

最佳答案

由于您使用的是 cBPF(经典 BPF),过滤一组 IP 地址的唯一方法是将它们全部列出:

bpf_filter = "ip and ("
for addr in addresses[:-1]:
bpf_filter = "%shost %s or " % (bpf_filter, addr)
bpf_filter = "%shost %s)" % (bpf_filter, addresses[-1])

对于一组 IP 地址 [10.0.0.1, 10.0.0.2, 10.0.0.3],将返回:

ip and (host 10.0.0.1 or host 10.0.0.2 or host 10.0.0.3)

注意:您的组中至少需要一个 IP 地址才能使上述功能正常工作。


为什么这是 cBPF 的限制?

你给 Scapy 的过滤器表达式然后被编译成 BPF bytecode . BPF 字节码不允许向后跳转(因此循环)。此限制是确保过滤器在内核中执行时最终停止的简单方法。

如果允许向后跳转,您可以通过您的 IP 地址集编写一些更智能的查找。例如,您可以将它们存储在哈希表中,并根据 O(1) 中的哈希表检查数据包。这实际上是可能的 eBPF ,据我所知,Scapy 还不支持它。

关于python - 如何使用 Scapy 过滤 IP 列表的数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45646365/

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