### Common
```bash
sudo nmap -sS <IP> -Pn -n --open -p- -oN tcpAll
sudo nmap <IP> --min-rate 4000 -Pn -n -p- -N tcpAll
sudo nmap -sC -sV <IP> -p <open ports> -oN tcpDetailed
sudo nmap -sU --min-rate 4000 -p- udpAll
```
```bash
nmap -sT <IP> # Connect scan, full TCP connection
sudo nmap -sS <IP> # SYN scan, faster, requires elevated privilege
sudo nmap -sU <IP> # UDP scan, with sudo required to access raw sockets
sudo nmap -sU -sS <IP> # UDP + SYN
```
### Network Sweep example
```bash
nmap -v -sn 192.168.50.1-253 -oN ping-sweep.txt
Host: 192.168.50.10 () Status: Up
Host: 192.168.50.15 () Status: Down
...
grep Up ping-sweep.txt | cut -d " " -f 2
192.168.50.10
192.168.50.20
```
### NSE (Nmap Scripting Engine)
located in `/usr/share/nmap/scripts` directory
### Port scanning flow in a network
```bash
nmap -sn 192.168.123.0/24 -oN pingscan # ping scan to identify live hosts
grep 192 pingscan | cut -d " " -f 5 > pingscanIPs # Extract IPs of live hosts
sudo nmap -iL pingscanIPs -Pn -n --open -p- # port scanning on live hosts
```
| 옵션 | 설명 |
| ----------- | ----------------------------------------------------- |
| `-sS` | **TCP SYN 스캔 (Stealth Scan)** – 빠르고 탐지 어려움 |
| `-sT` | **TCP Connect 스캔** – 일반적인 TCP 연결 (권한 없이도 사용 가능) |
| `-sU` | **UDP 스캔** – 느리지만 UDP 서비스 식별에 필요 |
| `-sV` | **서비스 버전 식별** – 실행 중인 서비스의 상세 버전 확인 |
| `-sC` | **기본 스크립트 실행** – NSE(스크립트 엔진)의 기본 스크립트 사용 |
| `-A` | `-sV -sC -O -traceroute` 조합 (종합적인 탐지) |
| `-O` | **OS 추측** – 대상 운영체제 감지 시도 |
| `-Pn` | **핑 스킵** – 호스트가 응답하지 않아도 무조건 스캔 |
| `-sn` | **핑 스캔만 수행** – 포트 스캔 없이 호스트 살아있는지만 확인 |
| `-p` | **포트 지정** – 스캔할 포트 범위 설정 (`-p 22,80,443`, `-p-` 전체 등) |
| `-T0`~`-T5` | **속도 조절** – `T4`는 빠른 스캔, `T0`은 가장 느리게 (스텔스용) |
| `-n` | **DNS 조회 생략** – 빠른 스캔 (IP만 사용) |
| `-v`, `-vv` | **Verbose 모드** – 스캔 진행 상황 자세히 표시 |
| `-oN` | **일반 텍스트 출력** – `nmap.txt`처럼 저장 |
| `-oG` | **grep 가능한 출력 형식** – 자동화/스크립트에 적합 |
| `-oX` | **XML 출력** – 툴 연동용, 예: Metasploit |
| `--script` | **NSE 스크립트 지정 실행** – `--script=ftp-anon,http-title` 등 |