Eu gostaria de capturar o tráfego nas interfaces virtuais do Linux, para fins de depuração. Tenho feito experiências com veth
, tun
e dummy
interface de tipos; nos três, estou tendo problemas tcpdump
para mostrar qualquer coisa.
Aqui está como eu configuro a interface fictícia:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
Em um terminal, assista-o com tcpdump
:
tcpdump -i dummy10
Em um segundo, ouça com nc
:
nc -l 99.99.99.1 2048
Em um terceiro, faça uma solicitação HTTP com curl
:
curl http://99.99.99.1:2048/
Embora no terminal 2 possamos ver os dados da curl
solicitação, nada aparece tcpdump
.
Um tutorial Tun / Tap esclarece algumas situações em que o kernel pode realmente não enviar pacotes quando um está operando em uma interface local:
Olhando para a saída do tshark, não vemos ... nada. Não há tráfego passando pela interface. Isso está correto: como estamos executando o ping do endereço IP da interface, o sistema operacional decide corretamente que nenhum pacote precisa ser enviado "on the wire" e o próprio kernel está respondendo a esses pings. Se você pensar bem, é exatamente o que aconteceria se você pingasse o endereço IP de outra interface (por exemplo, eth0): nenhum pacote seria enviado. Isso pode parecer óbvio, mas pode ser uma fonte de confusão a princípio (era para mim).
No entanto, é difícil ver como isso pode se aplicar aos pacotes de dados TCP.
Talvez tcpdump
deva estar vinculado à interface de uma maneira diferente?