Usando printf com netcat

0

Eu fiz um pequeno comando para enviar uma mensagem TCP para uma "IP-relay-unit" que pode alternar as saídas.

printf "setstate,1:1,1\r" | nc ip.ip.ip.ip port

Isso realmente funciona bem, às vezes. Como o printf funcionava tanto no linux quanto no mac, achei que tinha que fazer alguma coisa com o netcat. Eu observei que usar o -v no netcat melhorou a quantidade de vezes que deu certo, mas isso parece uma solução muito chata.

Mais tarde eu encontrei a opção nc -i, para adicionar um tempo limite de 1 segundo, que ainda não causou um erro (no Linux ou OSX), embora diminua o tempo de execução e ainda não é um 100 % de correção limpa.

A página man na verdade mostra que a canalização para o comando nc pode ser feita, não menciona nenhuma possíveis condições de corrida.

Esse comportamento é esperado? E existe uma maneira limpa de consertar isso? (como "--only-send-when-connection-is-complete") ou posso verificar se é uma condição de corrida?

    
por Paul 30.03.2017 / 12:00

1 resposta

1

Você pode verificar se há uma conexão ativa com:

nc -v <HOST> <PORT> </dev/null; echo $?

Se o comando acima retornar o valor 0 , a conexão será bem-sucedida e você poderá printf da sua mensagem, caso contrário (o valor é 1 ), você saberá que sua conexão foi recusada ou cronometrada fora etc.

    
por 30.03.2017 / 14:42