Esiste un modo per filtrare / seguire un flusso TCP / SSL basato su un particolare ID di processo utilizzando Wireshark ?
Esiste un modo per filtrare / seguire un flusso TCP / SSL basato su un particolare ID di processo utilizzando Wireshark ?
Risposte:
Non vedo come. Il PID non arriva sul filo (in generale), inoltre Wireshark ti consente di guardare cosa c'è sul filo, potenzialmente tutte le macchine che comunicano sul filo. Gli ID di processo non sono univoci su macchine diverse, comunque.
Nel caso in cui tu stia cercando un modo alternativo e l'ambiente che utilizzi sia Windows, Network Monitor 3.3 di Microsoft è una buona scelta. Ha la colonna del nome del processo. Puoi aggiungerlo facilmente a un filtro utilizzando il menu contestuale e applicare il filtro .. Come al solito la GUI è molto intuitiva ...
È possibile abbinare i numeri di porta da WireShark a numeri di porta, ad esempio, netstat che ti dirà il PID di un processo in ascolto su quella porta.
Usa Microsoft Message Analyzer v1.4
Passa a ProcessId dal selettore di campi.
Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId
Fare clic con il tasto destro e Aggiungi come colonna
Su Windows esiste una build sperimentale che fa questo, come descritto nella mailing list, Filtra per nome processo locale
Questa è una cosa importante da poter fare per monitorare dove alcuni processi provano a connettersi e sembra che non ci sia alcun modo conveniente per farlo su Linux. Tuttavia, sono possibili diverse soluzioni alternative, quindi ritengo che valga la pena menzionarle.
Esiste un programma chiamato nonet che consente di eseguire un programma senza accesso a Internet (ho configurato la maggior parte dei lanciatori di programmi sul mio sistema). Usa setguid per eseguire un processo nel gruppo nonet e imposta una regola iptables per rifiutare tutte le connessioni da questo gruppo.
Aggiornamento: ormai uso un sistema ancora più semplice, puoi facilmente avere una configurazione di iptables leggibile con ferm, e basta usare il programma sg
per eseguire un programma con un gruppo specifico. Iptables ti consente anche di reindirizzare il traffico in modo da poterlo persino instradare a un'interfaccia separata o un proxy locale su una porta che ti consente di filtrare in WireShark o REGISTRARE i pacchetti direttamente da iptables se non vuoi disabilitare tutta Internet mentre tu stanno controllando il traffico.
Non è molto complicato adattarlo per eseguire un programma in un gruppo e tagliare tutto il resto del traffico con iptables per la durata dell'esecuzione e quindi è possibile catturare il traffico solo da questo processo.
Se mai dovessi venire a scriverlo, posterò un link qui.
In un'altra nota, puoi sempre eseguire un processo in una macchina virtuale e annusare l'interfaccia corretta per isolare le connessioni che fa, ma sarebbe una soluzione piuttosto inferiore ...
Se vuoi seguire un'applicazione ancora da avviare allora è sicuramente possibile:
docker run -t -i ubuntu /bin/bash
(cambia "ubuntu" nella tua distribuzione preferita, questo non deve essere lo stesso del tuo sistema reale)any
, wlan0
, eth0
, ... scegliere la nuova interfaccia virtuale docker0
, invece.Potresti avere qualche dubbio sull'esecuzione del tuo software in un contenitore, quindi ecco le risposte alle domande che probabilmente vorresti porre:
In alcuni casi non è possibile filtrare per ID processo. Ad esempio, nel mio caso avevo bisogno di sniffare il traffico da un processo. Ma ho trovato nella sua configurazione indirizzo IP della macchina di destinazione, filtro aggiunto ip.dst==someip
e voilà. Non funzionerà in ogni caso, ma per alcuni è utile.
Ottieni il numero di porta utilizzando netstat
:
netstat -b
E poi usa il filtro Wireshark:
tcp.port == portnumber
L'uso strace
è più adatto a questa situazione.
strace -f -e trace=network -s 10000 -p <PID>;
opzioni -f
per tracciare anche tutti i processi forkati, -e trace=netwrok
per filtrare solo le chiamate di sistema di rete e -s
per visualizzare la lunghezza della stringa fino a 10000 caratteri.
Puoi anche tracciare solo determinate chiamate come operazioni di invio, ricezione e lettura.
strace -f -e trace=send,recv,read -s 10000 -p <PID>;
Puoi controllare i numeri di porta con questi esempi di comandi su WireShark: -
tcp.port == 80
tcp.port == 14220