Diagnosi traffico TCP su Android (con root)
Su un dispositivo Android che abbia l'accesso root abilitato, se vogliamo scoprire quale app sta facendo traffico su una porta TCP, possiamo seguire questa procedura.
Anzitutto verifichiamo se c'è del traffico con tcpdump, in questo esempio cerchiamo del traffico IMAP su porta 143 oppure 993:
# tcpdump -i wlan0 -n 'port 143 or port 993' tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on wlan0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 15:13:52.625229 IP 10.0.1.225.38950 > 168.119.254.82.143: Flags [S], seq 66565344, ... 15:13:52.631946 IP 10.0.1.225.38952 > 168.119.254.82.143: Flags [S], seq 2647617764, ...
Se una sessione TCP è in corso, con netstat è possibile vedere anche il nome del programma che l'ha avviata:
# netstat -a -n -p | grep ':143' tcp 0 0 10.0.1.225:39364 168.119.254.82:143 ESTABLISHED 12273/com.b44t.messenger tcp 0 0 10.0.1.225:48700 78.47.39.235:143 ESTABLISHED 12273/com.b44t.messenger
Se invece la connessione non è andata a buon fine (il processo ha tentato la connessione, ma ha fallito) è possibile vedere il socket aperto con ss (socket statistics):
# ss -ntp | grep ':143'
SYN-SENT 0 1 10.0.1.225:48566 78.47.39.235:143 users:((".b44t.messenger",pid=12273,fd=136))
SYN-SENT 0 1 10.0.1.225:39022 168.119.254.82:143 users:((".b44t.messenger",pid=12273,fd=88))
Le opzioni sono -n don't resolve addresses/ports to names, -t TCP sockets. -p show the process/PID owning the socket.
È possibile cercare informazioni su in processo in base al PID con la normale procedura Linux:
cat /proc/12345/cmdline
