> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/ejpt-notes/metodologias-de-evaluacion/footprinting-y-escaneo/descubrimiento-de-hosts/descubrimiento-de-hosts-con-nmap.md).

# Descubrimiento de hosts con Nmap

El descubrimiento de hosts es el primer paso práctico en la fase de escaneo de una auditoría de seguridad. En este proceso, buscamos determinar **qué máquinas están activas** en una red objetivo.

Una de las herramientas más poderosas y utilizadas para este fin es **Nmap (Network Mapper)**.

***

## 🧱 Comandos Básicos de Descubrimiento de Hosts

Estos comandos están orientados a identificar máquinas activas en una red sin realizar escaneos intrusivos.

***

#### 🔎 Escaneo Ping Básico (sin escanear puertos)

```bash
nmap -sn 192.168.1.0/24
```

* `-sn`: Realiza solo descubrimiento de hosts (ping scan), sin escanear puertos.
* `192.168.1.0/24`: Rango de red a escanear.

🔧 *Este comando te mostrará qué hosts están "vivos" dentro de la red sin enviar probes de puertos.*

***

#### 🌐 Escaneo de Red con Resolución de DNS

```bash
nmap -sn -R 192.168.1.0/24
```

* `-R`: Fuerza resolución DNS de los hosts.
* Útil si estás interesado en obtener nombres de host junto con las IPs activas.

***

#### 📶 Detección de Hosts en Red Local (ARP)

```bash
sudo nmap -sn 192.168.1.0/24
```

* Si estás escaneando una red local, Nmap usará ARP en lugar de ICMP, lo cual es más fiable.

***

#### 💥 Escaneo Silencioso de Host (Evita detección)

```bash
nmap -sn -n -T2 192.168.1.0/24
```

* `-n`: No resuelve nombres de host.
* `-T2`: Reduce la velocidad del escaneo para ser más sigiloso (modo "polite").

***

## 🧠 Comandos Avanzados de Descubrimiento de Hosts

En esta sección usamos técnicas más sofisticadas para evadir firewalls, realizar descubrimientos encubiertos o sobre redes protegidas.

***

#### 🔁 Ping TCP SYN personalizado

```bash
nmap -PS80,443 192.168.1.0/24
```

* `-PS`: Envía paquetes TCP SYN a los puertos especificados (80 y 443 en este caso).
* Útil para redes donde ICMP está bloqueado.

***

#### 🧱 Ping TCP ACK

```bash
nmap -PA80 192.168.1.0/24
```

* `-PA`: Envío de paquetes TCP ACK. Algunos firewalls permiten pasar este tipo de tráfico.

***

#### 📤 Ping UDP

```bash
nmap -PU53 192.168.1.0/24
```

* `-PU`: Envía paquetes UDP al puerto 53 (DNS). Algunos firewalls permiten este tipo de tráfico.

***

#### 🧬 Combinando Técnicas

```bash
nmap -PE -PS22,80,443 -PA80 -PU53 192.168.1.0/24
```

* Combinación de ICMP Echo, TCP SYN, TCP ACK y UDP Ping.
* Ideal para maximizar las posibilidades de detectar hosts activos.

***

#### 👻 Ping "sin ping" (para hosts que bloquean ICMP y TCP)

```bash
nmap -Pn 192.168.1.0/24
```

* `-Pn`: Desactiva completamente el ping. Nmap asume que todos los hosts están activos.
* Útil si sabes que hay filtros que bloquean todo tipo de ping pero necesitas escanear igual.

***

## 🧹 Script Bash: Ping Sweep usando Nmap

Este pequeño script recorre una subred y muestra qué hosts están activos, ideal para redes internas:

```bash
#!/bin/bash

echo "[+] Descubriendo hosts activos en la red 192.168.1.0/24..."
for ip in $(seq 1 254); do
    ping -c 1 -W 1 192.168.1.$ip | grep "64 bytes" &> /dev/null && echo "Host activo: 192.168.1.$ip"
done
```

🔧 Puedes modificar `192.168.1` por el rango de tu red. El script envía un solo ping a cada IP y muestra los que responden.

***

## 🧪 Laboratorio Práctico

**Paso 1:** Abra el enlace del laboratorio para acceder a la máquina Kali.

<figure><img src="/files/wFjqhJJBimOg7A0Swe3I" alt=""><figcaption></figcaption></figure>

**Paso 2:** Haga ping a la máquina de destino para ver si está activa o no.

**Dominio:**

```
ping -c 5 demo.ine.local
```

<figure><img src="/files/6t7n8EvPejzEf8NNXJkT" alt=""><figcaption></figcaption></figure>

Podemos observar que el objetivo no responde a las solicitudes de ping, por lo que esto no confirma si está activo o inactivo.

**Paso 3:** Ejecute un escaneo de Nmap contra el objetivo.

**Dominio:**

```
nmap demo.ine.local
```

<figure><img src="/files/eh5Kn67gKZRmeIcrNOae" alt=""><figcaption></figcaption></figure>

Nmap tampoco pudo detectar si el host estaba activo. Muchas herramientas de seguridad primero hacen ping al host antes de comenzar a escanear o explotar el objetivo. En ese caso, es necesario usar opciones avanzadas de Nmap, como -A o -T5, para obtener el resultado correcto.

En nmap, hay una opción: -Pn (Tratar todos los hosts como si estuvieran en línea; omitir la detección de hosts). Esta opción forzará el escaneo incluso si se detecta que el objetivo está inactivo en la detección de hosts.

**Paso 4:** Ejecutar Nmap usando la opción -Pn para descubrir todos los puertos activos.

**Dominio:**

```
nmap -Pn demo.ine.local
```

<figure><img src="/files/NDH1S6KNRa4gJlSIciIR" alt=""><figcaption></figcaption></figure>

Podemos ver que hay varios puertos abiertos en la máquina de destino.

Ahora, escanearemos cualquier puerto aleatorio que no esté abierto. En este caso, escanearemos el puerto 443. Si el puerto no está abierto, recibiremos una salida filtrada de ese puerto.

**Dominio:**

```
nmap -Pn -p 443 demo.ine.local
```

<figure><img src="/files/vgOosmLD6hO1DhpvYEFH" alt=""><figcaption></figcaption></figure>

Podemos observar en la salida de Nmap que el host está activo, pero el puerto 443 está filtrado.

**Acerca del puerto filtrado:**

Nmap no puede determinar si el puerto está abierto porque el filtrado de paquetes impide que sus sondas lo alcancen. El filtrado podría provenir de un cortafuegos dedicado, reglas de router o software de cortafuegos basado en host. Estos puertos frustran a los atacantes por su escasa información. A veces responden con mensajes de error ICMP, como el tipo 3, código 13 (destino inalcanzable: comunicación administrativamente prohibida), pero los filtros que simplemente descartan las sondas sin responder son mucho más comunes. Esto obliga a Nmap a reintentar varias veces por si la sonda se descartó debido a la congestión de la red en lugar del filtrado. Esto ralentiza considerablemente el análisis.

**Fuente:** <https://nmap.org/book/man-port-scanning-basics.html>

**Paso 5:** De manera similar, si queremos descubrir la aplicación que se está ejecutando en el puerto 80, podríamos usar la opción -sV, y esta opción se utiliza para determinar la información de la versión de la aplicación.

**Dominio:**

```
nmap -Pn -sV -p 80 demo.ine.local
```

<figure><img src="/files/PPdlRJOuDb5HAPFsGoSo" alt=""><figcaption></figcaption></figure>

Esta es una de las formas en las que podemos descubrir una máquina que está detrás de un firewall, forzando a las herramientas a escanearla.

#### Conclusión

En este laboratorio, vimos un método estándar para descubrir hosts usando Nmap, que está detrás de un firewall.

#### Referencias

* [Nmap](https://nmap.org/)
