socat — 소켓 릴레이·변환
Linux / 네트워크 및 방화벽 / socat.html
두 개의 데이터 채널을 연결해 파일·파이프·소켓·시리얼을 서로 중계하는 도구.
기본 정보
| 명령어 이름 | socat |
|---|---|
| 한 줄 소개 | 두 개의 데이터 채널을 연결해 파일·파이프·소켓·시리얼을 서로 중계하는 도구. |
| 제공 | socat 프로젝트 (배포판 패키지로 제공) |
| 공식 문서 | https://man7.org/linux/man-pages/man1/socat.1.html |
| 지원 운영체제 | Linux, macOS, BSD |
| 설치 여부 | 패키지 설치 필요 (apt install socat) |
| 분류 | 리눅스 네트워크 (태그: 주소·포트·라우팅·방화벽 (태그: 소켓, 중계, 프록시, 변환)) |
이 명령어는 무엇인가?
socat은 두 개의 주소를 인자로 받아 그 사이에서 바이트를 양방향으로 전달합니다.
TCP, UDP, UNIX 소켓, 파일, 실행 프로그램을 자유롭게 조합할 수 있어 간단한 프록시나 시험 도구로 쓰입니다.
어떤 문제를 해결하는가?
- 로컬 포트를 원격 서비스로 전달합니다.
- 유닉스 소켓을 TCP로 노출합니다.
- 시리얼 장치를 네트워크로 중계합니다.
- 테스트용 가짜 서버를 만듭니다.
주요 기능
포트 전달
한 주소로 들어온 연결을 다른 주소로 넘깁니다.
- 활용 상황: 방화벽 뒤 서비스에 임시로 접근할 때.
- 얻는 결과: 양방향 데이터가 그대로 전달됩니다.
- 제한 사항: 프로세스가 살아 있는 동안만 유지됩니다.
소켓 노출
유닉스 소켓을 TCP 주소로 연결합니다.
- 활용 상황: 컨테이너 소켓을 밖에서 시험할 때.
- 얻는 결과: 다른 호스트에서 소켓 서비스에 접근할 수 있습니다.
- 제한 사항: 인증이 없으므로 노출 범위를 좁혀야 합니다.
파일·프로그램 연결
파일이나 실행 프로그램을 주소로 지정합니다.
- 활용 상황: 가짜 응답을 돌려주는 시험이 필요할 때.
- 얻는 결과: 정해진 데이터를 주고받습니다.
- 제한 사항: 프로그램 오류가 그대로 연결에 영향을 줍니다.
설치 및 실행
설치 여부 확인
socat -V
sudo apt install socat
실제 사용 예제
포트 전달
로컬 8080을 원격 80으로 넘깁니다.
socat TCP-LISTEN:8080,fork TCP:example.com:80
소켓 노출
유닉스 소켓을 TCP로 연결합니다.
socat TCP-LISTEN:9000,fork UNIX-CONNECT:/run/app.sock
가짜 서버
고정 문자열을 돌려주는 서버를 띄웁니다.
socat TCP-LISTEN:9999,reuseaddr,fork EXEC:'/bin/echo hello'