Estou procurando um comando ou script que retorne uma porta não utilizada no meu sistema Linux Ubuntu. Eu procurei na internet e a única coisa que encontro é sobre a porta usada / Listen com o comando nestat. Aparentemente, algo com o comando netstat funcionará, mas não sabe exatamente o que. Alguma idéia de como?
Obrigado.
linux
command-line
port
user2429082
fonte
fonte
Respostas:
netstat -lat
fornece a lista completa de portas de escuta e estabelecidas .Quando uma porta não está em nenhum desses estados, não existe para o sistema, portanto, você não encontrará um comando que mostre a lista de portas não utilizadas.
Lembre-se de que existem 65535 portas; portanto, qualquer coisa que não
netstat -lat
esteja ativada é uma porta não utilizada.O script bash a seguir fará uma varredura simples das portas tcp e informará quais estão abertas e quais estão fechadas :
Se você salvá-lo como portscan.sh , ele deve ser executado como ./portscan.sh IP first_port last_port , por exemplo:
./portscan 127.0.0.1 20 135
varrerá o equipamento local das portas 20 a 135fonte
Ruby 2.x (uma linha):
ruby -e 'require "socket"; puts Addrinfo.tcp("", 0).bind {|s| s.local_address.ip_port }'
Na minha máquina agora que imprimia:
Uma chamada subsequente impressa:
Essa técnica faz com que o usuário atual solicite uma porta não utilizada (vincule à porta "0") e imprima o número da porta que o sistema operacional forneceu. E como o usuário atual é quem pergunta, as portas abaixo de 1024 não serão retornadas (a menos que o usuário atual seja root).
Crédito onde o crédito é devido - esta solução vem de um comentário de Franklin Yu em unix.stackexchange.com's Qual é a maneira mais fácil de encontrar uma porta local não utilizada?
fonte
Script bash curto que gera aleatoriamente um número entre 1025 e 60000 e faz loops até que esse número não seja encontrado na lista de portas usadas. Esta é uma solução rápida e suja, com viés para portas maiores:
fonte
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):
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 sobrecomm
aqui .O primeiro arquivo é o intervalo de portas que podemos selecionar.
seq
produz uma sequência classificada de números de$FROM
a$TO
. O resultado é canalizado paracomm
o primeiro arquivo usando a substituição do processo .O segundo arquivo é a lista ordenada de portas, que obtemos chamando o
ss
comando (com-t
as portas TCP intencionados,-a
que significa que todos - estabelecida e ouvir - e-n
numérico - não tentar resolver, por exemplo,22
assh
). Em seguida, escolhemos apenas a quarta coluna comawk
, que contém o endereço local e a porta. Usamoscut
para dividir endereço e porta com o:
delimitador e manter apenas o último (-f2
).ss
Também produzimos um cabeçalho, do qual nos livramos degrep
ping para seqüências não vazias de números que não são maiores que 5. Em seguida, cumprimoscomm
o requisito desort
digitando numerically (-n
) e eliminando duplicatasuniq
.Agora temos uma lista ordenada de portas abertas, que podemos
shuf
fle para, em seguida, pegar o primeiro"$HOWMANY"
aqueles comhead -n
.Exemplo
Pegue as três portas abertas aleatórias no intervalo privado (49152-65535)
poderia retornar por exemplo
Notas
-t
com-u
noss
para obter as portas UDP gratuitos vez.shuf
se você não estiver interessado em pegar uma porta aleatóriafonte
Eu precisava encontrar apenas uma única porta não utilizada aleatória e não imprimir uma lista delas. Aqui está a minha solução bash.
E use-o fornecendo-o
fonte
Talvez outra solução baseada na lista de portas usadas:
O
netstat
comando gera uma lista de todas as portas abertas. Osed
comando extrai os números de porta que estão em uso e a construçãosort
/uniq
retorna uma lista uniq de portas abertas. O segundo passo é gerar uma lista de números de portas começando em 1 e terminando em 1000 (portas reservadas) e uma lista adicional de todos os números de portas que começam em 1 até 65535. A lista final contém todas as portas disponíveis apenas uma vez e asuniq -u
extrairá . Por último, oshuf -n 1
selecionará uma porta aleatória da lista completa de portas disponíveis. No entanto, haverá uma condição de corrida, antes que se consiga reservar o porto.fonte
Eu precisava encontrar a próxima porta aberta a partir de um número de porta; Aqui está minha tentativa de usar a solução @Taras.
fonte
Se 54321 é sua porta, execute:
Algumas variações do uso do netstat podem ser encontradas aqui .
fonte