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é):
comm -23 \
<(seq "$FROM" "$TO") \
<(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep '[0-9]\{1,5\}' | sort -n | uniq) \
| shuf | head -n "$HOWMANY"
Ligne par ligne
commest 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, -23nous 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 de comm ici .
Le premier fichier est la gamme de ports que nous pouvons sélectionner. seqproduit une séquence triée de nombres allant de $FROMà $TO. Le résultat est dirigé vers commle premier fichier utilisant la substitution de processus .
Le deuxième fichier est la liste triée des ports, obtenue en appelant la sscommande (ce qui -tsignifie ports TCP, -asignifiant tout établi et à l'écoute - et -nnumérique - n'essayez pas de résoudre, par exemple, 22en ssh). Nous sélectionnons ensuite uniquement la quatrième colonne awkcontenant l’adresse locale et le port. Nous avons l'habitude cutde scinder l'adresse et le port avec le :délimiteur et de ne garder que celui-ci ( -f2). ssaffiche également un en-tête, que nous éliminons par grepping pour les séquences non vides de nombres ne dépassant pas 5. Nous nous conformons ensuite à comml'exigence de en sortinsérant numériquement ( -n) et en supprimant les doublons uniq.
Maintenant , nous avons une liste triée des ports ouverts, que nous pouvons shufFLE pour saisir ensuite les premiers "$HOWMANY"ceux avec head -n.
Exemple
Saisissez les trois ports ouverts aléatoires dans la plage privée (49152-65535)
comm -23 <(seq 49152 65535) <(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep "[0-9]\{1,5\}" | sort | uniq) | shuf | head -n 3
pourrait revenir par exemple
54930
57937
51399
Remarques
- passer
-tavec -udans sspour obtenir les ports UDP libres à la place.
- déposer
shufsi vous n'êtes pas intéressé par un portage aléatoire