Como obter a lista de portas gratuitas em um servidor Unix

15

Eu tenho um requisito para saber quais portas da minha máquina Solaris são livres para serem usadas para qualquer tipo de comunicação em rede.

Eu tentei o netstat -acomando. Mas as informações retornadas não deram um resultado convincente do qual todas as portas eu posso usar para um novo aplicativo que estou escrevendo. Agradecemos qualquer assistência fornecida a esse respeito.

PSam
fonte
Dentro de qual faixa numérica? Sempre existem portas efêmeras em uso e elas mudam constantemente.
Mdpc
E o resultado de netstat -annão foi convincente para você? netstatdeve listar tudo o que está sendo usado. Todo o resto (normalmente muitos milhares de portas!) Está disponível.
Celada
1
Além disso, pode ajudar a saber por que você precisa dessas informações. Ao vincular um soquete, você sempre pode optar por permitir que o kernel atribua uma porta para você; portanto, se você não se importa com qual porta obtém, desde que a tenha, não precisará encontrá-la manualmente.
precisa

Respostas:

15

1: Você não deve usar portas anônimas (também conhecidas como portas efêmeras) para implementar um serviço UDP ou TCP.

Por padrão, essas portas estão no intervalo 32768 - 65535.

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

2: A menos que seu serviço esteja sendo executado como root ou possua o privilégio RBAC necessário, você não deve usar uma porta privilegiada. Por padrão, todas as portas de 1 a 1024 são privilegiadas:

# ndd /dev/tcp tcp_smallest_nonpriv_port
1024

3: A menos que você saiba o que está fazendo, não deve usar uma porta conhecida que deve executar um serviço diferente daquele que você planeja. Portas conhecidas estão listadas em /etc/services. por exemplo:

# 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: você não deve usar uma porta que já esteja sendo usada por um serviço existente. Você pode obtê-los executando:

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

5: Finalmente, você não deve usar uma porta usada por um serviço atualmente desativado, mas que pode estar ativado no futuro. Esta é a parte mais complicada de cumprir ...

jlliagre
fonte
10

Você pode usar 1-65.535 portas em seu sistema, nas quais os primeiros 1024 são privilegiados como root.

Então, em vez de encontrar a porta livre, você pode obter a lista de portas usadas usando o comando abaixo

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

Em seguida, você pode usar qualquer porta 1-65535, exceto essas portas.

Vaibhav Panmand
fonte
2
Algumas das netstatopções usadas não são suportadas pela netstatimplementação do Solaris .
Jlliagre