리눅스 nc(netcat)는 TCP/UDP 소켓에 직접 붙어서 데이터 송수신, 포트 테스트, 간이 서버 구현 등에 쓰는 범용 네트워크 유틸리티다.
기본 개념
nc는 “netcat”의 약자로, 네트워크 연결에서 표준입출력(stdin/stdout)을 그대로 소켓에 연결해 주는 도구다.
주로 포트 오픈 여부 확인, 간단한 TCP/UDP 서버·클라이언트 구현, 파일 전송, 배너 그랩(banner grabbing) 등에 사용된다.
기본 사용 형식
가장 기본적인 형식은 다음과 같다.
-
클라이언트 모드:
nc [옵션] <host> <port> -
리스닝(서버) 모드:
nc -l [옵션] <port>
여기서 host는 대상 IP/호스트명, port는 대상 포트 번호를 의미하며, 기본은 TCP이고 -u 옵션으로 UDP를 사용할 수 있다.
자주 쓰는 주요 옵션
-
-l: 리스닝 모드(서버처럼 포트 열고 대기). -
-p <port>: 사용할 로컬 포트 지정(주로-l과 함께 사용). -
-u: UDP 모드로 동작. -
-v: verbose, 접속 정보 등을 자세히 출력. -
-n: DNS 조회 없이 숫자 IP/포트만 사용. -
-z: 데이터 전송 없이 포트 스캔만 수행. -
-w <sec>: 타임아웃(접속 또는 I/O 대기 시간).
대표적인 사용 예시
-
포트 오픈 확인(TCP):
nc -zv <host> <port>→ 열려 있으면 연결 성공 메시지, 아니면 실패. -
포트 범위 스캔:
nc -zv <host> 20-80와 같이 포트 범위 지정. -
간단한 TCP 서버: 서버에서
nc -l -p 9000, 클라이언트에서nc <server-ip> 9000→ 상호 텍스트 송수신. -
UDP 통신 테스트: 서버
nc -u -l -p 9000, 클라이언트nc -u <server-ip> 9000. -
파일 전송:
-
수신 측:
nc -l -p 9000 > recv.file -
송신 측:
nc <host> 9000 < send.file
-
디버깅/테스트 활용 팁

-
애플리케이션 간 네트워크 연결 문제 발생 시, 해당 포트에
nc로 접속해 보며 방화벽/리스닝 여부를 빠르게 확인할 수 있다. -
간단한 HTTP 테스트도 가능해서, 예를 들어
echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80형태로 요청을 날려 헤더 응답을 직접 보는 식으로 활용한다.
원하면 nc로 포트 체크/파일 전송/간단 서버를 만드는 실전 스니펫을 용도별로 더 정리해서 예시 중심으로 정리해 줄 수 있다.