socat은 리눅스에서 사용할 수 있는 다목적 릴레이 프로그램이다. 쉽게 얘기해서 Source, Sink 간에 두 개의 단방향 채널을 열어, 서로 연결해준다.
설치는 간단히 apt를 이용하여 설치가 가능하다.
$ sudo apt install socat
사용방법은
$ socat [option] <source> <sink>
와 같이 사용하며, 옵션은 socket -h 를 이용해 확인 가능. 많이 사용하는 것으로는 -d 옵셩는 로그 메시지 출력, -u, -U를 이용해 단방향, 역방향 설정 등이 있다.
source 및 sink에는 linux에서 사용하는 거의 모든 인터페이스들이 적용 가능하다.
- Files
- Pipes
- Devices (serial line, pseudo-terminal, etc)
- `Sockets (UNIX, IP4, IP6 – raw, UDP, TCP)
- SSL sockets
- Proxy CONNECT connections
- File descriptors (stdin, etc)
- The GNU line editor (readline)
- Programs
- Combinations of two of these
실제 사용 예를 들어본다면,
- STDIN <-> STDOUT: 키보드 입력, 화면 출력
$ socat -dd STDIN STDOUT
- TCP 2000포트로 연결하면 자동으로 TCP 22 포트로 연결
$ socat -dd TCP-LISTEN:2000,reuseaddr,fork TCP:0.0.0.0:22
- TCP 8080포트로 연결하면 자동으로 data.txt 파일을 생성하고 수신받은 내용 저장
$ socat -dd -u TCP-LISTEN:8080,reuseaddr,fork open:data.txt,create,append
이외에도 시리얼포트 등도 가능하여. 간단히 시리얼포트-이더넷 기능 구현 가능하고, .UDP를 TCP로 변환, 그 반대 역시 가능하여, 활용 방법은 무궁무진한다.