One-liner
Ho messo insieme un bel one-liner che serve rapidamente allo scopo, consentendo di afferrare un numero arbitrario di porte in un intervallo arbitrario (qui è diviso in 4 righe per la leggibilità):
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"
Linea per linea
commè un'utilità che confronta le righe ordinate in due file. Produce tre colonne: linee che appaiono solo nel primo file, linee che appaiono solo nel secondo e linee comuni. Specificando -23sopprimiamo le ultime colonne e conserviamo solo la prima. Possiamo usarlo per ottenere la differenza di due insiemi, espressa come una sequenza di righe di testo. Ho imparato comm qui .
Il primo file è l'intervallo di porte che possiamo selezionare. seqproduce una sequenza ordinata di numeri da $FROMa $TO. Il risultato viene reindirizzato al commprimo file utilizzando la sostituzione del processo .
Il secondo file è l'elenco ordinato delle porte, che otteniamo chiamando il sscomando (con -tsignificato porte TCP, che -asignifica tutto - stabilito e in ascolto - e -nnumerico - non tentare di risolvere, diciamo, 22a ssh). Selezioniamo quindi solo la quarta colonna con awk, che contiene l'indirizzo e la porta locali. Usiamo cutper dividere indirizzo e porta con il :delimitatore e mantenere solo quest'ultimo ( -f2). ssemette anche un'intestazione, di cui ci sbarazziamo tramite grepping per sequenze di numeri non vuote che non sono più lunghe di 5. Rispettiamo quindi commil requisito sortinserendo numericamente ( -n) e sbarazzandoci dei duplicati uniq.
Ora abbiamo un elenco ordinato di porte aperte, che possiamo shufFLE per poi afferrare i primi "$HOWMANY"quelli con head -n.
Esempio
Prendi le tre porte aperte casuali nell'area privata (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
potrebbe tornare ad esempio
54930
57937
51399
Gli appunti
- passare
-tcon -uin ssper ottenere invece le porte UDP gratuite.
- rilasciare
shufse non sei interessato ad afferrare una porta casuale