Come ottenere l'elenco di porte libere in un server Unix


15

Ho l'obbligo di sapere quali porte del mio dispositivo Solaris sono libere da utilizzare per qualsiasi tipo di comunicazione di rete.

Ho provato il netstat -acomando. Ma le informazioni restituite non hanno dato un risultato convincente di quali porte posso usare per una nuova applicazione che sto scrivendo. Apprezzo l'assistenza fornita al riguardo.


Entro quale intervallo numerico? Ci sono sempre porte effimere in uso e queste cambiano costantemente.
mdpc,

Che dire del risultato netstat -annon è stato convincente per te? netstatdovrebbe elencare tutto ciò che viene utilizzato. Tutto il resto (normalmente molte migliaia di porte!) È disponibile.
Celada,

1
Inoltre, può essere utile sapere perché sono necessarie queste informazioni. Quando si associa un socket, è sempre possibile scegliere di lasciare che il kernel assegni una porta per te, quindi se non ti interessa quale porta ottieni finché ne ottieni una, non è necessario trovarne una manualmente.
Celada,

Risposte:


15

1: non è necessario utilizzare porte anonime (ovvero porte effimere) per implementare un servizio UDP o TCP.

Per impostazione predefinita, queste porte sono nell'intervallo 32768 - 65535.

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

2: A meno che il servizio non sia in esecuzione come root o non disponga del privilegio RBAC richiesto, non è necessario utilizzare una porta privilegiata. Per impostazione predefinita, tutte le porte da 1 a 1024 sono privilegiate:

# ndd /dev/tcp tcp_smallest_nonpriv_port
1024

3: A meno che tu non sappia cosa stai facendo, non dovresti usare una porta ben nota che dovrebbe eseguire un servizio diverso da quello che stai pianificando. Le porte ben note sono elencate in /etc/services. per esempio:

# 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: non utilizzare una porta già utilizzata da un servizio esistente. Puoi ottenerli eseguendo:

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

5: Infine, non dovresti usare una porta utilizzata da un servizio attualmente disabilitato ma che potrebbe essere abilitato in futuro. Questa è la parte più difficile da rispettare ...


10

È possibile utilizzare 1-65.535 porte sul sistema in cui le prime 1024 hanno il privilegio di root.

Quindi, invece di trovare la porta libera, puoi ottenere l'elenco delle porte usate usando il comando seguente

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

Quindi è possibile utilizzare qualsiasi porta da 1-65535 ad eccezione di quelle porte.


2
Alcune delle netstatopzioni utilizzate non sono supportate dall'implementazione di Solaris netstat.
jlliagre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.