Preciso de uma ferramenta que me diga se uma conexão com um host está aberta ou não - sem dados para enviar ou receber. Apenas se a conexão for bem-sucedida.
Hoje eu uso telnet.
$ telnet myhost myport
Trying 192.168.1.99...
Connected to myhost.
Escape character is '^]'.
^[^]
telnet> quit
Connection closed.
Mas preciso ter uma entrada manual lá. ^] e depois também sair.
Preciso verificar vários hosts e isso é muita coisa para fazer.
Existe alguma ferramenta que faça isso?
Caso contrário, preciso escrever 15 linhas em Perl. Tudo bem, mas eu preferiria uma ferramenta existente.
O Bash tem redirecionamento nativo que pode verificar portas abertas
ou você pode usar nc(1):
Você também pode usar o telnet programaticamente, canalizando-o para algo como grep:
Com esses scripts você pode verificar se um host está respondendo em uma determinada porta com:
/dev/tcp integrado do bash .
Você pode usar endereço IP ou domínios (nomes de host).
Script 1 Porta Única
Script 2 Faixa de portas
Script 3 Porta 1-65535
Uma ferramenta existente que faz isso é
nmap
um scanner de porta:-sT
indica uma varredura de porta TCP - ele fará SYN, ACK, SYN/ACK e então RST a conexão.-p 22
indica que a porta 22 será testada.Ele pode escanear IPs individuais, intervalos de IP (como mostrado acima), blocos IP CIDR ou qualquer combinação desses três.
Ele também suporta XML e saída compatível com grep, como:
Outra boa ferramenta existente é o fping
fping é um programa como o ping que usa a solicitação de eco do Internet Control Message Protocol para determinar se um host de destino está respondendo.
O fping difere do ping porque você pode especificar qualquer número de alvos na linha de comando, ou especificar um arquivo contendo as listas de alvos para executar o ping, ou gerar um intervalo de uma sub-rede na linha de comando (a forma mais comum que geralmente uso).
Por exemplo:
O fping pode ser instalado a partir de repositórios padrão para a maioria das distros.