Je recherche une commande ou un script qui renvoie un port inutilisé sur mon système Linux Ubuntu. J'ai regardé sur Internet et la seule chose que je trouve concerne le port utilisé / Listen avec la commande nestat. Apparemment, quelque chose avec la commande netstat fonctionnera mais je ne sais pas quoi au juste. Une idée comment?
Merci.
linux
command-line
port
utilisateur2429082
la source
la source
Réponses:
netstat -lat
donne la liste complète des ports d' écoute et établis .Lorsqu'un port n'est pas sur l'un de ces états, il n'existe pas pour le système, vous ne trouverez donc pas de commande qui affiche la liste des ports inutilisés.
N'oubliez pas qu'il existe 65535 ports. Par conséquent, tout ce qui ne fonctionne pas
netstat -lat
est un port inutilisé.Le script bash suivant effectuera une analyse simple des ports TCP et vous indiquera ceux qui sont ouverts et ceux qui sont fermés :
Si vous l'enregistrez en tant que portscan.sh, vous devez l'exécuter en tant que ./portscan.sh IP first_port last_port , par exemple:
./portscan 127.0.0.1 20 135
analysera l'équipement local des ports 20 à 135la source
Ruby 2.x (une doublure):
ruby -e 'require "socket"; puts Addrinfo.tcp("", 0).bind {|s| s.local_address.ip_port }'
Sur ma machine en ce moment qui a imprimé:
Une invocation ultérieure imprimée:
Cette technique oblige l'utilisateur actuel à demander un port inutilisé (liaison au port "0"), puis à imprimer le numéro de port fourni par le système d'exploitation. Et puisque l'utilisateur actuel est celui qui le demande, les ports inférieurs à 1024 ne seront pas retournés (sauf si l'utilisateur actuel = root).
Crédit pour lequel le crédit est dû - cette solution provient d'un commentaire de Franklin Yu sur unix.stackexchange.com's Quel est le moyen le plus simple de trouver un port local inutilisé?
la source
Bon mot
J'ai mis en place une belle ligne qui répond rapidement au but recherché, permettant de saisir un nombre arbitraire de ports dans une plage quelconque (ici, il est divisé en 4 lignes pour la lisibilité):
Ligne par ligne
comm
est un utilitaire qui compare les lignes triées dans deux fichiers. Il génère trois colonnes: les lignes qui apparaissent uniquement dans le premier fichier, les lignes qui apparaissent uniquement dans le second et les lignes communes. En spécifiant,-23
nous supprimons ces dernières colonnes et ne conservons que la première. Nous pouvons utiliser ceci pour obtenir la différence de deux ensembles, exprimés sous forme d'une séquence de lignes de texte. J'ai appris à propos decomm
ici .Le premier fichier est la gamme de ports que nous pouvons sélectionner.
seq
produit une séquence triée de nombres allant de$FROM
à$TO
. Le résultat est dirigé verscomm
le premier fichier utilisant la substitution de processus .Le deuxième fichier est la liste triée des ports, obtenue en appelant la
ss
commande (ce qui-t
signifie ports TCP,-a
signifiant tout établi et à l'écoute - et-n
numérique - n'essayez pas de résoudre, par exemple,22
enssh
). Nous sélectionnons ensuite uniquement la quatrième colonneawk
contenant l’adresse locale et le port. Nous avons l'habitudecut
de scinder l'adresse et le port avec le:
délimiteur et de ne garder que celui-ci (-f2
).ss
affiche également un en-tête, que nous éliminons pargrep
ping pour les séquences non vides de nombres ne dépassant pas 5. Nous nous conformons ensuite àcomm
l'exigence de ensort
insérant numériquement (-n
) et en supprimant les doublonsuniq
.Maintenant , nous avons une liste triée des ports ouverts, que nous pouvons
shuf
FLE pour saisir ensuite les premiers"$HOWMANY"
ceux avechead -n
.Exemple
Saisissez les trois ports ouverts aléatoires dans la plage privée (49152-65535)
pourrait revenir par exemple
Remarques
-t
avec-u
dansss
pour obtenir les ports UDP libres à la place.shuf
si vous n'êtes pas intéressé par un portage aléatoirela source
Short bash script qui génère de manière aléatoire un nombre compris entre 1025 et 60000 et boucle jusqu'à ce que ce nombre ne soit plus dans la liste des ports utilisés. Il s’agit d’une solution rapide et malpropre qui privilégie les grands ports:
la source
Je devais trouver juste un seul port inutilisé au hasard et ne pas en imprimer une liste. Voici ma solution bash.
Et utilisez-le en le recherchant
la source
Peut-être une autre solution basée sur la liste des ports utilisés:
La
netstat
commande génère une liste de tous les ports ouverts. Lased
commande extrait les numéros de port en cours d'utilisation et la constructionsort
/uniq
renvoie une liste uniq de ports ouverts. La deuxième étape consiste à générer une liste de numéros de ports commençant par 1 et se terminant par 1000 (ports réservés) et une liste supplémentaire de tous les numéros de ports commençant par 1 à 65535. La liste finale contient tous les ports disponibles une seule fois etuniq -u
sera extraite par ceux-ci. . Enfin, leshuf -n 1
chercheur choisira un port aléatoire dans la liste complète des ports disponibles. Néanmoins, il y aura une condition de concurrence, avant de pouvoir réserver le port.la source
Si 54321 est votre port, exécutez:
Certaines variantes d'utilisation de netstat peuvent être trouvées ici .
la source