서버 프로그램을 만들거나 방화벽, 포트, TCP 연결 상태를 확인하다 보면 “서버는 떠 있는데 진짜 접속이 되는지” 빠르게 테스트해야 할 때가 있습니다. 이럴 때 매번 테스트용 클라이언트 코드를 작성하면 시간이 오래 걸리죠.
nc 또는 netcat은 한 줄 명령어로 TCP 서버처럼 대기하거나, TCP 클라이언트처럼 접속해볼 수 있는 도구입니다. 이 글에서는 Ubuntu에서 nc를 설치하고, 포트 열기, 클라이언트 접속, 메시지 주고받기, 포트 테스트까지 바로 복사해서 쓸 수 있게 정리했습니다.

1. 바로 복사해서 쓰는 nc 명령어
시간이 없으면 아래 명령어만 먼저 확인해도 됩니다. 서버 PC에서 대기하고, 클라이언트 PC에서 접속하는 흐름입니다.
nc 설치
sudo apt update
sudo apt install -y netcat-openbsd
nc 도움말 확인
nc -h
서버에서 5050 포트 열기
nc -l 5050
클라이언트에서 서버로 접속
nc 172.16.3.58 5050
포트가 열려 있는지 빠르게 확인
nc -vz 172.16.3.58 5050
주의: Ubuntu에서 설치되는 netcat 종류에 따라 서버 대기 명령이 nc -l 5050 또는 nc -l -p 5050처럼 다를 수 있습니다. 명령이 먹히지 않으면 nc -h로 현재 설치된 nc 옵션을 먼저 확인하세요.
2. nc는 언제 쓰면 좋은가
nc는 “간단한 네트워크 연결 테스트”에 특히 좋습니다. 개발 중인 서버가 실제로 연결을 받는지, 방화벽 때문에 막힌 건 아닌지, 특정 포트가 살아 있는지 확인할 때 빠르게 사용할 수 있습니다.
| 상황 | nc로 확인할 수 있는 것 |
|---|---|
| 서버 프로그램 개발 중 | 클라이언트 코드를 만들기 전 TCP 메시지 송수신 테스트 |
| 포트가 열려 있는지 확인 | nc -vz 서버IP 포트로 접속 가능 여부 확인 |
| 방화벽 점검 | 서버는 떠 있는데 외부에서 접속이 안 되는지 확인 |
| 내부망 통신 점검 | 두 서버 사이에 특정 TCP 포트 통신이 되는지 확인 |
3. Ubuntu에서 nc 설치하기
Ubuntu에서는 보통 netcat-openbsd 패키지를 설치해서 사용합니다. 예전 글에서는 sudo apt-get install netcat처럼 설명하는 경우도 많지만, 최근 Ubuntu 환경에서는 명시적으로 패키지를 지정하는 편이 덜 헷갈립니다.
sudo apt update
sudo apt install -y netcat-openbsd
nc -h

nc -h를 실행했을 때 옵션 설명이 나오면 설치가 정상적으로 된 것입니다. 여기서 -l, -v, -z, -u 같은 옵션을 확인할 수 있습니다.
서버·네트워크 실습을 자주 한다면 장비를 고정해두면 편합니다
nc는 로컬 PC 한 대에서도 테스트할 수 있지만, 실제 포트 통신이나 내부망 점검은 두 대의 장비가 있으면 훨씬 이해가 빠릅니다. 작은 미니PC, 남는 노트북, USB 랜카드, 랜 케이블을 준비해두면 서버/클라이언트 실습을 반복하기 좋습니다.
□ 유선 네트워크 테스트용 랜 케이블
□ 노트북에 연결할 USB 랜카드
□ Ubuntu 실습용 미니PC 또는 저전력 PC
□ 공유기와 포트 테스트용 간단한 네트워크 구성
이 링크는 쿠팡파트너스 링크이며, 구매 시 일정액의 수수료를 제공받을 수 있습니다.
4. nc로 TCP 서버 열기
테스트 서버의 IP가 172.16.3.58이고, 5050 포트를 사용한다고 가정해보겠습니다. 서버 쪽 터미널에서 아래 명령어를 실행합니다.
nc -l 5050
명령어를 실행했는데 아무 출력 없이 멈춰 있는 것처럼 보이면 정상입니다. 지금은 5050 포트에서 클라이언트 접속을 기다리는 상태입니다.
옵션 의미
-l: listen, 즉 서버처럼 접속을 기다리는 옵션입니다.
5050: 클라이언트가 접속할 TCP 포트 번호입니다.

5. nc 클라이언트로 접속하기
다른 터미널이나 다른 PC에서 서버 IP와 포트를 지정해 접속합니다.
nc 172.16.3.58 5050
접속한 뒤 클라이언트 터미널에서 아무 문자열이나 입력해보세요.
hello ubuntu
network test message
서버 쪽 터미널에 클라이언트에서 입력한 문자열이 그대로 보이면 TCP 연결과 메시지 전달이 정상적으로 된 것입니다.
echo로 한 번에 메시지 보내기
echo "hello from client" | nc 172.16.3.58 5050

6. 포트 테스트와 자주 나는 오류
실무에서는 메시지를 직접 주고받는 것보다 “포트가 열려 있는지”를 빠르게 확인할 때가 많습니다. 이때는 -v, -z 옵션을 같이 사용합니다.
nc -vz 172.16.3.58 5050
| 상황 | 의미 | 확인할 것 |
|---|---|---|
| succeeded | 접속 성공 | 서버 포트가 열려 있고 네트워크 통신 가능 |
| Connection refused | 서버가 거절 | 해당 포트에서 서비스가 대기 중인지 확인 |
| No route to host | 경로 문제 | IP, 게이트웨이, 라우팅, 방화벽 확인 |
| timed out | 응답 없음 | 방화벽, 보안그룹, 네트워크 차단 확인 |
Ubuntu 방화벽을 사용 중이라면 아래 명령어로 5050 포트를 허용할 수도 있습니다.
sudo ufw allow 5050/tcp
sudo ufw status
7. 실습 후 확인 체크리스트
□ 서버 PC에서 nc -l 5050으로 대기했는지 확인
□ 클라이언트에서 서버 IP와 포트를 정확히 입력했는지 확인
□ 같은 네트워크 대역인지 확인
□ 방화벽 또는 보안그룹에서 포트가 막혀 있지 않은지 확인
□ 포트 확인만 필요하면 nc -vz 서버IP 포트를 사용
한 줄 정리
Ubuntu에서 nc는 TCP 서버·클라이언트 테스트, 포트 확인, 내부망 통신 점검을 한 줄 명령어로 빠르게 해볼 수 있는 실무형 도구입니다.
