Script testar telnet entre servidores e várias portas [RESOLVIDO]

1. Script testar telnet entre servidores e várias portas [RESOLVIDO]

Arthur Costa
FatherMaj

(usa Linux Mint)

Enviado em 26/08/2019 - 23:55h

Boa noite!
Estou com um problema para criar um script para automatizar o teste de telnet entre servidores.
Preciso fazer o seguinte:

Tenho o Servidor A e preciso saber se ele fecha telnet com o Servidor B nas portas, por exemplo 3000, 3001 e 3002.

Procurei na internet e achei que com comando "nc" (Netcat) consigo verificar se fecha comunicação entre eles.
Então fiz um script para testar a comunicação entre 2 servidores em vários portas.
Porém o resultado do script vem com alguns problemas que não consegui solucionar.
1. Era para trazer o nome do servidor e o respectivo teste nas portas, porém está trazendo mais de uma vez o nome do servidor;
2. Repetiu a porta no resultado, não executa todas na ordem;

Não sei se existe um jeito mais fácil para realizar esse teste de telnet, ou se dessa forma que criei está correto.
Se possível, gostaria de uma ajuda para solucionar isso. Obrigado!


Segue script:

#!/bin/bash
clear
ip=("127.0.0.1" "127.0.0.2")
server_name=("ServerA" "ServerB")
porta=("3000" "3001" "3002")

for ip in "${ip[@]}"
do
echo -e "\n========================================================\n"
for server_name in "${server_name[@]}"
do
echo $server_name
done
for porta in "${porta[@]}"
do
nc -zvw3 $ip $porta
done
echo -e "\n========================================================\n"
done

Resultado do script:

========================================================

ServerA
ServerB
nc: connect to 127.0.0.1 port 3000 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 3001 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 3002 (tcp) failed: Connection refused

========================================================


========================================================

ServerB
ServerB
nc: connect to 127.0.0.2 port 3002 (tcp) failed: Connection refused
nc: connect to 127.0.0.2 port 3001 (tcp) failed: Connection refused
nc: connect to 127.0.0.2 port 3002 (tcp) failed: Connection refused

========================================================


CORRETO PARA TRAZER:
Apenas um nome do servidor referente ao IP e todas as portas sem repetir.

ServerB
nc: connect to 127.0.0.2 port 3000 (tcp) failed: Connection refused
nc: connect to 127.0.0.2 port 3001 (tcp) failed: Connection refused
nc: connect to 127.0.0.2 port 3002 (tcp) failed: Connection refused


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 27/08/2019 - 13:40h

Não utilize o mesmo nome de variável que o array para varrer o próprio array.
#ERRADO (parecido como que você fez)
X=(a b)
for X in "${X[@]}"; do
echo $X
# neste contexto, $X é sinônimo de ${X[0]}::ou seja, você altera o primeiro elemento do array enquanto vai varrendo os demais.
done
# Agora X vale (b b)

#Correto
X=(a b)
for y in "${X[@]}"; do
echo $y
done


Quanto a imprimir o nome do servidor duas vezes, foi você que pediu para fazer isso. Se não quer que isso aconteça, remova o for que cerca a impressão do nome do servidor.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)