Linux에서 이더넷을 통한 직렬 데이터

Linux에서 이더넷을 통한 직렬 데이터

이더넷(Serial to Ethernet)을 통해 위젯(192.168.1.214:20108)을 Linux 상자에 연결하려고 합니다.

Windows에서 가상 장치 드라이버 매핑을 사용하면 직렬 데이터를 볼 수 있으므로 직렬-이더넷 위젯이 작동하고 있음을 알 수 있습니다.

이제 Linux 시스템을 가리키면 tcpdump를 사용할 때의 연결 시도만 표시됩니다.

21:00:07.322019 IP 192.168.1.214.20108 >development.local.8234: 플래그[R], seq 4096, win 0, 길이 0

따라서 이더넷 패킷이 통과하지만 직렬 데이터(포트 8234 이더넷을 통해)를 장치에 매핑하는 방법을 찾을 수 없습니다. 많은 변형은 socat화면에 데이터를 생성하지 않습니다. 예를 들면 다음과 같습니다.

$ sudo socat readline TCP-LISTEN:8234,bind=127.0.0.1

또는 개발자에게 바인딩해 보세요.

$ socat -d -d -d tcp-l:127.0.0.1:8234,reuseaddr,fork file:/dev/tty0,nonblock,waitlock=/var/run/tty0.lock

출력은 다음과 같습니다

2013/11/11 21:19:41 socat[23757] I setting option "so-reuseaddr" to 1
2013/11/11 21:19:41 socat[23757] I setting option "fork" to 1
2013/11/11 21:19:41 socat[23757] I socket(2, 1, 6) -> 3
2013/11/11 21:19:41 socat[23757] I starting accept loop
2013/11/11 21:19:41 socat[23757] N listening on AF=2 0.0.0.0:8234

Linux 시스템에서 이더넷을 통해 직렬 데이터를 읽는 방법을 전혀 모릅니다.

답변1

Stackoverflow를 탐색하면서 다음과 같은 제목의 Q&A를 찾았습니다.Linux 환경에서 직렬 포트 데이터를 TCP/IP로 변환. 특히 이 질문에 대한 답변 중 하나는 귀하가 찾고 있는 것과 유사한 두 가지 도구를 강조했습니다.

  • ser2net - 직렬 네트워크 프록시(ser2net)

    ser2net은 사용자에게 네트워크 연결에서 직렬 포트로 연결하는 방법을 제공합니다. 제가 찾을 수 있는 다른 방법은 모두 시도해 보았지만 부족하다고 생각되어 직접 작성했습니다. 모든 직렬 포트 설정, 포트 구성을 위한 구성 파일, 포트 매개변수 수정을 위한 제어 로그인, 모니터링 포트 및 제어 포트를 제공합니다.

  • remtty - 원격 tty

    remtty("remote tty"의 약자)를 사용하면 TCP 연결이 의사 tty로 작동할 수 있습니다. 이를 통해 직접 모뎀 액세스(예: Cisco NAS)가 있는 액세스 서버를 일반 다이얼 아웃 모뎀으로 사용하여 팩스를 보내거나 문자 메시지를 보내거나 BBS에 액세스할 수 있습니다. Cisco의 Dialout Utility와 유사한 기능을 제공하지만 Windows 대신 GNU/Linux에서 실행됩니다.

또한 사용 방법을 설명하는 이 문서를 확인하고 싶을 수도 socat있으며 원하는 작업이 정확히 수행되기를 바랍니다.

이 페이지에서 발췌

- You have a host with some serial device like a modem or a bluetooth interface
(modem server)
- You want to make use of this device on a different host. (client)

1) on the modem server start a process that accepts network connections and
links them with the serial device /dev/tty0:

$ socat tcp-l:54321,reuseaddr,fork \
     file:/dev/tty0,nonblock,waitlock=/var/run/tty0.lock

2) on the client start a process that creates a pseudo tty and links it with a
tcp connection to the modem server:

$ socat pty,link=$HOME/dev/vmodem0,waitslave tcp:modem-server:54321

NETWORK CONNECTION

There a some choices if a simple TCPv4 connection does not meet your
requirements:
TCPv6: simply replace the "tcp-l" and "tcp" keywords with "tcp6-l" and "tcp6"
Socks: if a socks server protects the connection, you can replace the
"tcp:modem-server:54321" clause with something like
"socks:socks-server:modem-server:54321" or 
"socks:socks-server:modem-server:54321,socksport=1081,socksuser=nobody"

SECURITY

SSL
If you want to protect your server from misuse or your data from sniffing and
manipulation, use a SSL connection with client and server authentication
(currently only over TCPv4 without socks or proxy). 
See <a href="socat-openssl.txt">socat-openssl.txt</a> for instructions.

IP Addresses
!!! bind=...
!!! range=...
!!! lowport (for root)
!!! sourceport
!!! tcpwrap=

FULL FEATURES
$ socat -d -d ssl-l:54321,reuseaddr,cert=server.pem,cafile=client.crt,fork \
     file:/dev/tty0,nonblock,echo=0,raw,waitlock=/var/run/tty0.lock

TROUBLESHOOTING
-v -x

관련 정보