Vorrei catturare il traffico su interfacce virtuali Linux, a scopo di debug. Ho avuto modo di sperimentare con veth
, tun
e dummy
l'interfaccia tipi; su tutti e tre, ho difficoltà tcpdump
a mostrare qualcosa.
Ecco come ho impostato l'interfaccia fittizia:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
In un terminale, guardalo con tcpdump
:
tcpdump -i dummy10
In un secondo, ascoltalo con nc
:
nc -l 99.99.99.1 2048
In un terzo momento, effettua una richiesta HTTP con curl
:
curl http://99.99.99.1:2048/
Sebbene nel terminale 2 possiamo vedere i dati dalla curl
richiesta, non viene visualizzato nulla tcpdump
.
Un tutorial Tun / Tap chiarisce alcune situazioni in cui il kernel potrebbe non inviare effettivamente alcun pacchetto quando si opera su un'interfaccia locale:
Guardando l'output di Tshark, non vediamo ... niente. Non c'è traffico che passa attraverso l'interfaccia. Questo è corretto: poiché stiamo eseguendo il ping dell'indirizzo IP dell'interfaccia, il sistema operativo decide correttamente che nessun pacchetto deve essere inviato "sul filo" e il kernel stesso risponde a questi ping. Se ci pensate, è esattamente cosa accadrebbe se si eseguisse il ping dell'indirizzo IP di un'altra interfaccia (ad esempio eth0): nessun pacchetto verrebbe inviato. Potrebbe sembrare ovvio, ma all'inizio potrebbe essere fonte di confusione (era per me).
Tuttavia, è difficile vedere come ciò possa applicarsi ai pacchetti di dati TCP.
Forse tcpdump
dovrebbe essere associato all'interfaccia in un modo diverso?