Para tcp, apenas verificando $?
. Se a conexão falhou, $?
não será 0
:
$ >/dev/tcp/google.com/81
bash: connect: Network is unreachable
bash: /dev/tcp/google.com/81: Network is unreachable
$ echo $?
1
Demora algum tempo até que bash
perceba que a conexão falhou. Você pode usar o tempo limite para acionar bash
:
$ timeout 1 bash -c '>/dev/tcp/google.com/80' &&
echo Port open ||
echo Port close
Port open
O teste da porta do udp é mais complexo.
Estritamente falando, não existe um estado open (claro, o protocolo udp é stateless ) com o udp. Existem apenas dois estados com o udp, ouvindo ou não . Se o estado não for , você receberá um Destino do ICMP Inacessível .
Infelizmente, o firewall ou o roteador costumam remover esses pacotes ICMP, então você não tem certeza do estado da porta udp.