Step 81. nmap 완전 정복 — 정찰의 표준 도구
Level 1 — 프로그래밍과 컴퓨터 내부 | 난이도 ★★★☆☆ | 예상 소요 시간 3시간
전제: Step 79~80을 마쳤다. 포트 스캔의 원리(connect, SYN)를 직접 코드로 만들어 봤다. 리눅스 터미널(WSL 포함)이 준비되어 있다.
- 준비물: 리눅스 터미널 하나와 nmap. 오늘의 스캔 대상은 철저히
127.0.0.1(내 컴퓨터 자신)뿐입니다. - 주의: ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. 이 챕터의 모든 실측은 WSL 리눅스(Nmap 7.94SVN)에서
127.0.0.1만을 대상으로 수행했습니다.
Step 79에서 우리는 포트 스캐너를 직접 만들었습니다. 잘 동작했지만, 세상에는 이 일을 25년 넘게 갈고닦아 온 도구가 있습니다. nmap(Network Mapper, 네트워크 지도 제작기)입니다. 침투 테스트 보고서의 첫 페이지에는 거의 항상 nmap의 출력이 붙습니다. 지난 두 챕터에서 원리를 손으로 만들었으니, 오늘은 그 원리가 녹아든 표준 도구를 다룹니다. nmap의 출력은 압축된 정보입니다 — 여러분은 이미 그 압축을 푸는 지식을 갖고 있습니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- nmap의 주요 옵션(
-sT/-sS/-sV/-O/--script)을 상황에 맞게 고른다 - nmap 출력을 읽고 "열린 포트, 서비스, 버전, 운영체제"를 정리한다
- 기본 스캔(1000개 포트)과 전수 스캔(
-p-)의 차이를 실험으로 설명한다 - 스캔 결과를
-oN파일로 남겨 재현 가능한 기록을 만든다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 리눅스 터미널(WSL 또는 랩 VM), nmap 7.94 |
| 오늘의 명령 | nmap 대상, -sT/-sS(스캔 방식), -sV(버전), -O(운영체제), -sn(핑 스캔), --script(NSE), -p-(전수), -oN(파일 저장) |
| 필요한 개념 | 포트의 상태(open/closed), 배너, TCP 3-way 핸드셰이크, Step 79~80의 스캔 원리 |
| 오늘의 산출물 | 내 컴퓨터 정찰 리포트 scan_localhost.txt |
2-1. 스캔 방식의 지도
nmap은 여러 스캔 방식을 옵션으로 고릅니다. 우리가 아는 원리와 연결해 봅시다.
-sT(connect 스캔): Step 79에서 만든 방식 그대로입니다. 연결을 끝까지 완성하므로 정확하지만, 상대 로그에 접속 기록이 남습니다. 권한이 없을 때 쓰는 기본값입니다.-sS(SYN 스캔): Step 80에서 만든 방식입니다. SYN을 보내고 대답(SYN-ACK/RST)만 듣고 연결은 완성하지 않습니다. 빠르고 조용하지만 날 패킷을 만들어야 하므로 관리자 권한(sudo)이 따라옵니다.-sU(UDP 스캔): TCP가 아닌 UDP 포트(DNS 53번 같은)를 검사합니다. 대답이 없는 게 정상인 규약이라 느리고 까다롭습니다.
2-2. 탐지 옵션 — "무엇이 열렸나"에서 "누가 있는가"로
포트 번호만으로는 부족합니다. 같은 80번이라도 어떤 웹서버 프로그램인지가 중요하니까요.
-sV(버전 탐지): 열린 포트에 접속해 배너를 읽고, 필요하면 시험 신호를 보내 서비스의 이름과 버전을 알아냅니다. 우리의 배너 그래빙의 진화형입니다.-O(운영체제 추측): 응답 패킷의 미세한 습관(TTL 초깃값, 창 크기 등)으로 운영체제를 추측합니다. 추측이지 확정이 아니라는 점을 기억하세요 — 오늘 실측에서 이 한계가 그대로 드러납니다.-sC/--script(NSE 스크립트): nmap에는 수백 개의 검사 스크립트(NSE, Nmap Scripting Engine)가 내장되어 있습니다. 웹페이지 제목 읽기, 알려진 취약점 확인 등을 자동으로 수행합니다.
2-3. 범위와 출력
- 기본 스캔: 유명한 포트 1000개만 검사합니다. 빠르지만 놓치는 것이 있습니다.
-p-: 포트 전부(1~65535)를 검사합니다.--top-ports N: 가장 흔한 포트 N개만 검사합니다.-oN 파일: 결과를 텍스트 파일로 저장합니다. 정찰의 산출물은 항상 파일로 남깁니다.
3. 따라 하기
3-1. 준비 — 연습용 서비스 하나 열기
텅 빈 컴퓨터를 스캔하면 배울 것이 없으니, 내 컴퓨터 안에 연습용 웹 서버를 하나 엽니다. 파이썬에 기본 포함된 간이 서버입니다.
입력 (터미널 1)
mkdir -p steplab && cd steplab
echo "<h1>hello plain world</h1>" > index.html
python3 -m http.server 8000
읽는 법: "8000번 포트에서 HTTP 서비스 중"이라는 뜻입니다. 이 창은 실습 내내 닫지 마세요.
3-2. 첫 스캔 — 기본 명령
입력 (터미널 2)
nmap 127.0.0.1
출력 (2026-09-09 실측):
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-09-09 13:33 KST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 999 closed tcp ports (reset)
PORT STATE SERVICE
8000/tcp open http-alt
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
읽는 법: 세 열 — 포트/규약, 상태(STATE), 서비스 이름 — 입니다. 기본 스캔은 유명한 포트 1000개만 검사했고, 그중 999개는 닫혀 있으며 8000번 하나만 열려 있습니다. 여기서 SERVICE 열의 http-alt는 포트 번호에서 온 관례적 추정이지, 실제 확인이 아닙니다. 진짜 확인은 -sV입니다.
왜: 가장 단순한 형태의 출력 구조를 익히는 단계입니다. 이 표의 모양은 앞으로 수백 번 보게 될 것입니다.
3-3. 버전 탐지 — 진짜 정체 밝히기
입력
nmap -sV -p 8000 127.0.0.1
출력 (2026-09-09 실측):
PORT STATE SERVICE VERSION
8000/tcp open http SimpleHTTPServer 0.6 (Python 3.12.3)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.21 seconds
읽는 법: VERSION 열에 진짜 정체가 드러났습니다. http-alt라는 관례 이름이 아니라 "파이썬 3.12.3의 SimpleHTTPServer 0.6"라는 실체입니다. 그리고 시간을 보세요 — 기본 스캔은 0.07초였는데 버전 탐지는 6.21초 걸렸습니다. nmap이 실제로 접속해서 배너를 읽고 시험 신호를 보낸 대가입니다.
왜: 침투 테스터의 리포트가 "포트가 열려 있다"가 아니라 "OpenSSH 8.9p1이 돌고 있다"로 쓰이는 이유가 여기 있습니다. 버전은 곧 알려진 취약점의 색인이기 때문입니다.
3-4. 예측해 보기 — -sT와 -sS의 결과는 다를까
예측입니다. 같은 대상을 -sT(connect)와 -sS(SYN)로 각각 스캔하면, 결과 표는 달라질까요?
입력
nmap -sT -p 8000 127.0.0.1
sudo nmap -sS -p 8000 127.0.0.1
출력 (2026-09-09 실측):
# -sT
8000/tcp open http-alt
Nmap done: 1 IP address (1 host up) scanned in 0.01 seconds
# -sS
8000/tcp open http-alt
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
읽는 법: 두 결과의 포트 목록은 같습니다. 판별 근거(연결 완성 vs SYN의 대답)는 달라도 "열린 포트가 어디인가"라는 결론은 같습니다. 다른 것은 과정입니다 — 속도와, 상대 로그에 남는 흔적입니다.
왜: "방법이 달라도 결론이 같다"는 검증은 도구를 신뢰하는 근거가 됩니다. 반대로 결과가 다르게 나오는 날에는 방화벽이 둘을 다르게 대했다는 뜻이므로, 그 자체가 발견입니다.
3-5. 운영체제 추측 — 추측은 추측이다
입력
sudo nmap -O 127.0.0.1
출력 (2026-09-09 실측, 일부):
PORT STATE SERVICE
8000/tcp open http-alt
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.94SVN%E=4%D=9/9%OT=8000%CT=1%CU=34824%PV=N%DS=0%DC=L%G=Y%TM=6AA0E19E ...
Network Distance: 0 hops
Nmap done: 1 IP address (1 host up) scanned in 11.27 seconds
읽는 법: 루프백(자기 자신) 대상이라 응답이 너무 깔끔한 탓인지, nmap은 "정확히 맞는 운영체제를 못 찾겠다(No exact OS matches)"고 솔직하게 답하고 지문(fingerprint)만 출력했습니다. 그리고 11.27초나 걸렸습니다 — 운영체제 탐지는 여러 종류의 시험 패킷을 보내는 무거운 검사입니다.
왜: 도구의 출력이 도구의 한계를 포함한다는 좋은 예입니다. -O의 답은 진단이 아니라 단서이고, "모르겠다"도 정직한 답입니다.
3-6. 전수 검사 — 기본 스캔이 놓치는 것
입력
nmap -p- 127.0.0.1
출력 (2026-09-09 실측):
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
8000/tcp open http-alt
33211/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 0.35 seconds
읽는 법: 65535개 전부를 검사했더니 기본 스캔에 없던 포트가 하나 더 나왔습니다. 33211번, 서비스 이름조차 unknown입니다. 이 컴퓨터에서 조용히 돌고 있던 무언가(실제로는 컨테이너 관리 서비스)가 기본 스캔의 시야 밖에 있던 것입니다. 65535개 검사에 0.35초 — 루프백은 대답이 즉시 오므로 빠릅니다.
왜: 공격자는 기본 1000개 밖의 포트에 숨는 서비스를 찾습니다. 방어자도 같은 눈으로 "우리 장비에 내가 모르는 열린 문이 있나"를 봐야 합니다. 전수 검사는 그 양쪽의 기본기입니다.
3-7. unknown의 정체 — -sV도 모르는 것이 있다
저 33211번에 버전 탐지를 걸어 봅시다.
입력
nmap -sV --version-intensity 2 -p 33211 127.0.0.1
출력 (2026-09-09 실측, 일부):
PORT STATE SERVICE VERSION
33211/tcp open unknown
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint ...
SF:(GetRequest,8F,"HTTP/1\.0\x20404\x20Not\x20Found\r\n ... \r\n404:\x20Pa
SF:ge\x20Not\x20Found") ...
Nmap done: 1 IP address (1 host up) scanned in 6.20 seconds
읽는 법: "데이터를 내놓긴 하는데 무슨 서비스인지 모르겠다(unrecognized despite returning data)"는 답입니다. 지문을 보면 이 서비스가 HTTP 비슷하게 "404 Page Not Found"를 뱉는다는 단서가 보입니다 — nmap이 GET 요청을 시험 삼아 보냈고 404를 받은 것입니다. --version-intensity 2는 시험 신호의 강도를 낮추는 옵션으로, 까다로운 서비스와의 대화를 짧게 끝냅니다.
왜: -sV는 만능이 아닙니다. 출력에 없다고 서비스가 없는 게 아니고, 이름이 있다고 그게 진짜인 것도 아닙니다. 비판적으로 읽는 눈이 실력입니다.
3-8. NSE 스크립트 — 자동 조사관 붙이기
입력
nmap --script http-title -p 8000 127.0.0.1
출력 (2026-09-09 실측):
PORT STATE SERVICE
8000/tcp open http-alt
|_http-title: Site doesn't have a title (text/html).
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
읽는 법: |_로 시작하는 들여쓴 줄이 NSE 스크립트가 추가로 캐낸 정보입니다. http-title 스크립트가 웹페이지에 접속해 제목을 읽었고, 우리의 연습 페이지에는 제목이 없다고 보고했습니다. 스크립트가 무엇을 하는지는 물어볼 수 있습니다.
입력
nmap --script-help http-title
출력 (2026-09-09 실측, 일부):
http-title
Categories: default discovery safe
Shows the title of the default page of a web server.
The script will follow up to 5 HTTP redirects, using the default rules in the http library.
왜: nmap의 진짜 힘은 이 스크립트 생태계에 있습니다. 수백 개를 외울 수는 없으니, --script-help로 물어보며 조합하는 능력이 숙련의 본체입니다.
3-9. 핑 스캔과 파일 저장
포트를 보기 전에 "살아 있니?"만 묻는 핑 스캔과, 결과를 파일로 남기는 법입니다.
입력
nmap -sn 127.0.0.1
nmap -sV --version-intensity 2 -p- -oN scan_localhost.txt 127.0.0.1
출력 (2026-09-09 실측):
# -sn
Nmap scan report for localhost (127.0.0.1)
Host is up.
Nmap done: 1 IP address (1 host up) scanned in 0.00 seconds
저장된 파일 scan_localhost.txt의 첫 줄을 보면 (2026-09-09 실측):
# Nmap 7.94SVN scan initiated Wed Sep 9 13:37:10 2026 as: nmap -sV --version-intensity 2 -p- -oN scan_full.txt 127.0.0.1
읽는 법: -oN으로 저장한 파일은 첫 줄에 스캔 일시와 사용한 명령 전문이 자동으로 적힙니다. "재현 가능한 기록"이 공짜로 만들어집니다. 이 파일은 다음 챕터(Step 82)에서 파이썬으로 파싱해 위험도 표로 가공할 재료입니다.
왜: 초보는 스캔하고 끝내지만, 실무자는 스캔하고 기록합니다. 석 달 뒤의 내가 "그때 이 장비에 뭐가 열려 있었지?"라고 물을 때 대답할 수 있는 사람은, 오늘 -oN으로 파일을 남긴 사람뿐입니다.
4. 미션과 연습문제
미션 — 내 컴퓨터 정찰 리포트
- 연습용 서비스를 하나 더 엽니다. 다른 포트(예:
python3 -m http.server 8080)로 간이 서버를 추가하세요. nmap -sV -oN scan_localhost.txt 127.0.0.1으로 기본 스캔 리포트를 만들고,nmap -p- -oN scan_full.txt 127.0.0.1로 전수 스캔 리포트를 만듭니다.- 두 파일을 비교해 "기본 스캔만으로는 놓치는 포트"를 노트에 적습니다.
- 전수 스캔에서 발견한 포트 중 내가 모르는 것이 있으면
-sV로 정체를 조사하고, 그 과정과 결론을 리포트 끝에 적습니다. - 리포트 첫머리에 스캔 일시, 대상, 사용한 명령이 있는지 확인합니다(
-oN이 자동 기록).
연습문제
문제 1. -sT와 -sS의 결과 표는 같은데도 왜 두 가지 방식이 존재하나요? "과정"에서 무엇이 다른지 설명해 보세요.
문제 2. 기본 스캔의 SERVICE 열에 http-alt라고 적혀 있고, -sV의 SERVICE 열에는 http라고 적혀 있습니다. 어느 쪽을 믿어야 하며 그 근거는 무엇인가요?
문제 3. 전수 스캔(-p-)에서 기본 스캔에 없던 33211/tcp open unknown이 발견됐습니다. 방어자 입장에서 이 발견의 의미와 다음 행동을 말해 보세요.
문제 4. -sV가 "1 service unrecognized despite returning data"라고 답했습니다. 무슨 뜻이며, 정체를 추리할 수 있는 단서가 출력의 어디에 있나요?
5. 모범 답안과 완료 기준
미션 모범 답안
미션 수행 예 (2026-09-09 실측 환경 기준):
# 1. 두 번째 연습 서비스
cd steplab && python3 -m http.server 8080
# 2. 두 리포트
nmap -sV -oN scan_localhost.txt 127.0.0.1
nmap -p- -oN scan_full.txt 127.0.0.1
기본 스캔 리포트에는 8000번과 8080번만 보이고, 전수 스캔 리포트에는 여기에 33211번 같은 "조용히 돌던 서비스"가 추가로 나타납니다 (실측 환경에서는 33211/tcp open unknown — 2026-09-09). 노트에는 "기본 1000개 밖에도 열린 문이 있을 수 있으므로, 점검은 전수 스캔으로 마무리한다"고 적습니다.
모르는 포트의 정체 조사 예:
nmap -sV --version-intensity 2 -p 33211 127.0.0.1
ss -tlnp | grep 33211 # 어느 프로그램이 열었는지 (관리자 권한 필요)
실측에서는 지문 속 404: Page Not Found 응답으로 "HTTP 비슷한 대답을 하는 서비스"임을 확인했고, ss 명령으로 컨테이너 관리 프로그램이 연 포트임을 최종 확인했습니다. 검증하는 법: ① 두 리포트 파일이 존재하고 첫 줄에 명령 전문이 있는가. ② "놓치는 포트"가 노트에 구체적 번호로 적혔는가. ③ 모르는 포트의 정체 추리 과정(어떤 명령을 썼고 무엇을 보고 판단했는지)이 기록됐는가.
연습문제 해답
문제 1 해답. 결론(열린 포트 목록)은 같지만 과정이 다릅니다. -sT는 연결을 끝까지 완성하므로 상대 서비스의 로그에 접속 기록이 남고, -sS는 악수를 중간에 멈추므로 흔적이 적고 빠릅니다. 권한 요구도 다릅니다 — -sS는 날 패킷을 만들어야 해서 관리자 권한이 필요합니다.
문제 2 해답. -sV 쪽을 믿습니다. 기본 스캔의 이름은 포트 번호에 대한 관례적 추정(번호표 조회)일 뿐 실제 확인이 아닙니다. -sV는 실제로 접속해 배너와 응답을 분석하므로 근거가 있습니다. 실측에서도 같은 8000번이 http-alt(추정)에서 http — SimpleHTTPServer 0.6(확인)으로 바뀌었습니다.
문제 3 해답. "내가 모르는 열린 문이 이 장비에 있다"는 뜻이며, 이것이 바로 공격 표면의 숨은 칸입니다. 다음 행동: -sV로 정체를 조사하고, ss -tlnp 같은 명령으로 어느 프로그램이 열었는지 확인한 뒤, 필요 없는 서비스면 끄거나 막습니다. 모르는 포트를 모른 채로 두는 것이 가장 나쁜 선택입니다.
문제 4 해답. "서비스가 응답은 하는데, nmap의 데이터베이스에 없는 모양"이라는 뜻입니다. 단서는 바로 아래에 인쇄되는 지문(fingerprint)에 있습니다 — 실측 지문에는 GetRequest 시험에 대한 응답으로 HTTP/1.0 404 Not Found가 적혀 있어, 이 서비스가 HTTP 형식으로 대답한다는 것을 읽어낼 수 있습니다.
완료 기준 체크리스트
- [ ] 기본 스캔과
-sV의 SERVICE 열 차이를 설명할 수 있다 - [ ]
-sT와-sS의 차이를 과정(흔적, 권한)으로 설명할 수 있다 - [ ]
-p-전수 검사로 기본 스캔이 놓치는 포트를 찾아냈다 - [ ]
-O의 답이 "추측"임을 실험(No exact OS matches)으로 확인했다 - [ ] NSE 스크립트를 하나 이상 사용해 봤다
- [ ]
-oN으로 재현 가능한 리포트 파일을 남겼다 - [ ] 미션: 내 컴퓨터 정찰 리포트 두 부를 완성했다
6. 흔한 실수와 해결
벽 1. sudo 없이 -sS를 쓰니 오류가 나요
증상 (2026-09-09 실측, 일반 사용자로 실행):
You requested a scan type which requires root privileges.
QUITTING!
원인: SYN 스캔은 날 패킷을 직접 만드는 일이라 운영체제가 관리자에게만 허락합니다 (Step 80 복습).
해결: sudo를 붙이세요. 권한이 없는 환경에서는 -sT(connect 스캔)를 쓰면 됩니다 — 결론은 같습니다 (3-4절 실측 참조).
벽 2. -sV가 이상하게 오래 걸리거나 멈춘 것 같아요
증상 (2026-09-09 실측): 정체 불명 서비스에 기본 강도의 -sV를 걸었더니 한 포트에서 수십 초를 잡아먹고, 전수 스캔과 합치면 시간 제한에 걸려 Skipping host ... due to host timeout이 나오기도 했습니다.
원인: 연결은 잘 붙는데 대답을 얼렁뚱땅하는 서비스가 있으면, nmap이 시험 신호를 기다리며 시간을 씁니다.
해결: --version-intensity 2로 시험 강도를 낮추세요. 포트 하나 조사에 6초 안팎으로 줄어듭니다 (3-7절 실측). 전수+버전 조합은 마지막에, 필요한 포트만 골라서 하세요.
벽 3. 스캔해도 아무것도 안 열려 있다고 나와요
증상 (2026-09-09 실측, 연습 서버를 띄우기 전):
All 1000 scanned ports on localhost (127.0.0.1) are in ignored states.
Not shown: 1000 closed tcp ports (reset)
원인: 말 그대로 유명한 1000개 포트가 전부 닫혀 있는 것입니다. 고장이 아닙니다.
해결: 열린 문이 없다는 것도 유효한 진단 결과입니다. 연습을 위해 3-1의 간이 서버를 열고 다시 스캔하거나, -p-로 시야를 넓혀 보세요 — 실측 환경에서는 전수 검사에서 33211번이 발견됐습니다.
벽 4. Host seems down이라고 나와요
증상 (출력 예시): 분명 켜져 있는 장비인데 "꺼져 있는 것 같다"고 나옵니다.
원인: nmap은 스캔 전에 생사 확인(핑)을 하는데, 방화벽이 그 확인만 막는 경우가 있습니다.
해결: -Pn(생사 확인 생략) 옵션을 추가하세요. 단, 꺼진 대상에는 모든 포트에서 기다리니 시간이 길어집니다.
벽 5. SERVICE 열의 이름을 그대로 믿어요
증상: 9999/tcp open abyss를 보고 "abyss 서비스가 돌고 있구나"라고 리포트에 씁니다.
원인: 기본 스캔의 이름은 번호표의 관례일 뿐입니다. abyss는 9999번의 관례 이름이지 실체가 아닙니다.
해결: -sV로 확인하기 전까지 서비스 이름은 "추정"으로 표기하세요. 실측에서도 http-alt(추정)가 SimpleHTTPServer 0.6(실체)으로 정정됐습니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 정찰(reconnaissance) | 공격·방어 공통의 첫 단계 — 대상의 열린 문을 파악하는 일 |
| 포트 상태 | open(서비스 대기 중) / closed(닫힘, RST 응답) / filtered(방화벽) |
| 관례 이름과 실체 | SERVICE 열의 이름은 번호표 추정, 실체는 -sV가 확인 |
| NSE | nmap 내장 스크립트 엔진 — 제목 읽기, 취약점 점검 등 자동 조사 |
| 지문(fingerprint) | 정체 불명 서비스의 응답 샘플 — 정체보다 "응답의 모양"을 보여 줌 |
| 공격 표면(attack surface) | 밖으로 열린 접점의 총합 — 기본 스캔 밖의 포트까지 포함 |
오늘의 명령어
| 명령 | 하는 일 |
|---|---|
nmap 대상 |
유명한 1000개 포트 기본 스캔 |
nmap -sT / sudo nmap -sS |
connect 스캔 / SYN 스캔 (결론은 같고 흔적이 다름) |
nmap -sV |
서비스의 실제 이름과 버전 탐지 (느림) |
sudo nmap -O |
운영체제 추측 (추측일 뿐, 실패도 정직하게 보고) |
nmap -sn 대역 |
포트 검사 없이 생사만 확인 (핑 스캔) |
nmap -p- |
65535개 전수 검사 |
nmap --script 이름 |
NSE 스크립트 실행, --script-help로 설명 조회 |
nmap -oN 파일 |
명령 전문이 적힌 재현 가능한 리포트 저장 |
명령어보다 중요한 감각
nmap 출력 한 장은 공격자에게는 침입 계획서의 목차이고, 방어자에게는 점검표입니다. 정확히 같은 데이터입니다. 그래서 이 도구를 켤 때마다 "내가 이 대상을 검사할 권한이 있는가"를 먼저 물어야 합니다 — 오늘 모든 실측이 127.0.0.1에서 이뤄진 이유입니다.
그리고 세 가지 습관을 몸에 붙이세요. 첫째, 출력의 이름과 실체를 구분합니다 — http-alt가 아니라 SimpleHTTPServer 0.6을 찾는 눈. 둘째, 기본 시야(1000개)의 한계를 압니다 — 오늘 전수 검사에서 33211번이 튀어나온 것처럼요. 셋째, 스캔하고 기록합니다. -oN 파일 첫 줄의 명령 전문이 석 달 뒤의 여러분을 구할 것입니다. 원리를 손으로 먼저 만들어 본 여러분에게, nmap의 흑백 출력은 이제 익숙한 친구의 얼굴입니다.
전부 체크되면 Step 81 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.