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


Sockstat es una utilidad de línea de comandos versátil que se usa para mostrar los sockets abiertos de la red y del sistema en FreeBSD. Principalmente, el comando sockstat se instala de forma predeterminada 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 mostrar 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, generalmente conocidos como sockets de dominio Unix o IPC. El comando Sockstat combinado con el filtro grep o canalizado a través de 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 que posee el 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 utilización comunes, pero también muy potentes, de la utilidad de red de línea de comandos sockstat en FreeBSD.

  1. FreeBSD 11.1 Installation Guide

1. Listar todos los puertos abiertos en FreeBSD

Simplemente ejecutado sin opciones ni interruptores, el comando sockstat mostrará todos los sockets abiertos en un sistema FreeBSD, como se ilustra en la siguiente captura de pantalla.

# sockstat

Los valores mostrados en la salida de sockstat se describen como:

  • USER : The owner (user account) of the socket.
  • COMMAND : The command which with opened the socket.
  • PID : The process ID of the command which owns the socket.
  • FD : The file descriptor number of the socket.
  • PROTO : The transport protocol (usually TCP/UDP) associated with the opened socket or socket type in case of unix domain sockets (datagram, stream or seqpac) for UNIX sockets.
  • LOCAL ADDRESS : It represents the local IP address for IP based sockets. In case of Unix sockets it represents endpoint filename attached to the socket. The “??” notation implies that the socket endpoint could not be recognized or established.
  • FOREIGN ADDRESS : The remote IP address where the socket is connected to.

2. Listar puertos abiertos o abiertos en FreeBSD

Ejecutado con la bandera -l , el comando sockstat mostrará todos los sockets de escucha abiertos en la pila de red y todos los sockets de dominio Unix abiertos o tuberías con nombre involucradas en algún tipo de procesamiento de datos local en el sistema.

# sockstat -l

3. Listar puertos abiertos IPv4 en FreeBSD

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

# sockstat -4

4. Listar puertos abiertos IPv6 en FreeBSD

Al igual que en la versión IPv4, también puede mostrar los sockets de red abiertos para IPv6 solo, emitiendo el comando como se muestra a continuación.

# sockstat -6

5. Lista de puertos abiertos TCP o UDP en FreeBSD

Para mostrar los sockets de red basados ​​únicamente en un protocolo de red específico, como TCP o UDP , use la marca -P , seguida de la argumento nombre del protocolo.

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

# sockstat -P tcp
# sockstat -P udp

Encadenar ambos protocolos.

# sockstat –P tcp,udp

6. Lista de números de puertos específicos de TCP y UDP

Si desea mostrar todos los sockets abiertos de TCP o UDP IP, en función del número de puerto local o remoto, use las sintaxis y los indicadores de comando a continuación, como se muestra 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. Listar puertos abiertos y conectados en FreeBSD

Para mostrar todos los sockets abiertos y conectados, use la marca -c . Como se muestra en las siguientes muestras, 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. Listar 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 pueden mostrarse 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. Lista de zócalos Unix y tuberías con nombre

Los sockets de dominio Unix, así como otras formas de comunicación entre procesos locales, como las canalizaciones con nombre, pueden mostrarse 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 mediante la utilidad grep para mostrar una lista de puertos abiertos por una aplicación o comando específico.

Supongamos 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. Lista de 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 sockets 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. Encuentra las solicitudes HTTP más altas por direcciones IP

En caso de que desee encontrar cuántas conexiones HTTP solicita cada dirección IP remota, ejecute 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 de DNS

abierto por el resolutor, junto con el estado de cada conexión de zócalo, ejecute el siguiente comando.

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

15. Consulta TCP DNS en dominio local

Si no hay tráfico DNS en la red, puede activar manualmente una consulta DNS en el socket TCP desde la consola de la máquina local ejecutando el siguiente comando de excavación. 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 netstat y 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 red FreeBSD y los procesos y servicios relacionados con la red.

El homólogo del comando sockstat de FreeBSD en Linux está representado por el netstat o el comando recientemente ss . Créalo o no, basado en la utilidad sockstat, puede encontrar una aplicación similar desarrollada para el sistema operativo Android, llamada SockStat - Simple Netstat GUI.