본문 바로가기
인프라 (Infrastructure)/운영체제 (OS)

리눅스 nmap ncat 명령어 사용법 및 실제 사용예제 (네트워크 포트 확인 / 리눅스 서버 채팅방 만들기)

by IT 성능 전문 블로그 2025. 9. 7.
반응형

안녕하세요.

루디쿡 아이티입니다~!!

 

이번에 소개드릴 리눅스의 핵심 기술은 바로 네트워크의 속을 들여다보는

네트워크 스캐너 (nmap)와

데이터 통신의 만능 맥가이버 칼 (ncat) 입니다!!

 

경험상

실제 IT분야에서 서버끼리의 통신 구조를 확인할 때

도움을 많이 받은 명령어입니다!!

여러분도 명령어를 숙지해서 어깨에 힘을 주도록해요!!

시작합니다!!


nmap 이란?

nmap은 'Network Mapper'의 약자로,

이름 그대로 네트워크의 지도를 그리고,

그 안에 무엇이 있는지 탐색하는 강력한 정찰 도구입니다.

 

네트워크라는 거대한 도시가 있다면,

nmap은 그 도시의 지도를 그리고,

각 건물(서버)마다 어떤 문(포트)이 열려 있는지,

그 안에서는 어떤 서비스가 제공되고 있는지 알려주는

'디지털 탐험가'와 같습니다. 🗺️

 

1997년, 고든 라이언(Gordon Lyon, 필명: Fyodor)에 의해 처음 세상에 공개된

nmap은 보안 전문가와 시스템 관리자들에게 필수적인 도구가 되었습니다.

 

단순히 포트가 열렸는지 닫혔는지만 확인하는 것을 넘어,

상대방 컴퓨터의 운영체제와 실행 중인 서비스의 버전까지 알아낼 수 있어

네트워크의 취약점을 진단하고 방어 전략을 세우는 데 핵심적인 역할을 합니다.

 

이 nmap을 사용하면 내 서버의 어떤 포트가 외부에 노출되어 있는지 점검하거나,

네트워크에 어떤 장비들이 연결되어 있는지 손쉽게 파악할 수 있습니다.


nmap 핵심 옵션 정복

nmap의 기능 중 가장 많이 쓰이는 핵심 옵션들입니다.

이 옵션들을 조합하여 원하는 정보를 정확하게 얻을 수 있습니다.

옵션 이름 설명
-sS TCP SYN Scan 연결을 완전히 맺지 않고 반만 연결하여(Half-open) 포트 상태를 확인하는 은밀한(Stealthy) 스캔 방식입니다. 가장 많이 사용됩니다.
-sT TCP Connect Scan 완전한 3-way-handshake 연결을 맺어 포트 상태를 확인하는 가장 기본적인 스캔입니다. 로그가 남을 확률이 높습니다.
-sV Service Version Detection 열려 있는 포트에서 실행 중인 서비스의 정확한 버전 정보를 알아냅니다.
-O OS Detection 원격 호스트의 운영체제(Windows, Linux 등)를 추측하여 알려줍니다.
-p Port range 특정 포트나 포트 범위를 지정하여 스캔합니다. (예: -p 80,443, -p 1-1000)
-v Verbose 스캔 진행 과정을 자세하게 화면에 출력합니다.
 

nmap 실제 예시

nmap의 강력함을 느껴보기 위해, 스캔 연습을 위해 공식적으로 제공되는

scanme.nmap.org라는 호스트를 대상으로 실습을 진행하겠습니다.

⚠️ 주의: 허가되지 않은 시스템에 nmap 스캔을 하는 것은 공격 행위로 간주될 수 있습니다.
반드시 자신의 서버나 허용된 대상을 상대로 테스트하세요.

예시 1: 가장 기본적인 스텔스 스캔

가장 많이 사용되는 -sS 옵션으로 scanme.nmap.org의 주요 포트들을 스캔해 보겠습니다.

구분 내용
목표 scanme.nmap.org 서버의 열린 포트들을 은밀하게(Stealth) 스캔하기
전체 명령어 nmap -sS scanme.nmap.org
명령어 분석 -sS: TCP SYN 방식을 사용하여 스캔 대상 서버에 로그를 최소화하며 포트 상태를 확인합니다.
실행 결과 ✨ 아래 확인!!
Starting Nmap 7.80 ( https://nmap.org ) at 2025-09-05 17:40 KST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.27s latency).
Not shown: 996 closed ports
PORT      STATE    SERVICE
22/tcp    open     ssh
80/tcp    open     http
9929/tcp  open     nping-echo
31337/tcp open     Elite

Nmap done: 1 IP address (1 host up) scanned in 2.18 seconds

결과 분석: 결과를 보면 22번(ssh), 80번(http) 등 총 4개의 포트가 open 상태인 것을 확인할 수 있습니다.

나머지 996개 포트는 closed 상태라고 알려주네요.

예시 2: 서비스 버전과 운영체제 정보 알아내기

이번에는 -sV와 -O 옵션을 추가하여, 열린 포트에서 어떤 프로그램이 돌고 있고

서버의 운영체제는 무엇인지 좀 더 깊게 파헤쳐 보겠습니다.

구분 내용
목표 scanme.nmap.org의 서비스 버전과 OS 정보까지 알아내기
전체 명령어 nmap -sS -sV -O scanme.nmap.org
명령어 분석 -sV: 열린 포트의 서비스 배너 정보를 확인하여 버전을 표시합니다.
-O: 네트워크 패킷 응답 패턴을 분석하여 운영체제를 추측합니다. (root 권한 필요)
실행 결과 ✨ 아래 확인!!
[...]
PORT      STATE SERVICE      VERSION
22/tcp    open  ssh          OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
80/tcp    open  http         Apache httpd 2.4.7 ((Ubuntu))
9929/tcp  open  nping-echo   Nping echo
31337/tcp open  elite?
[...]
Aggressive OS guesses: Linux 3.10 - 4.11 (95%), Linux 3.2 - 4.9 (95%), Linux 4.4 (95%)
[...]
OS details: Linux 3.10 - 4.11, Linux 3.2 - 4.9, Linux 4.4
[...]

결과 분석: 예시 1보다 훨씬 상세한 정보가 나왔습니다!

22번 포트에서는 OpenSSH 6.6.1p1 버전이, 80번 포트에서는

Apache 2.4.7 웹서버가 실행 중임을 알 수 있습니다.

또한, 운영체제는 Ubuntu Linux 계열일 것이라고 정확하게 추측해 냈습니다.


ncat 이란?

ncat(또는 nc)은 'Netcat'의 약자로,

네트워크를 통해 데이터를 읽고 쓰는 스위스 군용 칼 같은 만능 도구입니다.

 

데이터를 주고받을 수 있는 간단한 통로(Pipe)를 순식간에 만들어내는 '네트워크계의 접착테이프'와 같습니다. 🔗

서버와 클라이언트 역할을 모두 할 수 있어서 간단한 채팅 서버를 만들거나,

파일을 전송하거나, 포트가 열려 있는지 간단하게 테스트하는 등 활용도가 무궁무진합니다.

 

오리지널 netcat은 1995년 'Hobbit'이라는 해커에 의해 개발되었고,

오늘날 우리가 사용하는 ncat은 nmap 프로젝트의 일환으로 기능을

대폭 개선하여 새롭게 태어난 버전입니다.

 

단순함과 강력함을 동시에 갖춰

"TCP/IP계의 만능 도구(Swiss-army knife)"라는 별명을 가지고 있습니다.


ncat 핵심 옵션 정복

ncat의 기본은 '서버' 역할을 하는 리스닝(Listening) 모드와

'클라이언트' 역할을 하는 접속 모드입니다.

옵션 이름 설명
-l Listen 지정된 포트로 들어오는 연결을 기다리는 서버(Listen) 모드로 동작합니다.
-p <포트> Port 리스닝할 포트 번호를 지정합니다. -l 옵션과 함께 사용됩니다.
-v Verbose 연결 과정 등 자세한 정보를 출력합니다. 디버깅 시 유용합니다.
-k Keep-alive 클라이언트 접속이 끊어져도 서버를 종료하지 않고 다음 연결을 계속 기다립니다.
-e <명령어> Execute 연결이 이루어지면 지정된 명령어를 실행합니다. (강력하지만 보안에 매우 주의해야 함)
 

ncat 실제 예시

ncat의 진가는 두 개의 터미널을 함께 사용할 때 드러납니다.

[터미널 A]는 서버(Listen) 역할,

[터미널 B]는 클라이언트(Connect) 역할을 맡아 진행하겠습니다.

예시 1: 세상에서 가장 간단한 채팅 서버 만들기

ncat을 이용해 1분 만에

Rudi Cook IT 전용 채팅방을 만들어 보겠습니다.

 

구분 내용
목표 54321번 포트를 사용하는 간단한 채팅 서버와 클라이언트 만들기
[터미널 A] 서버 명령어 ncat -l -p 54321
명령어 분석 -l -p 54321: 54321번 포트로 들어오는 연결을 기다리는 서버를 실행합니다.
[터미널 B] 클라이언트 명령어 ncat localhost 54321
명령어 분석 localhost 54321: 내 컴퓨터(localhost)의 54321번 포트로 접속을 시도합니다.
실행 결과 ✨ 아래 확인!!
 

[터미널 A - 서버]

# ncat -l -p 54321
안녕하세요! 루디쿡아이티입니다. (클라이언트가 보낸 메시지)

 

[터미널 B - 클라이언트]

# ncat localhost 54321
안녕하세요! 루디쿡아이티입니다. (직접 입력)

결과 분석

[터미널 B]에서 입력한 메시지가 그대로 [터미널 A]에 나타납니다.

반대로 [터미널 A]에서 입력하면 [터미널 B]에 나타납니다.

순식간에 양방향 통신 채널이 만들어졌습니다!

예시 2: 터미널 간 파일 전송하기

이번에는 ncat을 이용해 RudiCookIT.txt라는 파일을

[터미널 A]에서 [터미널 B]로 전송해 보겠습니다.

구분 내용
목표 RudiCookIT.txt 파일을 ncat을 통해 다른 터미널로 전송하기
[터미널 A] 파일 받는 쪽 ncat -l -p 54321 > RudiCookIT.txt
명령어 분석 > RudiCookIT.txt: ncat을 통해 들어오는 모든 데이터를 RudiCookIT.txt 파일로 저장(Redirection)합니다.
[터미널 B] 파일 보내는 쪽 ncat localhost 54321 < RudiCookIT.txt
명령어 분석 < RudiCookIT.txt: RudiCookIT.txt 파일의 내용을 ncat을 통해 전송합니다.
실행 결과 ✨ [터미널 A]를 실행하고, 이어서 [터미널 B]를 실행하면 파일 전송이 완료되고 ncat은 자동으로 종료됩니다. 이후 [터미널 A]가 있던 경로에서 ls 명령어를 쳐보면 RudiCookIT.txt 파일이 성공적으로 생성된 것을 확인할 수 있습니다.
 

결과 분석

리다이렉션(>, <)과 ncat을 조합하여, 복잡한 설정 없이도

두 시스템 간에 안정적으로 파일을 전송할 수 있습니다.


이것으로 네트워크를 정찰하는 nmap과 데이터 통로를 만드는 ncat에 대해 알아보았습니다.

 

네트워크 보안과 시스템 관리의 세계에 오신 것을 환영합니다!

 

앞으로도 좋은 글로 찾아뵙도록 하겠습니다.

IT 성능 전문가, IT를 전하는 루디쿡아이티였습니다!!

 

감사합니다~!!

 

 

반응형