Come posso trovare quale processo invia i dati a una porta specifica?


21

Ho un servizio, mantenendo una certa porta aperta.

Sto ricevendo dati, che non mi aspetto né voglio ottenere, e sto cercando di individuare la fonte di questi dati. Quindi, come posso trovare quale processo che invia i dati a una porta specifica, al contrario di quale processo è in ascolto.

Risposte:


23

Per TCP (sebbene lo stesso approccio funzionerebbe per SCTP 1 o qualsiasi protocollo di trasporto orientato alla connessione), lo stesso che per cercare quelli in ascolto:

lsof -nPi tcp:the-port

Riporterà i processi che hanno un socket TCP aperto su quella porta. Se si conosce la porta di origine (l'applicazione server può conoscerla e registrarla), è possibile utilizzarla invece per individuare il client non autorizzato.

Per i socket UDP o RAW, sarebbe più complicato, anche se suppongo sia dove qualcosa come systemtap o dtrace può tornare utile. Forse anche auditd.


1 Sebbene il supporto SCTP (solo su Linux) sia stato aggiunto lsofnella versione 4.86, non è possibile utilizzare -iper richiedere esplicitamente socket SCTP. Qui può invece essere usato lsof -nP | grep -w 'SCTP.*:the-port'come euristico.


Questo non funziona per SCTP per me.
sudo,

1
@sudo, vedi modifica
Stéphane Chazelas,

3

Prova a seguire:

$sudo ss -tp

O:

$sudo netstat -A inet -p

Per evitare il risultato localhost:

$sudo netstat -A inet -p | grep -v localhost

Per elencare solo le connessioni STABILITE:

$sudo netstat -A inet -p | grep -v localhost | grep ESTABLISHED

2

A seconda del tipo di connessione che stabilisce per inviare i dati, uno di questi approcci ti porterà da qualche parte.

  • Utilizzare tcpdump port 1234per acquisire i dati inviati a questa porta. È possibile utilizzare un programma come Wireshark per analizzarlo su un altro computer (acquisito in un file utilizzando l' -wopzione). In alternativa, utilizzare Wireshark direttamente.

  • Nel caso in cui stabilisca e mantenga aperta una connessione tcp / udp, è possibile utilizzare netstatper trovare l'IP remoto della connessione.

  • Elencare i socket aperti di un processo come nella risposta fornita da @StephaneChazelas.


1

È possibile utilizzare il sockstatcomando per trovare il processo che ha avviato la connessione al servizio sull'host locale.

DESCRIPTION
     The sockstat command lists open Internet or UNIX domain sockets.

Basta abbinare tutte le connessioni di origine alla destinazione. Funziona bene con i socket TCP / UDP / UNIX.


0

Su Solaris, l'esecuzione di file su tutti i processi dovrebbe mostrare quali processi hanno quali connessioni aperte. Richiederà un'attenta registrazione, probabilmente usando le opzioni -A, -B di ggrep ...

Su Linux netstat -anp --inetfunzionerà, anche senza lsof installato. (rilasciare --inetper ottenere anche socket di dominio Unix)

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.