Python/Scapy: 只嗅探入站数据包

5 投票
4 回答
7418 浏览
提问于 2025-04-18 12:43

我可以在Scapy中只监听进来的数据包或者只监听出去的数据包吗?

而不需要在数据包的字段上添加过滤器。

4 个回答

-1

Scapy并不总是表现得最好:http://askldjd.wordpress.com/2014/01/15/a-reasonably-fast-python-ip-sniffer/

不过,你绝对可以监控进来的和出去的数据。我不知道有没有办法只专门监控进来的或出去的,但我相信你可以对结果进行过滤。或者,如果你愿意接受更大的挑战,你可以修改Scapy,自己创建一个只监控其中一个方向的数据的工具。

0

sniff()函数支持所有L2socket的参数。其中一个参数是filter,它需要一个BPF过滤器,具体可以参考这个链接http://biot.com/capstats/bpf.html。在某些情况下,这个过滤器可以包括“incoming”过滤器。

1

关于Scapy版本2.4.3,我可以对进入的流量进行过滤以便分析。例如,下面这个命令可以用来过滤“eth0”接口上的进入流量:

sniff(iface="eth0", filter="inbound", prn=lambda x: x.show(), store=0)

这里所提到的,sniff()函数使用的是伯克利数据包过滤器(BPF)的语法。理论上,你可以通过filter="outbound"来只过滤出去的流量;如果不加过滤条件,就相当于filter="inbound or outbound",也就是同时过滤进入和出去的流量。

3

简单来说:不可以。Scapy的sniff函数无法区分进来的和出去的数据包。如果你想根据源MAC地址来过滤数据包,可以这样做:

MYMAC = "12:34:56:78:90:99"

def isNotOutgoing(pkt):
    return pkt[Ether].src != MYMAC

sniff(iface="eth0", lfilter=isNotOutgoing)

撰写回答