以太网嗅探器没有捕获所有的东西,而tcpdump是并行的

2024-04-20 03:20:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python编写了一个以太网嗅探器。它基本上打开一个套接字,将其设置为混杂模式,然后解析每个传入的数据包,例如:

import fcntl
import socket

IF = "eth0"
ETH_P_ALL = socket.htons(0x0003)
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, ETH_P_ALL)

ifr = ifreq()
ifr.ifr_ifrn = IF.encode()

# Get flags
fcntl.ioctl(s, 0x8913, ifr)

# Add promiscuous
ifr.ifr_flags |= 0x100

# Set flags
fcntl.ioctl(s, 0x8914, ifr)

while True:
    pkt_raw, sa_ll = s.recvfrom(65535)
    parse_packet(pkt_raw)

除此之外,我还有一个测量函数,它统计每秒传入的数据包数。为了生成数据包,我配置了一个交换机,以便它将所有数据包转发到接口(端口镜像)。也就是说,传入的数据包不是特定于此机器的。你知道吗

在这种设置下,我可以看到大约250包/秒的速率。但是,如果同时运行tcpdump -n -i eth0,速率会突然上升到大约5000个包/秒。有趣的是,只有在前台运行tcpdump时才会发生这种情况,例如tcpdump -n -i eth0 > foo不会改变传入数据包的速率。你知道吗

问题是:tcpdump在前台运行时有什么不同,所以包的速率要高得多,如何在python嗅探器中启用这种行为?你知道吗


Tags: importif速率socketall数据包tcpdumpflags
1条回答
网友
1楼 · 发布于 2024-04-20 03:20:54

原来这是一个自制的错误。由于嗅探器工作在一个流量也被镜像的服务器上,因此当终端上通过SSH进行操作时,数据包速率总是上升。你知道吗

相关问题 更多 >