Filtra per processo / PID in Wireshark


Risposte:


58

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.


7
buon punto .. questo è quello che ho pensato anch'io .. fammi aspettare un giorno prima di chiudere questo, solo nel caso in cui ci sia un ninja wirehark là fuori che riesce a farlo ..
Ryan Fernandes

30
Wireshark sa quale porta viene utilizzata e il sistema operativo conosce il PID del processo che utilizza la porta. Con le modifiche al codice, dovrebbe essere possibile per Wireshark mappare la porta al PID. Ci sono alcuni casi in cui questo fallirebbe come quando il sistema operativo rialloca una porta a un'app diversa appena prima che Wireshark interroghi il sistema operativo per PID per una porta. Quindi questo non sarà a prova di errore e glitch, ma se l'utente venisse a conoscenza di queste limitazioni sarebbe comunque una caratteristica utile.
Dojo

Dico solo di aggiungere un modulo a WireShark che ascolta l'apertura / chiusura della porta e mappa il PID sulla porta. Sincronizzalo con il processo principale e avrai un perfetto mappatore da porta a processo. Tuttavia, leggendo il bug dal commento alla domanda, il modulo non è così semplice da creare.
Vesper

Ricordo la prima volta che ho scaricato WireShark, mostrava l'albero dei processi e potevi selezionare un processo da monitorare. Non so quando questa opzione è scomparsa, ma c'era.
Tomáš Zato - Ripristina Monica

90

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 ...


10
Microsoft Network Monitor 3.4 è su microsoft.com/en-us/download/details.aspx?id=4865
gt

39
C'è anche Microsoft Message Analyzer che è fondamentalmente la versione Microsoft di Wireshark (e il successore di Network Monitor a quanto ho capito), ma un po 'meglio integrato. Nel selettore di colonne, sotto "Etw" -> "EtwProviderMsg" c'è una colonna per "PID". Funziona bene!
Cameron

3
Il percorso esatto è EtwProviderMsg -> EventRecord -> Header -> ProcessId
r590

L'ho appena provato e Microsoft Message Analyzer è un software così noioso! Ho quasi messo a dura prova il mio sistema. Anche l'interfaccia utente molto controintuitiva. Qualcuno ha trovato un modo per cancellare l'elenco con i dati raccolti? Mi sono arreso e ho disinstallato quel pezzo di spazzatura. (PS. Peccato che gli sviluppatori di Wireshark non abbiano aggiunto una funzionalità per connettere il nome del processo / PID a una porta nel filtro. È molto semplice. Questo potrebbe essere fondamentale per vedere cosa sta succedendo nel processo durante il suo avvio. Come una soluzione alternativa potrei avere un'idea generale usando ProcMon da SysInternals.)
c00000fd

1
Ho appena scoperto di recente Microsoft Message Analyzer ed è uno strumento così utile! Com'è possibile che non ne abbia mai sentito parlare. Così sottovalutato. Ha grandi capacità di filtraggio grazie all'integrazione molto migliore con Windows rispetto a Wireshark. Sono passato ad esso su tutti gli host della mia azienda entro ~ 3 mesi di lavoro su base giornaliera. Enorme apprezzamento a @Cameron per il suo commento sotto quella risposta! :-)
Skipper

16

È 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.


12
beh, questo potrebbe non funzionare..il programma si apre e chiude molte porte locali e remote
Ryan Fernandes,

11

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


1
Grazie per avermi indicato la direzione di questo, è esattamente ciò di cui avevo bisogno. FWIW, il gruppo di primo livello "ProcMon" sembra contenere lo stesso ProcessId, oltre ad altre informazioni come il nome del processo, ParentId, ecc.
Tobias J

3

Su Windows esiste una build sperimentale che fa questo, come descritto nella mailing list, Filtra per nome processo locale


Questo fa, all'interno di Wireshark, il "Potresti abbinare i numeri di porta da WireShark fino a numeri di porta da, diciamo, netstat che ti dirà il PID di un processo in ascolto su quella porta." roba dal commento di Tom Woolfrey, quindi è (come nota il messaggio) soggetto alle limitazioni di quel meccanismo.

3

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 sgper 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 ...


3

Se vuoi seguire un'applicazione ancora da avviare allora è sicuramente possibile:

  1. Installa docker (vedi https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ )
  2. Apri un terminale ed esegui un piccolo contenitore: docker run -t -i ubuntu /bin/bash(cambia "ubuntu" nella tua distribuzione preferita, questo non deve essere lo stesso del tuo sistema reale)
  3. Installa la tua applicazione nel contenitore usando lo stesso modo in cui la installeresti in un sistema reale.
  4. Avvia WireShark nel tuo sistema reale, vai su Cattura> Opzioni. Nella finestra che si aprirà vedrai tutte le tue interfacce. Invece di scegliere any, wlan0, eth0, ... scegliere la nuova interfaccia virtuale docker0, invece.
  5. Inizia a catturare
  6. Avvia la tua applicazione nel contenitore

Potresti avere qualche dubbio sull'esecuzione del tuo software in un contenitore, quindi ecco le risposte alle domande che probabilmente vorresti porre:

  • La mia applicazione funzionerà all'interno di un contenitore?Quasi certamente sì, ma potrebbe essere necessario imparare un po 'su Docker per farlo funzionare
  • La mia applicazione non verrà eseguita lentamente?Trascurabile. Se il tuo programma è qualcosa che esegue calcoli pesanti per una settimana, ora potrebbe richiedere una settimana e 3 secondi
  • Cosa succede se il mio software o qualcos'altro si rompe nel contenitore? Questa è la cosa bella dei contenitori. Qualunque cosa stia funzionando all'interno può solo rompere il contenitore corrente e non può danneggiare il resto del sistema.

0

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==someipe voilà. Non funzionerà in ogni caso, ma per alcuni è utile.


0

Ottieni il numero di porta utilizzando netstat:

netstat -b

E poi usa il filtro Wireshark:

tcp.port == portnumber

Non sono sicuro che sia un modo infallibile. Se hai un server TCP in ascolto su una porta ma non hai bloccato la gestione TCP del kernel, uno o entrambi il kernel o la tua applicazione potrebbero rispondere sulla porta.
aeb0

0

L'uso straceè più adatto a questa situazione.

strace -f -e trace=network -s 10000 -p <PID>;

opzioni -fper tracciare anche tutti i processi forkati, -e trace=netwrokper filtrare solo le chiamate di sistema di rete e -sper 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>;

-16

Puoi controllare i numeri di porta con questi esempi di comandi su WireShark: -

tcp.port == 80

tcp.port == 14220

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.