Cómo obtener la lista de puertos que están libres en un servidor Unix

15

Tengo el requisito de saber qué puertos de mi máquina Solaris son libres de usar para cualquier tipo de comunicación de red.

Intenté el netstat -acomando. Pero la información devuelta no dio un resultado convincente de todos los puertos que puedo usar para una nueva aplicación que estoy escribiendo. Agradezco cualquier asistencia brindada a este respecto.

PSam
fuente
¿Dentro de qué rango numérico? Siempre hay puertos efímeros en uso y estos cambian constantemente.
mdpc
¿Qué pasa con el resultado de netstat -anno fue convincente? netstatdebería enumerar todo lo que se está utilizando. Todo lo demás (¡normalmente muchos miles de puertos!) Está disponible.
Celada
1
Además, puede ser útil saber por qué necesita esta información. Al vincular un socket, siempre puede optar por dejar que el kernel le asigne un puerto, por lo que si no le importa el puerto que obtenga siempre que obtenga uno, entonces no necesita encontrar uno manualmente.
Celada

Respuestas:

15

1: No debe usar puertos anónimos (también conocidos como puertos efímeros) para implementar un servicio UDP o TCP.

Por defecto, estos puertos están en el rango 32768-65535.

# ndd /dev/tcp tcp_smallest_anon_port
32768
# ndd /dev/tcp tcp_largest_anon_port 
65535

2: A menos que su servicio se ejecute como root o tenga el privilegio RBAC requerido, no debe usar un puerto privilegiado. Por defecto, todos los puertos del 1 al 1024 tienen privilegios:

# ndd /dev/tcp tcp_smallest_nonpriv_port
1024

3: A menos que sepa lo que está haciendo, no debe usar un puerto conocido que se espera que ejecute un servicio diferente al que planea. Los puertos conocidos se enumeran en /etc/services. p.ej:

# tail /etc/services
dtspc           6112/tcp                        # CDE subprocess control
fs              7100/tcp                        # Font server
solaris-audit   16162/tcp                       # Secure remote audit logging
servicetag      6481/udp
servicetag      6481/tcp
wnn6            22273/tcp                       # Wnn6 jserver
wnn6            22273/udp                       # Wnn6 jserver
rdc             121/tcp                         # SNDR server daemon
snmpd           161/udp        snmp             # Net-SNMP snmp daemon
swat            901/tcp                         # Samba Web Adm.Tool

4: No debe usar un puerto que ya esté siendo utilizado por un servicio existente. Puede obtener estos con la ejecución:

# netstat -an | grep LISTEN | nawk '{$0=$1;gsub(".*\\.","");print}' | sort -un

5: Finalmente, no debe usar un puerto utilizado por un servicio actualmente deshabilitado, pero que podría estar habilitado en el futuro. Esta es la parte más difícil de cumplir ...

jlliagre
fuente
10

Puede usar 1-65,535 puertos en su sistema en los cuales 1024 tienen privilegios de root.

Entonces, en lugar de encontrar el puerto libre, puede obtener una lista de los puertos usados ​​con el siguiente comando

netstat -tunlep | grep LISTEN | awk '{print $4}'

Luego puede usar cualquier puerto del 1-65535, excepto esos puertos.

Vaibhav Panmand
fuente
2
Algunas de las netstatopciones que utiliza no son compatibles con la netstatimplementación de Solaris .
jlliagre