반응형
nc (netcat)
터미널의 입출력을 네트워크 소켓에 연결하여 명령줄에서 데이터를 송수신할 수 있도록 지원하는 네트워크 도구
리눅스 환경에서 네트워크 애플리케이션을 개발할 때, 서버나 클라이언트 한 쪽이 없는 상태에서 해당 애플리케이션이 프로토콜에 따라 의도한대로 동작하는지 간단히 테스트하는 용도로 유용하게 쓸 수 있다.
이 외에도 Ncat, socat 등 유사한 도구들이 많은데, 전부 터미널 입출력을 기반으로 제어하는 특성상 텍스트 기반 프로토콜에 최적화되어 있고, 바이너리 프로토콜 검증용으로 쓰기엔 좀 까다롭다.
따라서 바이너리 프로토콜을 다루는 경우라면 아래 도구를 사용하는 걸 추천한다. 혹은 직접 프로그램을 짜는게 더 빠를 수도 있다.
- 송신용 : Packet Sender
- 수신용 : Wireshark, tcpdump
기본 명령어 구조
nc [옵션] <호스트> [포트]
- [옵션] : nc의 동작 방식 제어
- <호스트> : 클라이언트인 경우 접속할 IP / hostname (서버일 때는 <호스트> 생략)
- [포트] : TCP/UDP 포트
주요 옵션
- -l :listen 모드, 서버로 동작 (해당 옵션 없으면 기본 클라이언트로 동작)
- -u : UDP 사용 (해당 옵션 없으면 기본 TCP 사용)
- -U : Unix Domain Socket(AF_UNIX) 사용, [포트] 위치에 대신 Unix Domain Socket 파일 path 지정 (OpenBSD netcat 구현에만 해당 옵션 존재)
- -N : 단발성 전송 후 FIN 전송해 연결 종료 (TCP 클라이언트인 경우 사용, OpenBSD netcat 구현에만 해당 옵션 존재)
- -v : verbose 모드, 상세 출력
- -n : DNS lookup 생략 (자동화 스크립트에서 nc 명령 사용 시 유용)
- -k : keep listening 모드, 연결 종료 후에도 listen 유지 (TCP 서버인 경우 사용)
- -w N : timeout N초 설정
- -p [port] : source 포트 지정해 bind
- -s [ip] : source IP 지정해 bind (멀티 NIC 환경에서 유용)

서버 사용 예시
# TCP 서버, 인터랙티브 모드
# 클라이언트 연결이 끊겨도 listen 유지
# 터미널 입력 문자열은 개행을 기준으로 전송됨
$ nc -lk 9000
# TCP 서버, 수신 데이터를 텍스트 파일로 저장
# nc 프로세스가 종료되면 파일이 닫히고, 이후 파일을 cat으로 확인
$ nc -l 9000 > rx.txt
$ cat rx.txt
# TCP 서버, 수신 데이터를 터미널에 hex로 출력
# hexdump는 실시간이 아니라 16바이트 단위로 한줄씩 출력하며, EOF에 도달해야 남은 바이트가 출력됨
$ nc -l 9000 | hexdump -C
# TCP 서버, 수신 데이터를 파일로 저장하면서 동시에 hex로 출력
# hexdump는 실시간이 아니라 16바이트 단위로 한줄씩 출력하며, EOF에 도달해야 남은 바이트가 출력됨
$ nc -l 9000 | tee rx.bin | hexdump -C
# UDP 서버, 수신 데이터를 바이너리 파일로 저장
# nc 프로세스가 종료되면 파일이 닫히고, 이후 파일을 hexdump로 확인
$ nc -lu 9000 > rx.bin
$ hexdump -C rx.bin
클라이언트 사용 예시
# UDP 클라이언트, 인터랙티브 모드
# 터미널 입력 문자열은 개행을 기준으로 전송됨
$ nc -u 127.0.0.1 9000
# TCP 클라이언트, 단발성 문자열 전송 후 연결 종료
$ printf "HELLO\n" | nc -N 127.0.0.1 9000
# TCP 클라이언트, 단발성 바이너리 데이터 전송 후 연결 종료
$ printf "\x01\x02\x03" | nc -N 127.0.0.1 9000
# TCP 클라이언트
# 전송할 바이너리 파일을 미리 생성하고 파일 전송
# 서버의 응답 역시 파일로 저장
# nc 프로세스가 종료되면 파일이 닫히고, 이후 파일을 cat 또는 hexdump로 확인
$ printf "\x01\x02\x03" > client_tx.bin
$ cat client_tx.bin | nc 127.0.0.1 9000 > client_rx.bin
$ cat client_rx.bin
$ hexdump -C client_rx.bin
반응형
'운영체제 > Linux' 카테고리의 다른 글
| Linux의 부팅 과정 정리 (0) | 2026.01.25 |
|---|---|
| Ubuntu ] 한글 2020 Beta 설치 방법 (0) | 2026.01.21 |
| Ubuntu ] 우분투 듀얼 부팅 설치하기 (0) | 2025.12.21 |
| Ubuntu ] 화면 누리끼리하게 보일 때 해결 방법 (0) | 2025.12.06 |
| Linux ] journalctl 사용법 (systemd-journald) (0) | 2025.11.21 |