cria um UDP para ponte serial com socat

2

Eu tenho um software que transmite dados por uma conexão UDP. No entanto, em nosso sistema, podemos transmitir dados somente por uma porta serial. Eu estava pensando em fazer uma ponte entre um UDP e serial usando socat . No entanto, eu não estou familiarizado com isso muito bem. Tentei passar por alguns tutoriais, mas eles não foram úteis. Também tentei ler o manual, mas também não foi útil.

Eu encontrei um exemplo aqui e adaptei-o às minhas necessidades. Aqui está o que eu tenho no meu sistema embarcado (tem um IP estático)

$ socat -v udp4-datagram:172.24.176.207:54321 \
   open:/dev/ttyS0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl

e aqui está o que eu tenho na minha máquina host (tem um IP estático também)

$ socat -v udp4-datagram:172.24.176.116:54321 \
   open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl

Você teria que me desculpar, mas eu sou analfabeto em socat e networking em geral.

Vários comentários e perguntas.

  1. O que significa open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl ? Onde eu encontraria descrição disso? Eu entendo /dev/ttyUSB0 e b115200 , mas o que é o resto?
  2. Em um sistema incorporado (172.24.176.207), executei um netcat server:

    $ nc -ul 172.24.176.207 54321
    

    e na máquina host enviei um pacote UDP:

    $ echo -n "hello" | nc -4u -w1 172.24.176.207 54321
    

    mas nada aconteceu. O que estou perdendo?

por flashburn 07.07.2018 / 03:47

1 resposta

2

configuração do servidor de eco

Eu usei socat para configurar um servidor de eco UDP assim:

echo server
$ socat UDP4-LISTEN:54321,fork EXEC:cat
cliente de eco
$ echo -n "hello" | nc -4u -w1 192.168.56.101 54321
hello

ponta do tcpdump

Ao depurar isso, eu gosto de monitorar a rede, então vou rodar isso para monitorar o 'echo server'

$ tcpdump -i any -vnn port 54321
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
22:33:21.280053 IP (tos 0x0, ttl 64, id 8684, offset 0, flags [none], proto UDP (17), length 33)
    192.168.56.1.62439 > 192.168.56.101.54321: UDP, length 5
22:33:21.282140 IP (tos 0x0, ttl 64, id 40761, offset 0, flags [DF], proto UDP (17), length 33)
    192.168.56.101.54321 > 192.168.56.1.62439: UDP, length 5

NOTA: Esta dica acima pode ser strongmente modificada para depurar qualquer coisa que esteja acontecendo entre o seu servidor socat / nc e seus clientes.

Entendendo os argumentos de socat

Eu também acho a configuração de socat exaustiva às vezes. Mas, como qualquer outra coisa, é mais fácil de entender se você dividir em pedaços menores.

$ socat -v udp4-datagram:172.24.176.116:54321 \
   open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl

Assim, os dois primeiros switches devem ser óbvios:

  • -v - verbose
  • udp4-datagram:172.24.176.207:54321 - escuta UDP na porta 54321
  • open:/dev/ttyUSB0 - configura o envio de intput / output para seu dispositivo USB # 0
  • raw - modo bruto, passa entrada / saída não processada
  • nonblock - abre / usa arquivos no modo não bloqueante
  • waitlock=/tmp/s0.locak - cria um arquivo waitlock - protege contra vários socat 's
  • echo=0 - desativa o eco local no servidor
  • b115200 - define a taxa de transmissão para 115.200 bits
  • crnl - converte linhas novas de \n para \r\n

Por acaso, se você olhar na página socat man, há muitos exemplos. Também descrições completas dos switches acima também estão lá.

Referências

por 07.07.2018 / 04:36