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.