Existen multitud de utilidades aunque yo suelo utilizar netstat, ss, lsof y nc. Aparte de estas tenemos también información muy útil en el sistema de ficheros virtual /proc
La primera de ellas es un clásico, aunque en cualquier distro medianamente actual podemos ver que está marcada como obsoleta (deprecated) y nos ofrecen una serie de utilidades alternativas que sustituyen su funcionalidad.
Suelo utilizar la combinación de opciones netaup
:
-n
mara no hacer resolución de nombre-e
me ofrece información adicional (usuario e inodo)-t
conexiones TCP-a
mostrar todas las conexiones (escucha, time_wait, establecidas, etc…)-u
conexiones UDP-p
para ver el PID del proceso que abre el socket
Ejemplo:
[root@jota-pc ~]# netstat -netaup Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 192.168.1.2:9200 0.0.0.0:* LISTEN 130 27953 1247/java tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN 0 25063 1394/apache2 tcp 0 0 192.168.1.2:8083 0.0.0.0:* LISTEN 124 20368 1237/influxd tcp 0 0 127.0.0.1:27060 0.0.0.0:* LISTEN 1000 273585 20571/steam tcp 0 0 0.0.0.0:5044 0.0.0.0:* LISTEN 999 28134 761/java tcp 0 0 192.168.1.2:9300 0.0.0.0:* LISTEN 130 29948 1247/java tcp 0 0 192.168.1.2:8086 0.0.0.0:* LISTEN 124 20369 1237/influxd tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 127 23534 1249/grafana-server tcp 0 0 192.168.1.2:8088 0.0.0.0:* LISTEN 124 23488 1237/influxd tcp 0 0 127.0.0.1:443 0.0.0.0:* LISTEN 0 25065 1394/apache2 tcp 0 0 0.0.0.0:27036 0.0.0.0:* LISTEN 1000 276849 20571/steam tcp 0 0 127.0.0.1:40189 0.0.0.0:* LISTEN 1000 593684 26503/cli tcp 0 0 127.0.0.1:57343 0.0.0.0:* LISTEN 1000 270118 20571/steam tcp 0 0 192.168.1.2:9600 0.0.0.0:* LISTEN 999 34855 761/java tcp 0 0 192.168.1.2:5601 0.0.0.0:* LISTEN 131 27057 742/node tcp 0 0 192.168.1.2:9200 192.168.1.2:54056 ESTABLISHED 130 26425 1247/java tcp 0 0 127.0.0.1:80 127.0.0.1:34140 TIME_WAIT 0 0 -
Tal y como nos comentan en la página man de netstat, la utilidad ss viene a cumplir las mismas funciones a la hora de comprobar conexiones, sockets, etc… Por ejemplo para ver conexiones TCP:
[root@jota-pc ~]# ss -t State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.2:40020 192.168.1.102:https ESTAB 0 0 192.168.1.2:59222 192.168.1.102:https ESTAB 0 0 192.168.1.2:34120 192.168.1.102:https ESTAB 0 0 192.168.1.2:37358 192.168.1.102:https ESTAB 0 0 192.168.1.2:55940 192.168.1.105:https ESTAB 0 0 192.168.1.2:40518 192.168.1.105:https ESTAB 0 0 192.168.1.2:49294 192.168.1.105:https ESTAB 0 0 192.168.1.2:53468 192.168.1.105:https ...
De la misma manera que nestat, si queremos ver todos los sockets, incluso los que están en escucha, tendremos que incluir la opción -a
:
[root@jota-pc ~]# ss -ta | head State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 192.168.1.2:9200 *:* LISTEN 0 128 127.0.0.1:http *:* LISTEN 0 128 192.168.1.2:8083 *:* LISTEN 0 128 127.0.0.1:27060 *:* LISTEN 0 128 *:5044 *:* LISTEN 0 128 192.168.1.2:9300 *:* LISTEN 0 128 192.168.1.2:8086 *:* LISTEN 0 128 127.0.0.1:3000 *:* LISTEN 0 128 192.168.1.2:omniorb *:* ...
Para ver los sockets UNIX:
[root@jota-pc ~]# ss -x | head Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port u_seq ESTAB 0 0 @00009 276563 * 276564 u_str ESTAB 0 0 * 252171 * 254233 u_str ESTAB 0 0 * 94279 * 94280 u_str ESTAB 0 0 * 48215 * 48214 u_str ESTAB 0 0 * 31927 * 26220 u_str ESTAB 0 0 /run/systemd/journal/stdout 29788 * 29787 u_str ESTAB 0 0 * 273629 * 273628 u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 88664 * 88663 u_str ESTAB 0 0 /run/user/1000/bus 273580 * 271197 ...
La tercera herramienta es lsof, cuyas opciones se parecen mucho a las de las herramientas anteriores:
[root@jota-pc ~]# lsof -i 4 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 742 kibana 10u IPv4 29375 0t0 TCP jota-pc:54054->jota-pc:9200 (ESTABLISHED) node 742 kibana 11u IPv4 27057 0t0 TCP jota-pc:5601 (LISTEN) node 742 kibana 12u IPv4 29400 0t0 TCP jota-pc:54056->jota-pc:9200 (ESTABLISHED) node 742 kibana 13u IPv4 238922 0t0 TCP jota-pc:57660->jota-pc:9200 (ESTABLISHED) node 742 kibana 14u IPv4 29409 0t0 TCP jota-pc:54064->jota-pc:9200 (ESTABLISHED) node 742 kibana 15u IPv4 26563 0t0 TCP jota-pc:54072->jota-pc:9200 (ESTABLISHED) node 742 kibana 16u IPv4 26564 0t0 TCP jota-pc:54074->jota-pc:9200 (ESTABLISHED) node 742 kibana 17u IPv4 29490 0t0 TCP jota-pc:54076->jota-pc:9200 (ESTABLISHED) node 742 kibana 18u IPv4 37932 0t0 TCP jota-pc:54100->jota-pc:9200 (ESTABLISHED) java 761 logstash 64u IPv4 28111 0t0 TCP jota-pc:54082->jota-pc:9200 (ESTABLISHED) java 761 logstash 138u IPv4 28134 0t0 TCP *:5044 (LISTEN) java 761 logstash 141u IPv4 34855 0t0 TCP jota-pc:9600 (LISTEN) influxd 1237 influxdb 3u IPv4 23488 0t0 TCP jota-pc:omniorb (LISTEN) influxd 1237 influxdb 16u IPv4 20368 0t0 TCP jota-pc:8083 (LISTEN) influxd 1237 influxdb 23u IPv4 20369 0t0 TCP jota-pc:8086 (LISTEN) influxd 1237 influxdb 30u IPv4 27731 0t0 UDP jota-pc:25826 ...
Sockets de un determinado proceso con la opción -p PID
[root@jota-pc ~]# lsof -p 761 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 761 logstash cwd DIR 8,2 4096 2 / java 761 logstash rtd DIR 8,2 4096 2 / java 761 logstash txt REG 8,2 6456 10092893 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java java 761 logstash DEL REG 8,2 7340180 /tmp/libnetty_tcnative_linux_x86_644223929712074830072.so java 761 logstash mem REG 8,2 186528 10095618 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libsunec.so java 761 logstash mem REG 8,2 39256 6425865 /lib/x86_64-linux-gnu/libcrypt-2.24.so java 761 logstash DEL REG 8,2 7340044 /tmp/jffi4474550211659101291.so ...
Sockets abiertos por un determinado usuario:
[root@jota-pc ~]# lsof -u jota | head COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 2018 jota cwd DIR 8,2 4096 2 / systemd 2018 jota rtd DIR 8,2 4096 2 / systemd 2018 jota txt REG 8,2 1120968 6428072 /lib/systemd/systemd systemd 2018 jota mem REG 8,2 47632 6425873 /lib/x86_64-linux-gnu/libnss_files-2.24.so systemd 2018 jota mem REG 8,2 47688 6425875 /lib/x86_64-linux-gnu/libnss_nis-2.24.so systemd 2018 jota mem REG 8,2 89064 6425870 /lib/x86_64-linux-gnu/libnsl-2.24.so systemd 2018 jota mem REG 8,2 31616 6425871 /lib/x86_64-linux-gnu/libnss_compat-2.24.so systemd 2018 jota mem REG 8,2 19008 6422645 /lib/x86_64-linux-gnu/libuuid.so.1.3.0 systemd 2018 jota mem REG 8,2 18832 6422646 /lib/x86_64-linux-gnu/libattr.so.1.1.0 ...
Por otro lado para comprobar que puedes abrir un socket con una máquina remota telnet o nc (netcat) son herramientas útiles:
telnet [IP | hostname ] puerto nc -v [IP | hostname] servidor puerto
Ejemplo:
[root@jota-pc ~]# nc -v 192.168.2.105 80 Connection to 192.168.2.105 80 port [tcp/http] succeeded!
Por su parte nc tiene más funciones de las que podemos hacer uso como vimos hace tiempo.
Por último /proc/net nos ofrece información interesante de red. Por ejemplo podemos comprobar los sockets unix haciendo un cat /proc/net/unix
[root@jota-pc net]# cat unix Num RefCount Protocol Flags Type St Inode Path ffff93319771b000: 00000002 00000000 00010000 0001 01 21209 /var/lib/samba/winbindd_privileged/pipe ffff9331238fe000: 00000002 00000000 00010000 0001 01 26378 /run/user/1000/keyring/pkcs11 ffff933129244c00: 00000002 00000000 00000000 0002 01 19211 /run/user/1000/systemd/notify ffff9331998eec00: 00000002 00000000 00010000 0001 01 21943 @/tmp/dbus-Iuf9tFsT ffff933114be7400: 00000002 00000000 00010000 0001 01 26382 /run/user/1000/keyring/ssh ffff9331252bf400: 00000002 00000000 00010000 0001 01 19215 /run/user/1000/systemd/private ffff933199027c00: 00000002 00000000 00010000 0001 01 21439 /tmp/.X11-unix/X0 ffff933198e8c000: 00000002 00000000 00010000 0001 01 18706 /var/run/mcelog-client ffff933125a95800: 00000002 00000000 00010000 0001 01 22071 /tmp/.ICE-unix/1424 ffff93313eb45800: 00000002 00000000 00010000 0001 01 19220 /run/user/1000/bus ffff93319a096400: 00000002 00000000 00010000 0001 01 19222 /run/user/1000/gnupg/S.gpg-agent ffff9330e8061800: 00000002 00000000 00010000 0001 01 315965 /tmp/.vbox-jota-ipc/ipcd ffff93319a35e000: 00000002 00000000 00010000 0001 01 19225 /run/user/1000/gnupg/S.dirmngr ffff93318cc8e400: 00000002 00000000 00010000 0001 01 20940 @/tmp/dbus-vbiIPTj9 ffff93319a35e400: 00000002 00000000 00010000 0001 01 19227 /run/user/1000/gnupg/S.gpg-agent.ssh ffff9331239fa000: 00000002 00000000 00010000 0001 01 19229 /run/user/1000/gnupg/S.gpg-agent.browser ffff933114a48c00: 00000002 00000000 00010000 0001 01 24085 @/tmp/.ICE-unix/1901 ffff933125a95000: 00000002 00000000 00010000 0001 01 22070 @/tmp/.ICE-unix/1424 ffff933123ffe000: 00000002 00000000 00010000 0001 01 19231 /run/user/1000/gnupg/S.gpg-agent.extra ffff9331255a1c00: 00000002 00000000 00010000 0001 01 28703 @/tmp/dbus-xgNKc7a8 ffff93319b380400: 00000002 00000000 00010000 0001 01 21438 @/tmp/.X11-unix/X0 ffff933139158400: 00000002 00000000 00010000 0001 01 28714 @/tmp/.X11-unix/X1 ffff93319bdd9c00: 00000002 00000000 00010000 0001 01 21941 @/tmp/dbus-pPDHplKH ffff933125cd3400: 00000002 00000000 00010000 0001 01 28715 /tmp/.X11-unix/X1 ffff9331293b4400: 00000002 00000000 00010000 0001 01 19265 /tmp/ssh-y4ZlNA3yowSe/agent.1901 ffff93312500a800: 00000002 00000000 00010000 0001 01 24086 /tmp/.ICE-unix/1901 ffff93319a1f6000: 00000002 00000000 00010000 0001 01 21940 @/tmp/dbus-nn0Lwela ...
De la misma manera los sockets TCP en /proc/net/tcp
o UDP en /proc/net/udp
[root@jota-pc ~]# cat /proc/net/tcp sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode 0: 0201A8C0:23F0 00000000:0000 0A 00000000:00000000 00:00000000 00000000 130 0 28999 1 ffff89c1fb36e080 100 0 0 10 0 1: 0100007F:0050 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 20290 1 ffff89c2cb6c8000 100 0 0 10 0 2: 0201A8C0:1F93 00000000:0000 0A 00000000:00000000 00:00000000 00000000 124 0 28882 1 ffff89c2cb670080 100 0 0 10 0 3: 00000000:13B4 00000000:0000 0A 00000000:00000000 00:00000000 00000000 999 0 24157 1 ffff89c1e1981800 100 0 0 10 0 4: 0201A8C0:2454 00000000:0000 0A 00000000:00000000 00:00000000 00000000 130 0 31176 1 ffff89c2d936f080 100 0 0 10 0 5: 0201A8C0:1F96 00000000:0000 0A 00000000:00000000 00:00000000 00000000 124 0 28883 1 ffff89c2cb670800 100 0 0 10 0 6: 0100007F:0BB8 00000000:0000 0A 00000000:00000000 00:00000000 00000000 127 0 27113 1 ffff89c2d86a9780 100 0 0 10 0 7: 0201A8C0:1F98 00000000:0000 0A 00000000:00000000 00:00000000 00000000 124 0 20283 1 ffff89c2cb6c8780 100 0 0 10 0 8: 0100007F:01BB 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 20292 1 ffff89c2cb4e3040 100 0 0 10 0 9: 0201A8C0:2580 00000000:0000 0A 00000000:00000000 00:00000000 00000000 999 0 30005 1 ffff89c184b197c0 100 0 0 10 0 10: 0201A8C0:15E1 00000000:0000 0A 00000000:00000000 00:00000000 00000000 131 0 14331 1 ffff89c2d8784040 100 0 0 10 0 ...
Número de sockets por en /proc/net/protocols
[root@jota-pc net]# cat protocols protocol size sockets memory press maxhdr slab module cl co di ac io in de sh ss gs se re sp bi br ha uh gp em PACKET 1344 0 -1 NI 0 no kernel n n n n n n n n n n n n n n n n n n n PINGv6 1080 0 -1 NI 0 yes kernel y y y n n y n n y y y y n y y y y y n RAWv6 1080 0 -1 NI 0 yes kernel y y y n y y y n y y y y n y y y y n n UDPLITEv6 1088 0 -1 NI 0 yes kernel y y y n y y y n y y y y n n y y y y n UDPv6 1088 0 2 NI 0 yes kernel y y y n y n y n y y y y n n y y y y n TCPv6 2048 0 1 no 304 yes kernel y y y y y y y y y y y y y n y y y y y UNIX 1024 619 -1 NI 0 yes kernel n n n n n n n n n n n n n n n n n n n UDP-Lite 928 0 -1 NI 0 yes kernel y y y n y y y n y y y y y n y y y y n PING 872 0 -1 NI 0 yes kernel y y y n n y n n y y y y n y y y y y n RAW 880 1 -1 NI 0 yes kernel y y y n y y y n y y y y n y y y y n n UDP 928 5 2 NI 0 yes kernel y y y n y n y n y y y y y n y y y y n TCP 1888 13 1 no 304 yes kernel y y y y y y y y y y y y y n y y y y y NETLINK 1032 52 -1 NI 0 no kernel n n n n n n n n n n n n n n n n n n n
Como vemos tenemos varias formas de comprobar conexiones. Dependiendo de las necesidades del momento yo utilizo unas u otras, aunque todas tienen funciones similares.