Je voudrais capturer du trafic sur des interfaces virtuelles Linux, à des fins de débogage. J'ai expérimenté avec veth
, tun
et les dummy
types d' interface; sur les trois, j'ai du mal tcpdump
à montrer quoi que ce soit.
Voici comment j'ai configuré l'interface factice:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
Dans un terminal, regardez-le avec tcpdump
:
tcpdump -i dummy10
Dans une seconde, écoutez-le avec nc
:
nc -l 99.99.99.1 2048
Dans un troisième, faites une requête HTTP avec curl
:
curl http://99.99.99.1:2048/
Bien que dans le terminal 2, nous puissions voir les données de la curl
demande, rien ne s'affiche tcpdump
.
Un didacticiel Tun / Tap clarifie certaines situations dans lesquelles le noyau peut n'envoyer aucun paquet lorsque l'on opère sur une interface locale:
En regardant la sortie de tshark, on voit ... rien. Aucun trafic ne passe par l'interface. C'est exact: puisque nous envoyons une requête ping à l'adresse IP de l'interface, le système d'exploitation décide correctement qu'aucun paquet ne doit être envoyé "sur le fil", et le noyau lui-même répond à ces pings. Si vous y réfléchissez, c'est exactement ce qui se passerait si vous cingliez l'adresse IP d'une autre interface (par exemple eth0): aucun paquet ne serait envoyé. Cela peut sembler évident, mais pourrait être une source de confusion au début (c'était pour moi).
Cependant, il est difficile de voir comment cela pourrait s'appliquer aux paquets de données TCP.
Peut tcpdump
-être devrait être lié à l'interface d'une manière différente?