socat을 사용하여 UDP-직렬 브리지 생성

socat을 사용하여 UDP-직렬 브리지 생성

UDP 연결을 통해 데이터를 전송하는 소프트웨어가 있습니다. 그러나 우리 시스템에서는 직렬 포트를 통해서만 데이터를 전송할 수 있습니다. 나는 UDP를 사용하여 serial과 serial 사이에 브리지를 만들려고 생각하고 있습니다 socat. 그러나 나는 그것에 대해별로 익숙하지 않습니다. 몇 가지 튜토리얼을 시도했지만 도움이 되지 않았습니다. 또한 설명서를 읽어보았지만 그것도 도움이 되지 않았습니다.

내가 하나 찾았어여기 예, 내 필요에 맞게 조정했습니다. 내 임베디드 시스템에 있는 내용은 다음과 같습니다(고정 IP가 있음).

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

내 호스트에 있는 내용은 다음과 같습니다(고정 IP도 있음).

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

저를 용서하셔야 합니다. 하지만 저는 대체로 socat문맹 입니다 networking.

몇 가지 의견과 질문.

  1. 무슨 뜻이에요 open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl? 해당 설명은 어디서 찾을 수 있나요? 나는 /dev/ttyUSB0및 를 얻었 b115200지만 남은 것은 무엇입니까?
  2. 임베디드 시스템(172.24.176.207)에서 netcat서버를 실행합니다.

    $ nc -ul 172.24.176.207 54321
    

    호스트에서 UDP 패킷을 보냈습니다.

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

    그러나 아무 일도 일어나지 않았습니다. 내가 무엇을 놓치고 있나요?

답변1

에코 서버 설정

한때 socat다음과 같이 UDP 에코 서버를 설정했습니다.

에코 서버
$ socat UDP4-LISTEN:54321,fork EXEC:cat
에코 클라이언트
$ echo -n "hello" | nc -4u -w1 192.168.56.101 54321
hello

TCP 덤프 프롬프트

저는 이 프로그램을 디버깅할 때 네트워크를 모니터링하는 것을 좋아하므로 이 프로그램을 실행하여 "에코 서버"를 모니터링하겠습니다.

$ 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

노트:위의 기술은 socat/nc 서버와 해당 클라이언트 사이에서 발생하는 모든 것을 디버깅하기 위해 크게 수정될 수 있습니다.

socat 인수 이해

구성도 찾았어요socat 탈진한때때로. 하지만 다른 모든 것과 마찬가지로 작은 부분으로 나누면 익히기가 더 쉽습니다.

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

따라서 처음 두 스위치는 다소 명확해야 합니다.

  • -v- 장황한
  • udp4-datagram:172.24.176.207:54321- UDP 수신 포트 54321
  • open:/dev/ttyUSB0- USB #0 장치로의 입력/출력 전송 설정
  • raw- 원시 모드, 처리되지 않은 입력/출력 전달
  • nonblock- 비차단 모드에서 파일 열기/사용
  • waitlock=/tmp/s0.locak- 대기 잠금 파일 생성 - socat다중 방지
  • echo=0- 서버에서 로컬 에코를 비활성화합니다.
  • b115200- 전송 속도를 115,200비트로 설정
  • crnl- 개행 문자를 \n다음에서 변환합니다.\r\n

그런데 매뉴얼 페이지를 보면 socat많은 예제가 있습니다. 위의 스위치에 대한 자세한 설명도 있습니다.

인용하다

관련 정보