Comment obtenir la liste des ports gratuits sur un serveur Unix

15

J'ai besoin de savoir quels ports de ma machine Solaris sont libres d'être utilisés pour tout type de communication réseau.

J'ai essayé la netstat -acommande. Mais les informations retournées n'ont pas donné un résultat convaincant dont tous les ports que je peux utiliser pour une nouvelle application que j'écris. Appréciez toute aide fournie à cet égard.

PSam
la source
Dans quelle plage numérique? Il y a toujours des ports éphémères utilisés et ceux-ci changent constamment.
mdpc
Qu'en est-il du résultat qui netstat -anne vous a pas convaincu? netstatdevrait répertorier tout ce qui est utilisé. Tout le reste (normalement plusieurs milliers de ports!) Est disponible.
Celada
1
En outre, il peut être utile de savoir pourquoi vous avez besoin de ces informations. Lors de la liaison d'un socket, vous pouvez toujours choisir de laisser le noyau vous attribuer un port, donc si vous ne vous souciez pas du port que vous obtenez tant que vous en obtenez un, alors vous n'avez pas besoin d'en trouver un manuellement.
Celada

Réponses:

15

1: Vous ne devez pas utiliser de ports anonymes (également appelés ports éphémères) pour implémenter un service UDP ou TCP.

Par défaut, ces ports sont compris entre 32 768 et 65 535.

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

2: À moins que votre service ne s'exécute en tant que root ou ne dispose du privilège RBAC requis, vous ne devez pas utiliser de port privilégié. Par défaut, tous les ports de 1 à 1024 sont privilégiés:

# ndd /dev/tcp tcp_smallest_nonpriv_port
1024

3: À moins que vous sachiez ce que vous faites, vous ne devez pas utiliser un port bien connu qui devrait exécuter un service différent de celui que vous envisagez. Les ports bien connus sont répertoriés dans /etc/services. par exemple:

# 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: Vous ne devez pas utiliser un port déjà utilisé par un service existant. Vous pouvez les obtenir en exécutant:

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

5: Enfin, vous ne devez pas utiliser un port utilisé par un service actuellement désactivé mais qui pourrait être activé à l'avenir. C'est la partie la plus délicate à respecter ...

jlliagre
la source
10

Vous pouvez utiliser 1 à 65 535 ports sur votre système, dont les 1 024 premiers sont privilégiés root.

Ainsi, au lieu de trouver le port libre, vous pouvez obtenir la liste des ports utilisés en utilisant la commande ci-dessous

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

Ensuite, vous pouvez utiliser n'importe quel port de 1-65535 à l'exception de ces ports.

Vaibhav Panmand
la source
2
Certaines des netstatoptions que vous utilisez ne sont pas prises en charge par l' netstatimplémentation de Solaris .
jlliagre