안녕하세요.
루디쿡 아이티입니다~!!
이번에 소개드릴 리눅스의 핵심 기술은 바로 네트워크의 속을 들여다보는
네트워크 스캐너 (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를 전하는 루디쿡아이티였습니다!!

감사합니다~!!

'인프라 (Infrastructure) > 운영체제 (OS)' 카테고리의 다른 글
| 리눅스 head / tail 명령어 사용법 및 실제 예제 활용 (tail -f 옵션 사용법) (0) | 2025.09.10 |
|---|---|
| 리눅스 chown 명령어 사용법 및 실제 예제 활용 (파일 / 폴더 소유권 변경) (0) | 2025.09.09 |
| 리눅스 alias 명령어 사용법 및 실제 예제 (자주 사용하는 명령어 등록) (0) | 2025.09.06 |
| 리눅스 chmod 명령어 사용법 및 실제 활용 예시 (파일 권한 수정 변경) (0) | 2025.09.06 |
| 리눅스 sed 명령어 사용법 및 실제 예제 활용(텍스트 치환 / 바꾸기) (0) | 2025.09.06 |