15 ejemplos útiles de comandos de Sockstat para encontrar puertos abiertos en FreeBSD


Sockstat es una utilidad de línea de comandos versátil que se utiliza para mostrar sockets abiertos de red y del sistema en FreeBSD. Básicamente, el comando sockstat se instala por defecto en FreeBSD y se usa comúnmente para mostrar el nombre de los procesos que abrieron un determinado puerto de red en un sistema FreeBSD.

Sin embargo, sockstat también puede enumerar los sockets abiertos según la versión del protocolo (ambas versiones de IP), el estado de la conexión y los puertos en los que un demonio o un programa se une y escucha.

También puede mostrar sockets de comunicación entre procesos, normalmente conocidos como sockets de dominio Unix o IPC. El comando Sockstat combinado con la utilidad awk demuestra ser una herramienta poderosa para la pila de redes locales.

Puede reducir los resultados de una conexión abierta según el usuario propietario del socket, el descriptor de archivo de un socket de red o el PID del proceso que abrió el socket.

En esta guía, enumeraremos algunos ejemplos de uso comunes, pero también muy poderosos, de la utilidad de red de línea de comandos sockstat en FreeBSD.

  1. Guía de instalación de FreeBSD 11.1

1. Lista de todos los puertos abiertos en FreeBSD

Ejecutado simplemente sin opciones o conmutadores, el comando sockstat mostrará todos los sockets abiertos en un sistema FreeBSD, como se ilustra en la siguiente captura de pantalla.

# sockstat

Los valores que se muestran en la salida de sockstat se describen como:

  • USUARIO: el propietario (cuenta de usuario) del socket.
  • COMANDO: El comando que abrió el socket.
  • PID: el ID de proceso del comando al que pertenece el socket.
  • FD: el número de descriptor de archivo del socket.
  • PROTO: El protocolo de transporte (generalmente TCP/UDP) asociado con el socket abierto o el tipo de socket en el caso de sockets de dominio Unix (datagrama, flujo o seqpac) para sockets UNIX.
  • DIRECCIÓN LOCAL: Representa la dirección IP local para sockets basados en IP. En el caso de los sockets Unix, representa el nombre de archivo del punto final adjunto al socket. La notación “??” implica que el punto final del socket no se pudo reconocer o establecer.
  • DIRECCIÓN EXTRANJERA: la dirección IP remota a la que está conectado el enchufe.

2. Enumere los puertos abiertos o en escucha en FreeBSD

Ejecutado con el indicador -l , el comando sockstat mostrará todos los sockets de escucha abiertos en la pila de redes y todos los sockets de dominio Unix abiertos o conductos con nombre involucrados en algún tipo de procesamiento de datos local en el sistema.

# sockstat -l

3. Enumere los puertos abiertos IPv4 en FreeBSD

Para mostrar todos los sockets abiertos solo para el protocolo IPv4, emita el comando con la marca -4 , como se sugiere en el siguiente ejemplo.

# sockstat -4

4. Enumere los puertos abiertos IPv6 en FreeBSD

De manera similar a la versión IPv4, también puede mostrar los sockets de red abiertos solo para IPv6, emitiendo el comando como se muestra a continuación.

# sockstat -6

5. Enumere los puertos abiertos TCP o UDP en FreeBSD

Para mostrar sockets de red basados solo en un protocolo de red específico, como TCP o UDP, use el indicador -P , seguido del nombre del argumento del protocolo.

Los nombres de los protocolos se pueden encontrar inspeccionando el contenido del archivo/etc/Protocols. Actualmente, el protocolo ICMP no es compatible con la herramienta sockstat.

# sockstat -P tcp
# sockstat -P udp

Encadena ambos protocolos.

# sockstat –P tcp,udp

6. Enumere los números de puerto específicos de TCP y UDP

Si desea mostrar todos los sockets abiertos TCP o UDP IP, según el número de puerto local o remoto, use los indicadores de comando y la sintaxis a continuación, como se ilustra en la siguiente captura de pantalla.

# sockstat -P tcp -p 443             [Show TCP HTTPS Port]
# sockstat -P udp -p 53              [Show UDP DNS Port] 
# sockstat -P tcp -p 443,53,80,21    [Show Both TCP and UDP]

7. Lista de puertos abiertos y conectados en FreeBSD

Para mostrar todos los sockets abiertos y conectados, use el indicador -c . Como se muestra en los ejemplos a continuación, puede enumerar todos los sockets conectados HTTPS o todos los sockets conectados TCP emitiendo los comandos.

# sockstat -P tcp -p 443 -c
# sockstat -P tcp -c

8. Enumere los puertos de escucha de red en FreeBSD

Para enumerar todos los sockets TCP abiertos en estado de escucha, agregue los indicadores -l y -s , como se muestra en el siguiente ejemplo. Al ser un protocolo sin conexión, UDP no mantiene información sobre el estado de la conexión.

Los sockets abiertos UDP no se pueden mostrar usando su estado, porque el protocolo udp usa datagramas para enviar/recibir datos y no tiene un mecanismo incorporado para determinar el estado de la conexión.

# sockstat -46 -l -s

9. Enumere los zócalos Unix y las canalizaciones con nombre

Los sockets de dominio Unix, así como otras formas de comunicación entre procesos locales, como las canalizaciones con nombre, se pueden mostrar mediante el comando sockstat utilizando el indicador -u , como se muestra en la imagen de abajo.

# sockstat -u

10. Lista de puertos abiertos por aplicación en FreeBSD

La salida del comando Sockstat se puede filtrar a través de la utilidad grep para mostrar una lista de puertos abiertos por una aplicación o comando específico.

Suponga que desea enumerar todos los sockets asociados con el servidor web Nginx, puede emitir el siguiente comando para lograr la tarea.

# sockstat -46 | grep nginx

Para mostrar solo los sockets conectados asociados con el servidor web Nginx, ejecute el siguiente comando.

# sockstat -46 -c| grep nginx

11. Enumere los protocolos conectados HTTPS

Puede enumerar todos los sockets conectados asociados con el protocolo HTTPS junto con el estado de cada conexión ejecutando el siguiente comando.

# sockstat -46 -s -P TCP -p 443 -c

12. Lista de enchufes remotos HTTP

Para enumerar todos los sockets remotos asociados con el protocolo HTTP, puede ejecutar una de las siguientes combinaciones de comandos.

# sockstat -46 -c | egrep '80|443' | awk '{print $7}' | uniq -c | sort -nr
# sockstat -46 -c -p 80,443 | grep -v ADDRESS|awk '{print $7}' | uniq -c | sort -nr

13. Encuentre las solicitudes HTTP más altas por direcciones IP

En caso de que desee averiguar cuántas conexiones HTTP solicita cada dirección IP remota, emita el siguiente comando. Este comando puede ser muy útil en caso de que desee determinar si su servidor web está bajo algún tipo de ataque DDOS. En caso de sospechas, debe investigar las direcciones IP con la tasa de solicitud más alta.

# sockstat -46 -c | egrep '80|443' | awk '{print $7}' | cut -d: -f1 | uniq -c | sort –nr

14. Lista de sockets abiertos DNS

Si ha configurado un servidor DNS de reenvío y almacenamiento en caché en sus instalaciones para atender a los clientes internos a través del protocolo de transporte TCP y desea mostrar una lista de todos los sockets
abierto por el resolutor, junto con el estado de cada conexión de socket, ejecute el siguiente comando.

# sockstat -46 -P tcp –p 53 -s

15. Consultar TCP DNS en el dominio local

Si no hay tráfico de DNS en la red, puede activar manualmente una consulta de DNS en el socket TCP desde la consola de la máquina local ejecutando el siguiente comando dig. Luego, emita el comando anterior para enumerar todos los sockets de resolución.

# dig +tcp  www.domain.com  @127.0.0.1

¡Eso es todo! Junto con las utilidades de línea de comando lsof, la línea de comando sockstat es una poderosa utilidad que se utiliza para adquirir información de red y solucionar múltiples aspectos de la pila de redes FreeBSD y los procesos y servicios relacionados con la red.

La contraparte del comando sockstat de FreeBSD en Linux está representada por el comando netstat o el comando new ss. Lo crea o no, según la utilidad sockstat, puede encontrar una aplicación similar desarrollada para el sistema operativo Android, llamada SockStat - Simple Netstat GUI.