본문 바로가기
운영체제/Linux

Linux ] nc (netcat) 사용법 정리

by eteo 2026. 1. 30.
반응형

 

 

 

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

 

 

 

 

 

 

 

반응형