Controllare la rete con lsof su Linux

Controllare la rete con lsof su Linux

Ho già parlato di lsof in questo articolo.

Qui rivediamo il comando, usandolo però solo per i controlli di rete.

Ovviamente, con lsof, i controlli si possono fare solo sul pc da dove viene lanciato; ed occorre avere privilegi elevati.

Questo un primo esempio:

# lsof -i
COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind     526     root    6u  IPv4  11099      0t0  UDP *:sunrpc
rpcbind     526     root    7u  IPv4  11102      0t0  UDP *:701
rpcbind     526     root    8u  IPv4  11103      0t0  TCP *:sunrpc (LISTEN)
rpcbind     526     root    9u  IPv6  11104      0t0  UDP *:sunrpc
rpcbind     526     root   10u  IPv6  11105      0t0  UDP *:701
rpcbind     526     root   11u  IPv6  11106      0t0  TCP *:sunrpc (LISTEN)
rpc.statd   535    statd    5u  IPv4  11321      0t0  UDP localhost:711
rpc.statd   535    statd    8u  IPv4  11177      0t0  UDP *:44965
rpc.statd   535    statd    9u  IPv4  11179      0t0  TCP *:50511 (LISTEN)
rpc.statd   535    statd   10u  IPv6  11181      0t0  UDP *:46095
rpc.statd   535    statd   11u  IPv6  11183      0t0  TCP *:44720 (LISTEN)
mongod      553  mongodb    9u  IPv4  12107      0t0  TCP localhost:27017 (LISTEN)
mongod      553  mongodb   10u  IPv4  14086      0t0  TCP localhost:28017 (LISTEN)
..............................................

Questo ottiene tutti i file di rete internet.

Come vedete ci sono varie colonne, molto utili per poter usare dei filtri.

Ad esempio:

# lsof -u mysql | grep -i LISTEN
mysqld  1199 mysql   10u  IPv4              14425       0t0     TCP localhost:mysql (LISTEN)

Così prendiamo tutti i processi di MySQL in ascolto.

Possiamo anche identificare le connessione da o verso un indirizzo IP:

# lsof -i @192.168.1.133
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    4087 root    3u  IPv4 346513      0t0  TCP casa.local:ssh->192.168.1.133:46020 (ESTABLISHED)
sshd    4172 casa    3u  IPv4 346513      0t0  TCP casa.local:ssh->192.168.1.133:46020 (ESTABLISHED)

La connessione SSH dal mio pac al serverino casalingo da cui sto lanciando i comandi.

Infine, il comando per identificare tutte le connessioni attive su TCP:

# lsof -nP -iTCP -sTCP:LISTEN
COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind     526     root    8u  IPv4  11103      0t0  TCP *:111 (LISTEN)
rpcbind     526     root   11u  IPv6  11106      0t0  TCP *:111 (LISTEN)
rpc.statd   535    statd    9u  IPv4  11179      0t0  TCP *:50511 (LISTEN)
rpc.statd   535    statd   11u  IPv6  11183      0t0  TCP *:44720 (LISTEN)
mongod      553  mongodb    9u  IPv4  12107      0t0  TCP 127.0.0.1:27017 (LISTEN)
mongod      553  mongodb   10u  IPv4  14086      0t0  TCP 127.0.0.1:28017 (LISTEN)
memcached   555   nobody   26u  IPv4  13139      0t0  TCP 127.0.0.1:11211 (LISTEN)
sshd        559     root    3u  IPv4  11643      0t0  TCP *:22 (LISTEN)
sshd        559     root    4u  IPv6  11645      0t0  TCP *:22 (LISTEN)
postgres   1143 postgres    6u  IPv6  14767      0t0  TCP [::1]:5432 (LISTEN)
postgres   1143 postgres    7u  IPv4  14768      0t0  TCP 127.0.0.1:5432 (LISTEN)
mysqld     1199    mysql   10u  IPv4  14425      0t0  TCP 127.0.0.1:3306 (LISTEN)
sendmail-  1201     root    4u  IPv4  12095      0t0  TCP 127.0.0.1:25 (LISTEN)
sendmail-  1201     root    5u  IPv4  12096      0t0  TCP 127.0.0.1:587

Enjoy!