Ontem eu perguntei a uma pergunta sobre a criação de um arquivo em um soquete UDP no bash.
A solução que surgiu foi netcat -c -w 1 -v -u -s 127.0.0.1 239.255.0.1 30001 < test.txt
. Isso funcionou no sentido de que enviou os pacotes, mas há um problema.
O arquivo de origem não é estritamente um arquivo de texto. Na verdade, é um arquivo binário - o conteúdo é principalmente texto, com caracteres não imprimíveis incorporados e sem \n
lineendings. Em vez disso, o caractere de controle ^C
(0x03) é usado como um delimitador de linha.
Quando netcat
estava enviando pacotes, ele enviava o máximo possível em um único quadro UDP. Mas quero que ele envie um quadro UDP por ^C
-dimimited mesasge no arquivo de origem.
Por exemplo, se meu arquivo consistir em:
foo^Cbar^Cbaz^C
usando netcat
resultaria em um quadro UDP sendo enviado. O que eu quero é enviar 3 mensagens:
-
foo^C
-
bar^C
-
baz^C
Existe uma maneira de realizar isso?
Eu tentei várias soluções possíveis, mas nada funcionou.
Por exemplo, tentei sed
ding o arquivo de origem para substituir o ^C
por ^C\n
, mas isso não teve efeito:
sed 's/^C/^C\ncat test.txt > /dev/udp/239.255.0.2/30002
/g' test.txt | netcat -n -vv -c -w 1 -v -u -s 127.0.0.1 239.255.0.2 30002
Eu também tentei catalogar os arquivos para /dev/udp/
em vez de usar netcat
, mas os resultados foram semelhantes.
foo^Cbar^Cbaz^C
Por fim, tentei usar awk
para imprimir uma linha por vez e redirecioná-la para /dev/udp
, mas os resultados foram realmente os mesmos.
Parece que ambos netcat
e cat > /dev/udp
armazenam a entrada em buffer até que ela tenha um quadro completo e, em seguida, enviem o quadro. Não é isso que eu quero.
Posso descarregar o buffer do udp ou, de alguma outra forma, enviar uma mensagem UDP por mensagem delimitada por C no arquivo de origem?