← Blog / Pentesting

Nmap od podstaw – kompletny przewodnik po skanowaniu sieci

Nmap od podstaw – kompletny przewodnik po skanowaniu sieci

Nmap (Network Mapper) to jedno z najstarszych i najpotężniejszych narzędzi w arsenale każdego specjalisty ds. bezpieczeństwa i administratora sieci. Pozwala na odkrywanie hostów, skanowanie portów, detekcję usług, identyfikację systemów operacyjnych oraz uruchamianie zaawansowanych skryptów automatyzujących audyt.

W tym artykule znajdziesz dziesiątki konkretnych przykładów z opisami — od absolutnych podstaw aż po zaawansowane techniki używane podczas profesjonalnych testów penetracyjnych.

⚠️ Ważne: Skanowanie sieci bez zgody właściciela jest nielegalne. Wszystkie przykłady wykonuj wyłącznie na własnej infrastrukturze lub w ramach autoryzowanego pentestu.


Instalacja

Ubuntu / Debian

sudo apt update && sudo apt install -y nmap

RHEL / CentOS / Rocky Linux

sudo dnf install -y nmap

Weryfikacja wersji

nmap --version
# Nmap version 7.94 ( https://nmap.org )

1. Odkrywanie hostów (Host Discovery)

Ping scan – szybkie wykrywanie aktywnych hostów w sieci

nmap -sn 192.168.1.0/24

Nmap wysyła pakiety ICMP Echo Request do wszystkich adresów w podsieci. Nie skanuje portów — tylko sprawdza, które hosty odpowiadają. Przydatne do szybkiej inwentaryzacji sieci lokalnej.

Nmap scan report for 192.168.1.1
Host is up (0.0012s latency).
Nmap scan report for 192.168.1.10
Host is up (0.0034s latency).
Nmap scan report for 192.168.1.105
Host is up (0.0021s latency).

Odkrywanie hostów bez pinга (omijanie firewalla)

nmap -sn -PS80,443,22 192.168.1.0/24

Wysyła TCP SYN na porty 80, 443 i 22 zamiast ICMP. Przydatne gdy firewall blokuje ping, ale przepuszcza ruch HTTP/SSH.

Skanowanie z listy celów z pliku

nmap -sn -iL targets.txt

Plik targets.txt może zawierać adresy IP, zakresy CIDR lub nazwy hostów — jeden na linię.

Wyłączenie DNS lookup (szybsze skanowanie)

nmap -sn -n 10.0.0.0/8

Flaga -n pomija rozwiązywanie nazw DNS, co znacząco przyspiesza skanowanie dużych zakresów.


2. Skanowanie portów

Skanowanie domyślnych 1000 portów

nmap 192.168.1.10

Domyślnie Nmap skanuje 1000 najpopularniejszych portów TCP. Dobry punkt startowy dla szybkiego rekonesansu.

Skanowanie wszystkich 65535 portów

nmap -p- 192.168.1.10

Kompletne skanowanie — trwa dłużej, ale gwarantuje że nie przeoczysz żadnej usługi działającej na niestandardowym porcie.

Skanowanie konkretnych portów

nmap -p 22,80,443,3306,5432 192.168.1.10

Skanujesz tylko podane porty. Świetne gdy wiesz czego szukasz — np. baz danych (3306 MySQL, 5432 PostgreSQL).

Skanowanie zakresu portów

nmap -p 1-1024 192.168.1.10

Skanuje porty od 1 do 1024 — tzw. “well-known ports”, gdzie działają standardowe usługi systemowe.

Skanowanie portów UDP

sudo nmap -sU -p 53,67,68,123,161,500 192.168.1.1

UDP jest często pomijane, a ukrywają się tam usługi takie jak DNS (53), DHCP (67/68), NTP (123), SNMP (161) czy VPN (500). Wymaga uprawnień root.

Skanowanie TCP i UDP jednocześnie

sudo nmap -sS -sU -p T:80,443,U:53,161 192.168.1.1

Prefix T: oznacza TCP, U: — UDP. Pozwala w jednym przebiegu przeskanować oba protokoły.


3. Typy skanowania

SYN Scan (domyślny, “half-open”)

sudo nmap -sS 192.168.1.10

Najpopularniejsza i najszybsza technika. Nmap wysyła SYN, czeka na SYN-ACK i od razu odpowiada RST — nie nawiązuje pełnego połączenia. Trudniejszy do wykrycia w logach aplikacji. Wymaga root.

TCP Connect Scan (bez roota)

nmap -sT 192.168.1.10

Używa systemowego connect(). Wolniejszy i bardziej widoczny w logach, ale nie wymaga uprawnień root. Dobry dla zwykłego użytkownika.

ACK Scan – mapowanie reguł firewalla

sudo nmap -sA 192.168.1.10

Służy nie do wykrywania otwartych portów, lecz do ustalenia czy porty są filtrowane przez firewall. Port “unfiltered” oznacza że firewall przepuszcza pakiet.

FIN / NULL / Xmas Scan – omijanie IDS

sudo nmap -sF 192.168.1.10   # FIN scan
sudo nmap -sN 192.168.1.10   # NULL scan (brak flag)
sudo nmap -sX 192.168.1.10   # Xmas scan (FIN+PSH+URG)

Techniki polegające na wysyłaniu pakietów z niestandarowymi flagami TCP. Niektóre starsze systemy i firewalle nie filtrują ich poprawnie. Na systemach Windows zazwyczaj nieskuteczne.

Idle Scan – skanowanie przez “zombie”

sudo nmap -sI 192.168.1.50 192.168.1.10

Zaawansowana technika ukrycia — Nmap skanuje cel (.10) używając adresu IP hosta zombie (.50). Twój adres IP nie pojawia się w logach celu. Wymaga hosta z przewidywalnym IPID.


4. Detekcja usług i wersji

Detekcja wersji uruchomionych usług

nmap -sV 192.168.1.10

Nmap próbuje określić dokładną wersję każdej usługi działającej na otwartym porcie. Kluczowe podczas audytu — znając wersję, możesz sprawdzić znane CVE.

PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.6
80/tcp  open  http    nginx 1.24.0
443/tcp open  ssl/https nginx 1.24.0
3306/tcp open mysql   MySQL 8.0.36

Intensywność detekcji wersji

nmap -sV --version-intensity 9 192.168.1.10

Skala 0–9. Wyższy poziom = więcej prób = wolniej, ale dokładniej. Domyślna wartość to 7.

Detekcja systemu operacyjnego

sudo nmap -O 192.168.1.10

Nmap analizuje odpowiedzi TCP/IP i próbuje dopasować “fingerprint” do bazy znanych systemów.

OS details: Linux 5.15 - 6.1
Network Distance: 1 hop

Agresywne skanowanie (wersja + OS + traceroute + skrypty)

sudo nmap -A 192.168.1.10

Odpowiednik -sV -O --traceroute -sC. Kompletna informacja o hoście w jednym poleceniu. Głośne i wolne — nie używaj na produkcji bez zgody.


5. Wydajność i szybkość skanowania

Profile szybkości (-T0 do -T5)

nmap -T0 192.168.1.10   # Paranoid – bardzo wolny, omija IDS
nmap -T1 192.168.1.10   # Sneaky
nmap -T2 192.168.1.10   # Polite – oszczędza przepustowość
nmap -T3 192.168.1.10   # Normal (domyślny)
nmap -T4 192.168.1.10   # Aggressive – szybszy, wymaga dobrego łącza
nmap -T5 192.168.1.10   # Insane – może gubić wyniki

Na własnej sieci lokalnej -T4 to dobry kompromis między szybkością a dokładnością.

Ręczna kontrola szybkości

nmap --min-rate 1000 --max-retries 2 192.168.1.0/24

Wymusza minimum 1000 pakietów/sekundę. Przydatne przy skanowaniu dużych sieci.

Równoległe skanowanie wielu hostów

nmap --min-hostgroup 64 192.168.1.0/24

Skanuje 64 hosty jednocześnie zamiast sekwencyjnie.


6. Skrypty NSE (Nmap Scripting Engine)

NSE to jeden z najpotężniejszych aspektów Nmapa. Skrypty są napisane w Lua i pozwalają automatyzować dziesiątki zadań audytowych.

Uruchomienie domyślnych skryptów

nmap -sC 192.168.1.10

Uruchamia skrypty z kategorii default — bezpieczne, szybkie, przydatne.

Wykrywanie podatności

nmap --script vuln 192.168.1.10

Sprawdza znane podatności: Heartbleed, MS17-010 (EternalBlue), ShellShock i inne.

Sprawdzenie podatności na EternalBlue (MS17-010)

nmap --script smb-vuln-ms17-010 -p 445 192.168.1.0/24

Skanuje całą sieć w poszukiwaniu maszyn Windows podatnych na exploit użyty przez WannaCry.

Host script results:
| smb-vuln-ms17-010: 
|   VULNERABLE:
|   Remote Code Execution vulnerability in Microsoft SMBv1
|     State: VULNERABLE
|     IDs:  CVE:CVE-2017-0144

Brute-force SSH

nmap --script ssh-brute -p 22 192.168.1.10

Próbuje zalogować się na SSH używając wbudowanej listy loginów i haseł. Tylko na własnych serwerach!

Enumeracja użytkowników SMB

nmap --script smb-enum-users -p 445 192.168.1.10

Wypisuje konta użytkowników dostępne przez protokół SMB (Windows / Samba).

Sprawdzenie konfiguracji SSL/TLS

nmap --script ssl-enum-ciphers -p 443 192.168.1.10

Wypisuje obsługiwane zestawy szyfrów (cipher suites) i ocenia ich bezpieczeństwo (A/B/C/F).

|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C

Wykrywanie Heartbleed (CVE-2014-0160)

nmap --script ssl-heartbleed -p 443 192.168.1.10

Detekcja HTTP headers i metod

nmap --script http-methods,http-headers -p 80,443 192.168.1.10

Sprawdza jakie metody HTTP akceptuje serwer (GET, POST, PUT, DELETE, TRACE — TRACE często powinien być wyłączony) oraz jakie nagłówki zwraca.

Skanowanie pod kątem domyślnych danych logowania

nmap --script http-default-accounts -p 80,8080,8443 192.168.1.0/24

Sprawdza popularne panele administracyjne (Tomcat, Jenkins, Router admin) pod kątem domyślnych haseł.

DNS zone transfer

nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=4geeker.com -p 53 192.168.1.1

Próbuje pobrać pełną strefę DNS. Jeśli się uda — serwer DNS jest źle skonfigurowany i ujawnia całą strukturę domeny.

Wykrywanie FTP Anonymous login

nmap --script ftp-anon -p 21 192.168.1.0/24

Sprawdza czy serwer FTP pozwala na logowanie bez hasła (użytkownik anonymous).

Enumeracja bazy danych MySQL

nmap --script mysql-databases,mysql-users -p 3306 192.168.1.10

Bez uwierzytelnienia lub z podanymi danymi wykrywa bazy danych i użytkowników MySQL.


7. Zapis wyników

Zapis do pliku tekstowego

nmap -sV 192.168.1.0/24 -oN wyniki.txt

Zapis w formacie XML (do dalszej analizy)

nmap -sV 192.168.1.0/24 -oX wyniki.xml

XML można importować do narzędzi takich jak Metasploit, Faraday, czy własnych skryptów Python.

Zapis w formacie grepable

nmap -sV 192.168.1.0/24 -oG wyniki.gnmap

Prosty format do szybkiego przetwarzania przez grep, awk, cut.

Zapis we wszystkich formatach jednocześnie

nmap -sV 192.168.1.0/24 -oA wyniki_pelne

Tworzy trzy pliki: wyniki_pelne.nmap, wyniki_pelne.xml, wyniki_pelne.gnmap.


8. Przykłady z realnego pentestu

Faza rekonesansu – pełny skan sieci

# Krok 1: Szybkie odkrycie hostów
sudo nmap -sn -n --min-rate 2000 10.10.10.0/24 -oG hosts_live.gnmap

# Krok 2: Wyciągnij żywe hosty do pliku
grep "Up" hosts_live.gnmap | awk '{print $2}' > hosts.txt

# Krok 3: Pełne skanowanie portów na żywych hostach
sudo nmap -sS -p- -n --min-rate 3000 -iL hosts.txt -oA full_ports

# Krok 4: Detekcja wersji i skrypty na znalezionych portach
sudo nmap -sV -sC -p 22,80,443,8080,8443,3306 -iL hosts.txt -oA services

Szybki audyt bezpieczeństwa serwera webowego

sudo nmap -sS -sV -p 80,443,8080,8443 \
  --script "http-methods,http-headers,ssl-enum-ciphers,ssl-heartbleed,http-default-accounts" \
  192.168.1.10 -oA web_audit

Audyt Active Directory / Windows

sudo nmap -sS -p 88,135,139,389,445,464,636,3268,3269 \
  --script "smb-vuln-ms17-010,smb-enum-users,ldap-rootdse" \
  10.10.10.0/24 -oA ad_audit

Skanowanie z fałszywym adresem źródłowym (decoy)

sudo nmap -D 10.0.0.1,10.0.0.2,ME 192.168.1.10

Nmap wysyła pakiety z kilku fałszywych adresów IP (decoy) razem z prawdziwym (ME). Utrudnia ustalenie rzeczywistego źródła skanu w logach firewalla.

Skanowanie przez proxy / Tor

nmap --proxies socks4://127.0.0.1:9050 192.168.1.10

Kieruje ruch przez SOCKS proxy (np. Tor). Uwaga: działa tylko z TCP Connect Scan (-sT).


9. Przydatne kombinacje flag

CelPolecenie
Szybki rekon sieci lokalnejnmap -sn 192.168.1.0/24
Pełny skan bez rootanmap -sT -sV -p- cel
Cichy skan omijający IDSsudo nmap -sS -T2 -f cel
Kompletny audyt hostasudo nmap -A -p- cel
Tylko otwarte porty w outputnmap --open 192.168.1.0/24
Skan z pominięciem pinгаnmap -Pn cel
Fragment pakietów (IDS evasion)sudo nmap -f cel
MTU customowysudo nmap --mtu 24 cel

10. Automatyzacja z bash

Skrypt do regularnego audytu sieci

#!/bin/bash
# audit-network.sh – uruchamiaj np. przez cron co tydzień

TARGET="192.168.1.0/24"
DATE=$(date +%Y%m%d_%H%M)
OUTDIR="/opt/nmap-audits/$DATE"

mkdir -p "$OUTDIR"

echo "[*] Odkrywanie hostów..."
sudo nmap -sn -n "$TARGET" -oG "$OUTDIR/hosts.gnmap"

LIVE=$(grep "Up" "$OUTDIR/hosts.gnmap" | awk '{print $2}' | tr '\n' ' ')
echo "[*] Znalezione hosty: $LIVE"

echo "[*] Skanowanie portów i usług..."
sudo nmap -sS -sV -O --script default,vuln \
  -p- --min-rate 2000 \
  $LIVE \
  -oA "$OUTDIR/full_scan"

echo "[+] Gotowe. Wyniki w: $OUTDIR"

Parsowanie XML wyników w Pythonie

import xml.etree.ElementTree as ET

tree = ET.parse("wyniki.xml")
root = tree.getroot()

for host in root.findall("host"):
    addr = host.find("address").get("addr")
    for port in host.findall("ports/port"):
        portid = port.get("portid")
        state = port.find("state").get("state")
        service = port.find("service")
        svc_name = service.get("name", "unknown") if service is not None else "unknown"
        version = service.get("version", "") if service is not None else ""
        if state == "open":
            print(f"{addr}:{portid} [{svc_name} {version}]")

Podsumowanie

Nmap to narzędzie, które rośnie razem z Tobą — od prostego nmap 192.168.1.1 aż po złożone pipeline’y rekonesansu z NSE. Kluczowe zasady:

  • Zawsze miej autoryzację przed skanowaniem jakiejkolwiek sieci
  • Zaczynaj od lekkiego odkrycia hostów, potem zagłębiaj się w szczegóły
  • Używaj -oA żeby zawsze zachować wyniki — przyda się przy raportowaniu
  • Łącz Nmapa z innymi narzędziami: Metasploit, Burp Suite, Nuclei, OpenVAS
  • Regularny automatyczny audyt własnej infrastruktury to dobra praktyka DevSecOps

Masz pytania o konkretną technikę lub chcesz zobaczyć jak zintegrować Nmapa z pipeline’em CI/CD? Napisz do nas: kontakt@4geeker.com