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" | sort) \
<(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep '[0-9]\{1,5\}' | sort -u) \
| shuf | head -n "$HOWMANY"
Linea per linea
commè un'utilità che confronta le righe in due file che devono apparire in ordine alfabetico. 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 ordinato alfabeticamente (anziché numericamente) e convogliato commcome primo file usando 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 liberiamo grepeseguendo il ping per sequenze di numeri non vuote che non sono più lunghe di 5. Quindi rispettiamo commil requisito sorting senza duplicati -u.
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 | sort) <(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep "[0-9]\{1,5\}" | sort -u) | shuf | head -n 3
potrebbe tornare ad esempio
54930
57937
51399
Appunti
- passare
-tcon -uin ssper ottenere invece le porte UDP gratuite.
- sostituirlo
shufcon sort -nse si preferisce ottenere le porte disponibili ordinate numericamente anziché casualmente
-na netstat e un grep più selettivo). Il modo per farlo è provare ad aprire una porta in qualsiasi modalità sia necessaria e provarne un'altra se non è disponibile.