desativa o buffer para 'hping' no OpenBSD

2

Parece que a saída de hping é totalmente armazenada em buffer quando canalizada para perl para processamento adicional de linha por linha, então piping hping para perl não funciona.

hping --icmp-ts example.ca | perl -ne 'if (/Originate=(\d+) Receive=(\d+) Transmit=(\d+)/) { ($o, $r, $t) = ($1, $2, $3); } if (/tsrtt=(\d+)/) { print $r - $o, " ", $o + $1 - $t, "\n"; }'

Como eu mudo o hping de estar totalmente em buffer para ser line buffered quando canalizado?

Não é uma duplicata da pergunta a seguir, já que nenhuma solução funciona na base do OpenBSD:

Desativar o buffer no cachimbo

    
por cnst 24.11.2013 / 09:29

2 respostas

4

Existem duas soluções comuns , stdbuf e unbuffer .

stdbuf é do GNU coreutils, foi adicionado na versão 7.5 em 2009, então chegou a todos os atuais sistemas Linux não embarcados além do CentOS 5. Ele também está no FreeBSD desde a versão 8.4. Nenhuma outra variante unix a adotou ainda que eu saiba, e em particular não o OpenBSD a partir de 5.4.

unbuffer é um script Esperar e, como tal, está disponível em qualquer lugar que Expect esteja disponível, o que inclui praticamente qualquer unix. Todas as variantes do BSD o possuem em sua coleção de portas, no pacote expert .

Portanto, instale o pacote expect e execute unbuffer hping … | perl …

    
por 24.11.2013 / 22:39
1

Outra opção pode ser usar socat :

# cf. http://unix.stackexchange.com/a/25377
socat EXEC:'hping --icmp-ts example.ca',pty,ctty STDIO | perl -ne 'if ...
    
por 25.11.2013 / 16:47