리눅스 커멘드 nc 명령어 대한 정리

리눅스 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 명령어 대한 정리

  • 애플리케이션 간 네트워크 연결 문제 발생 시, 해당 포트에 nc로 접속해 보며 방화벽/리스닝 여부를 빠르게 확인할 수 있다.

  • 간단한 HTTP 테스트도 가능해서, 예를 들어 echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80 형태로 요청을 날려 헤더 응답을 직접 보는 식으로 활용한다.

원하면 nc로 포트 체크/파일 전송/간단 서버를 만드는 실전 스니펫을 용도별로 더 정리해서 예시 중심으로 정리해 줄 수 있다.