Testando a porta TCP remota usando o telnet executando um comando de uma linha

8

Eu tenho várias caixas de linux com um conjunto muito limitado de comandos e espaço em disco. Mas tem o comando telnet .

Eu me conecto remotamente a cada um desses probes (programaticamente) e emito um comando linux de linha através do SSH.

Eu preciso executar um único comando para conectar a uma máquina específica, usando telnet, e, em seguida, desconectar imediatamente .

Eu posso fazer tudo isso, mas a parte de desconexão imediatamente . O Telnet abre algum tipo de console ou terminal e não consigo descobrir um comando de uma linha para executar o comando telnet e depois desconectar imediatamente.

Se eu fizer isso, posso facilmente analisar a saída textual de mensagens de erro por não conseguir se conectar à máquina na porta especificada e é exatamente isso que estou procurando.

Então, como posso executar um comando de uma linha para conectar a uma máquina usando telnet e desconectar depois?

    
por Muhammad Gelbana 13.08.2013 / 12:24

6 respostas

19

Você deve conseguir canalizar o comando exit para STDIN em telnet . Experimente:

echo exit | telnet {site} {port}

e veja se isso funciona. (parece funcionar no meu servidor web, mas YMMV).

    
por 13.08.2013 / 19:11
8

O método mais simples e fácil é dado abaixo.

 sleep <n> | telnet <server> <port>

n - O tempo de espera em segundos antes da saída automática. Pode ser fracionário como 0,5. Observe que alguma saída necessária pode não ser retornada no tempo de espera especificado. Então, podemos precisar aumentar de acordo.

server - O IP ou nome do host do servidor de destino.

port - número da porta de serviço de destino.

Você também pode redirecionar a saída para um arquivo como este,

sleep 1 | telnet <server> <port> > output.log
    
por 13.06.2014 / 14:18
3

Acho melhor ferramenta para enviar comandos diretamente e apenas obter saída seria netcat. É apenas uma ferramenta simples, mas poderosa, para colocar comandos através de portas. Você pode ver o exemplo de uso nessa pergunta de superusuário: link - o asker dá um exemplo de trabalho no qual a conexão é fechada após alguns segundos.

E se você quiser apenas testar a conectividade, use isto: link

    
por 13.08.2013 / 13:41
1

No meu caso, isso funciona. (CentOS7):

while read host port; do
r=$(bash -c 'exec 3<> /dev/tcp/'$host'/'$port';echo $?' 2>/dev/null)
if [ "$r" = "0" ]; then
     echo "$host $port is open"
else
     echo "$host $port is closed"
     exit 1 # To force fail result in ShellScript
fi
done

:) Atenciosamente

    
por 23.01.2017 / 22:34
0

Esta é outra versão do resposta acima que o faz agir um pouco mais como a sintaxe de telnet" normal ". Se você gosta da minha resposta, por favor, dê um upvote não para isso, mas para o original.

#!/bin/bash
if [ "$2" == "" ]; then
 echo "Syntax: $0 <host> <port>"
 exit;
fi

host=$1
port=$2

r=$(bash -c 'exec 3<> /dev/tcp/'$host'/'$port';echo $?' 2>/dev/null)
if [ "$r" = "0" ]; then
     echo "$host $port is open"
else
     echo "$host $port is closed"
     exit 1 # To force fail result in ShellScript
fi
    
por 22.11.2017 / 17:42
0

Aqui está a solução que encontrei na Internet:

( echo open 127.0.0.1 23
sleep 5
echo your_login
sleep 5
echo your_password
sleep 5
echo hostname
sleep 5
echo exit ) | telnet

Funciona para mim no SunOS & HP-UX

    
por 24.10.2018 / 23:05

Tags