One-liner
Eu montei um belo one-liner que serve rapidamente a esse objetivo, permitindo pegar um número arbitrário de portas em um intervalo arbitrário (aqui está dividido em 4 linhas para facilitar a leitura):
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"
Linha por linha
commé um utilitário que compara linhas classificadas em dois arquivos. Ele produz três colunas: linhas que aparecem apenas no primeiro arquivo, linhas que aparecem apenas no segundo arquivo e linhas comuns. Ao especificar -23, suprimimos as últimas colunas e mantemos apenas a primeira. Podemos usar isso para obter a diferença de dois conjuntos, expressos como uma sequência de linhas de texto. Eu aprendi sobre comm aqui .
O primeiro arquivo é o intervalo de portas que podemos selecionar. seqproduz uma sequência classificada de números de $FROMa $TO. O resultado é canalizado para commo primeiro arquivo usando a substituição do processo .
O segundo arquivo é a lista ordenada de portas, que obtemos chamando o sscomando (com -tas portas TCP intencionados, -aque significa que todos - estabelecida e ouvir - e -nnumérico - não tentar resolver, por exemplo, 22a ssh). Em seguida, escolhemos apenas a quarta coluna com awk, que contém o endereço local e a porta. Usamos cutpara dividir endereço e porta com o :delimitador e manter apenas o último ( -f2). ssTambém produzimos um cabeçalho, do qual nos livramos de grepping para seqüências não vazias de números que não são maiores que 5. Em seguida, cumprimos commo requisito de sortdigitando numerically ( -n) e eliminando duplicatas uniq.
Agora temos uma lista ordenada de portas abertas, que podemos shuffle para, em seguida, pegar o primeiro "$HOWMANY"aqueles com head -n.
Exemplo
Pegue as três portas abertas aleatórias no intervalo privado (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
poderia retornar por exemplo
54930
57937
51399
Notas
- mudar
-tcom -uno sspara obter as portas UDP gratuitos vez.
- cair
shufse você não estiver interessado em pegar uma porta aleatória