Ping ACK (-PA)

Este técnica es similar al Ping SYN, con la diferencia que se envía al inicio un paquete TCP ACK, por lo que el host destino siempre deberá responder con un paquete RST, siendo esto suficiente para revelar la presencia del objetivo en la red, vamos a usar las mismas opciones que en el Ping SYN para asegurar que el comportamiento sea el esperado

$ nmap -sn -PA --send-ip -n 192.168.1.254
1 0.000000  192.168.1.6      192.168.1.254  TCP  74  34408 > http [SYN] ...
2 0.008413  192.168.1.254    192.168.1.6    TCP  60  http > 34408 [SYN, ACK] ...
3 0.008445  192.168.1.6      192.168.1.254  TCP  54  34408 > http [ACK] ...
4 0.008500  192.168.1.6      192.168.1.254  TCP  54  34408 > http [RST, ACK] ...

Como se puede apreciar en la captura Nmap no realizó la tarea esperada, ya que realizó una conexión TCP completa (paquetes 1,2,3) y por último terminó la conexión. Esto ocurrió por que un usuario sin privilegios como en el caso anterior no puede generar por si solo un paquete TCP ACK, esto sólo lo puede hacer el usuario root:

# nmap -sn -PA --send-ip -n 192.168.1.254
1 0.000000  192.168.1.6   192.168.1.254  TCP  54 45355 > http [ACK] ...
2 0.002604  192.168.1.254 192.168.1.6    TCP  60 http > 45355 [RST] ...

De esta manera obtenemos el comportamiento esperado del Ping ACK.

Ping ARP (-PR)

Cuando estamos realizando el descubrimiento de red en nuestro mismo segmento de red, es recomendable que se use este tipo de ping ya que es el más rápido en esta situación.

$ nmap -sn -PR -n 192.168.1.254

Si ejecutamos la orden anterior no pasará nada porque la ejecutamos con un usuario sin privilegios y no podrá generar los paquetes ARP, por lo tanto la captura de paquetes con wireshark será vacía y el reporte de Nmap será erróneo, ya que nos dirá que no encontró ningún host en la dirección indicada:

Starting Nmap 6.00 ( http://nmap.org ) at ...
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 0.00 seconds

Lo que tenemos que hacer entonces es ejecutar lo anterior como usuario root, de esta manera se produce el efecto buscado:

# nmap -sn -PR -n 192.168.1.254
Starting Nmap 6.00 ( http://nmap.org ) at ...
Nmap scan report for 192.168.1.254
Host is up (0.0046s latency).
MAC Address: ...
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

Ahora el reporte nos dice que encontró el host objetivo, y la captura de Nmap nos indica cómo ha funcionado el ping:

1 0.000000  ...  Broadcast  ARP  42  Who has 192.168.1.254?  Tell 192.168.1.6
2 0.004065  ...  ...        ARP  60  192.168.1.254 is at ...

Como este tipo de ping está basado en el protocolo ARP, lo que hace es una petición ARP Request mediante un mensaje Broadcast de capa 2 preguntando quien tiene la dirección IP indicada y el objetivo responde con una ARP Reply en la cual indica cual es su dirección MAC, con estos dos simples paquetes detectamos que el host objetivo está activo en la red.

Como hemos podido observar en varios ejemplos para sacarle mejor provecho a Nmap es mejor ejecutarlo como el usuario root, los ejemplos de ahora en adelante serán ejecutados de esta manera. Recomiendo que ustedes mismos comparen las capturas y evidencien las diferencias del comportamiento de Nmap al ejecutarlo como un usuario sin privilegios y como el usuario root.