Tengo una aplicación C# que escribí y que escucha en el puerto 789. Se ejecuta en una computadora con Windows XP Professional. Correr
netstat -an | find "789"
TCP 0.0.0.0:789 0.0.0.0:0 LISTENING
Cuando ejecuto nmap -A -vv ip
en una máquina Linux diferente (pero en la misma subred), solo informa otros puertos abiertos en el host (es decir, mysql, vnc, etc.), pero no el puerto abierto por mi aplicación.
Sin embargo, cuando corro nmap -p 789 ip
me sale:
PORT STATE SERVICE
789/tcp open unknown
¿Por qué hay una diferencia entre los dos escaneos de nmap? ¿Hay algo que pueda hacer para garantizar que nmap detecte el puerto abierto al realizar un análisis completo?
Respuesta1
De forma predeterminada, nmap solo busca puertos "comunes" (creo que los 1000 puertos más comunes por protocolo). Dado que 789 no es un puerto común, no se encuentra. Si lo haces
nmap -A -vv -p- ip
debería escanear los puertos 1-65535.
Aquí está la documentación de nmap que indica qué puertos se escanean de forma predeterminada: http://nmap.org/book/man-port-specification.html
Respuesta2
La única forma de hacerlo es modificando el archivo de servicios de nmap, lo cual no se recomienda. La -A
opción ejecuta opciones avanzadas, incluida la detección de servicios, la detección del sistema operativo, el seguimiento de rutas, etc.; no analiza todo el rango. Si desea escanear todos los puertos de 65k, use la opción -p-
. Aparte de eso, sólo tienes que especificar el puerto con -p 789
. Probablemente su mejor opción sea crear un alias que lo haga nmap -p 789
para ahorrar tiempo.
Si realmente necesita cambiar el archivo de servicios (/usr/local/share/nmap/nmap-services de forma predeterminada), busque la línea que dice unknown 789/tcp 0.000075
y reemplácela con el nombre de su programa, y coloque el número al final en 0.9
, para que sea el puerto superior nmap incluye. Sin embargo, un alias sería mucho mejor.
Respuesta3
No estoy seguro. Lo detecta como "abierto", que es lo que quieres, ¿verdad? Por lo queesescuchando. Por qué no se encuentra con -A, no estoy seguro.
Editar: esto proviene de documentación antigua que podría no aplicarse a su versión. Ejecute man nmap
y díganos qué versión tiene.
De los documentos, veo:
"El valor predeterminado es escanear todos los puertos entre 1 y 1024, así como cualquier puerto enumerado en el archivo de servicios que viene con nmap".
Por lo tanto, se debe escanear el 789, incluso si no lo tiene en su archivo de servicios (dado que está etiquetado como "desconocido", estoy seguro de que no lo es).
Así, no lo sé. Verifique su archivo man para ver su versión de nmap, ¿tal vez su comportamiento sobre qué puertos escanear usando -A sea diferente del documento que encontré?
Esto es poco probable, pero valdría la pena investigarlo: la diferencia puede estar en su ID de usuario en la máquina Linux. Los usuarios privilegiados y no privilegiados de NMap tienen diferentes tipos de análisis predeterminados. Los usuarios con root pueden realizar escaneos TCP SYN, los usuarios sin root utilizarán TCP connect() de forma predeterminada.
Respuesta4
El nmap -A
es el comando agresivo ya que ejecutará varios scripts en segundo plano y esa es la razón principal por la que le dará más resultados. Combina la detección de versión -sV
con la detección del sistema operativo -O
(letra O mayúscula y no el número cero) y otros scripts de descubrimiento. Nmap de forma predeterminada y, si no se proporciona el número de puerto específico, escaneará los primeros 1000 puertos más comunes (estos se especifican en elservicios-nmaparchivo que puedes editar). El comando agresivo se puede alimentar con los puertos que desea escanear para que no obtenga los resultados de otros puertos además del que desea escanear, TCP 789.
nmap -p 789 -A TARGET_IP_ADDRESS_OR_IP_RANGE
mientras que si solo desea verificar si el puerto, 789 en su caso, está abierto/cerrado/filtrado
nmap -p 789 TARGET_IP_ADDRESS_OR_IP_RANGE
Dado que -A
ejecuta varios scripts y es ruidoso (en términos de tráfico de red), los IDS lo marcan fácilmente y lo más probable es que lo bloqueen los firewalls o IPS y esa puede ser una de las razones por las que no proporciona el estado correcto del puerto.