So I'm left to conclude that the reason tcpdump is only displaying packets once per second is because that's as often that the kernel is delivering them.
Sim - quando o tcpdump abre um dispositivo para capturar com pcap_open_live()
ou com pcap_create()
e pcap_activate()
, ele especifica um tempo limite de 1 segundo. Isto significa que, em muitos SOs (incluindo distribuições Linux com versões mais recentes do kernel e da libpcap, assim como * BSD, OS X e Solaris), o kernel armazenará pacotes em buffer até que seu buffer seja preenchido ou 1 segundo tenha decorrido e entregará todo o buffer de pacotes, para eficiência.
As versões mais recentes do tcpdump desativarão esse buffer ao imprimir pacotes, em vez de salvá-los em formato binário em um arquivo.
How I can get it to output the packets as soon as they are received by the kernel?
Execute uma versão mais nova do tcpdump ou modifique o tcpdump para especificar um tempo limite mais curto ou para desativar completamente o tempo limite.