Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
masscan — Escáner de puertos TCP, lanza paquetes SYN de forma asíncrona, escaneando todo Internet en menos de 5 minutos. | Kitploit
Herramientas/GitHubGitHub/robertdavidgraham/masscan
Sniffing y Análisis de PaquetesReconocimientoMapeo de RedesEscaneo de PuertosRecopilación de InformaciónPruebas de PenetraciónTop en Mapeo de Redes #2Top en Sniffing y Análisis de Paquetes #17Top en Escaneo de Puertos #2
25.9k3.2k13hace 4 mesesRevisado por Kitploit
GitHubrobertdavidgraham/masscan

masscan

Escáner de puertos TCP, lanza paquetes SYN de forma asíncrona, escaneando todo Internet en menos de 5 minutos.

Ver Repositorio

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

unittests

MASSCAN: Escáner de puertos IP masivo

Este es un escáner de puertos a escala de Internet. Puede escanear todo Internet en menos de 5 minutos, transmitiendo 10 millones de paquetes por segundo, desde una sola máquina.

Su uso (parámetros, salida) es similar a nmap, el escáner de puertos más famoso. En caso de duda, pruebe una de esas características: se admiten funciones que respaldan el escaneo generalizado de muchas máquinas, mientras que el escaneo profundo de una sola máquina no se admite.

Internamente, utiliza transmisión asíncrona, similar a escáneres de puertos como scanrand, unicornscan y ZMap. Es más flexible, permitiendo rangos de puertos y direcciones arbitrarios.

NOTA: masscan utiliza su propia pila TCP/IP ad hoc. Cualquier cosa que no sean escaneos de puertos simples puede causar conflicto con la pila TCP/IP local. Esto significa que necesita usar la opción --src-ip para ejecutarse desde una dirección IP diferente, o usar --src-port para configurar qué puertos fuente usa masscan, y luego también configurar el cortafuegos interno (como o ) para aislar esos puertos del resto del sistema operativo.

pf
iptables

Esta herramienta es gratuita, pero considere contribuir económicamente a su desarrollo: Dirección de cartera Bitcoin: 1MASSCANaHUiyTtR3bJ2sLGuMw5kDBaj4T

Compilación

En Debian/Ubuntu, algo como lo siguiente. Realmente no tiene más dependencias que un compilador C (como gcc o clang).

root@kitploit:~
sudo apt-get --assume-yes install git make gcc
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make

Esto coloca el programa en el subdirectorio masscan/bin. Para instalarlo (en Linux) ejecute:

root@kitploit:~
make install

El código fuente consta de muchos archivos pequeños, por lo que la compilación es mucho más rápida usando la compilación multifhilo. Esto requiere más de 2 GB en una Raspberry Pi (y se rompe), por lo que podría usar un número más pequeño, como -j4 en lugar de todos los hilos posibles.

root@kitploit:~
make -j

Si bien Linux es la plataforma objetivo principal, el código funciona bien en muchos otros sistemas (Windows, macOS, etc.). Aquí hay información adicional de compilación:

  • Windows con Visual Studio: use el proyecto VS10
  • Windows con MinGW: simplemente escriba make
  • Windows con cygwin: no funcionará
  • Mac OS X con XCode: use el proyecto XCode4
  • Mac OS X con línea de comandos: simplemente escriba make
  • FreeBSD: escriba gmake
  • otros: intente compilar todos los archivos juntos, cc src/*.c -o bin/masscan

En macOS, los binarios x86 parecen funcionar igual de rápido bajo emulación ARM.

Uso

El uso es similar a nmap. Para escanear un segmento de red para algunos puertos:

root@kitploit:~
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112

Esto:

  • escaneará la subred 10.x.x.x y la subred 2603:3001:2d00:da00::x
  • escaneará el puerto 80 y el rango 8000 a 8100, o 102 puertos en total, en ambas subredes
  • imprimirá la salida en <stdout> que puede redirigirse a un archivo

Para ver la lista completa de opciones, use la función --echo. Esto vuelca la configuración actual y sale. Esta salida se puede usar como entrada de nuevo al programa:

root@kitploit:~
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo > xxx.conf
# masscan -c xxx.conf --rate 1000

Verificación de banner

Masscan puede hacer más que solo detectar si los puertos están abiertos. También puede completar la conexión TCP y la interacción con la aplicación en ese puerto para obtener información simple de "banner".

Masscan admite la verificación de banner en los siguientes protocolos:

  • FTP
  • HTTP
  • IMAP4
  • memcached
  • POP3
  • SMTP
  • SSH
  • SSL
  • SMBv1
  • SMBv2
  • Telnet
  • RDP
  • VNC

El problema con esto es que masscan contiene su propia pila TCP/IP separada del sistema en el que se ejecuta. Cuando el sistema local recibe un SYN-ACK del objetivo probado, responde con un paquete RST que mata la conexión antes de que masscan pueda obtener el banner.

La forma más fácil de evitar esto es asignarle a masscan una dirección IP separada. Esto se vería como uno de los siguientes ejemplos:

root@kitploit:~
# masscan 10.0.0.0/8 -p80 --banners --source-ip 192.168.1.200
  # masscan 2a00:1450:4007:810::/112 -p80 --banners --source-ip 2603:3001:2d00:da00:91d7:b54:b498:859d

La dirección que elija debe estar en la subred local y no ser utilizada por otro sistema. Masscan le advertirá que ha cometido un error, pero podría haber alterado las comunicaciones de la otra máquina durante varios minutos, así que tenga cuidado.

En algunos casos, como WiFi, esto no es posible. En esos casos, puede cortafuegos el puerto que usa masscan. Esto evita que la pila TCP/IP local vea el paquete, pero masscan aún lo ve ya que evita la pila local. Para Linux, esto se vería así:

root@kitploit:~
# iptables -A INPUT -p tcp --dport 61000 -j DROP
# masscan 10.0.0.0/8 -p80 --banners --source-port 61000

Probablemente desee elegir puertos que no entren en conflicto con los puertos que Linux podría elegir como puertos fuente. Puede ver el rango que usa Linux y reconfigurar ese rango, mirando el archivo:

root@kitploit:~
/proc/sys/net/ipv4/ip_local_port_range

En la última versión de Kali Linux (agosto de 2018), ese rango es de 32768 a 60999, por lo que debe elegir puertos por debajo de 32768 o por encima de 61000.

Establecer una regla iptables solo dura hasta el próximo reinicio. Debe buscar cómo guardar la configuración según su distribución, como usar iptables-save y/o iptables-persistent.

En Mac OS X y BSD, hay pasos similares. Para conocer los rangos a evitar, use un comando como el siguiente:

root@kitploit:~
# sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last

En FreeBSD y MacOS antiguo, use un comando ipfw:

root@kitploit:~
# sudo ipfw add 1 deny tcp from any to any 40000 in
# masscan 10.0.0.0/8 -p80 --banners --source-port 40000

En MacOS más reciente y OpenBSD, use la utilidad de filtro de paquetes pf. Edite el archivo /etc/pf.conf para agregar una línea como la siguiente:

root@kitploit:~
block in proto tcp from any to any port 40000:40015

Luego, para habilitar el cortafuegos, ejecute el comando:

root@kitploit:~
# pfctl -E    

Si el cortafuegos ya está en ejecución, reinicie o recargue las reglas con el siguiente comando:

root@kitploit:~
# pfctl -f /etc/pf.conf

Windows no responde con paquetes RST, por lo que ninguna de estas técnicas es necesaria. Sin embargo, masscan sigue diseñado para funcionar mejor usando su propia dirección IP, por lo que debe ejecutarse de esa manera cuando sea posible, incluso cuando no sea estrictamente necesario.

Lo mismo se necesita para otras comprobaciones, como la comprobación --heartbleed, que es solo una forma de verificación de banner.

Cómo escanear todo Internet

Si bien es útil para redes internas más pequeñas, el programa está realmente diseñado pensando en todo Internet. Podría verse algo así:

root@kitploit:~
# masscan 0.0.0.0/0 -p0-65535

Escanear todo Internet es malo. Por un lado, partes de Internet reaccionan mal al ser escaneadas. Por otro lado, algunos sitios rastrean los escaneos y lo agregan a una lista de bloqueo, lo que hará que lo aíslen de partes útiles de Internet. Por lo tanto, desea excluir muchos rangos. Para listas negras o excluir rangos, desea usar la siguiente sintaxis:

root@kitploit:~
# masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt

Esto solo imprime los resultados en la línea de comandos. Probablemente desee guardarlos en un archivo. Por lo tanto, desea algo como:

root@kitploit:~
# masscan 0.0.0.0/0 -p0-65535 -oX scan.xml

Esto guarda los resultados en un archivo XML, permitiéndole volcar fácilmente los resultados en una base de datos o algo similar.

Pero, esto solo va a la velocidad predeterminada de 100 paquetes/segundo, lo que tomaría una eternidad escanear Internet. Necesita acelerarlo de la siguiente manera:

root@kitploit:~
# masscan 0.0.0.0/0 -p0-65535 --max-rate 100000

Esto aumenta la velocidad a 100,000 paquetes/segundo, lo que escaneará todo Internet (menos las exclusiones) en aproximadamente 10 horas por puerto (o 655,360 horas si se escanean todos los puertos).

Lo que hay que notar sobre esta línea de comandos es que todas son opciones compatibles con nmap. Además, también se establecen opciones "invisibles" compatibles con nmap: -sS -Pn -n --randomize-hosts --send-eth. Asimismo, el formato del archivo XML está inspirado en nmap. Por supuesto, hay muchas diferencias, porque la naturaleza asíncrona del programa lleva a un enfoque fundamentalmente diferente del problema.

La línea de comandos anterior es un poco engorrosa. En lugar de poner todo en la línea de comandos, se puede almacenar en un archivo. La configuración anterior se vería así:

root@kitploit:~
# Mi Escaneo
rate =  100000.00
output-format = xml
output-status = all
output-filename = scan.xml
ports = 0-65535
range = 0.0.0.0-255.255.255.255
excludefile = exclude.txt

Para usar este archivo de configuración, use -c:

root@kitploit:~
# masscan -c myscan.conf

Esto también facilita las cosas cuando repite un escaneo.

Por defecto, masscan primero carga el archivo de configuración /etc/masscan/masscan.conf. Cualquier parámetro de configuración posterior sobrescribe lo que está en este archivo de configuración predeterminado. Ahí es donde pongo mi parámetro "excludefile" para no olvidarlo nunca. Simplemente funciona automáticamente.

Obteniendo salida

Por defecto, masscan produce archivos de texto bastante grandes, pero es fácil convertirlos a cualquier otro formato. Hay cinco formatos de salida compatibles:

  1. xml: Simplemente use el parámetro -oX <nombre_archivo>. O use los parámetros --output-format xml y --output-filename <nombre_archivo>.

  2. binary: Este es el formato integrado de masscan. Produce archivos mucho más pequeños para que cuando escanee Internet mi disco no se llene. Sin embargo, deben ser analizados. La opción de línea de comandos --readscan leerá archivos de escaneo binarios. Usar --readscan con la opción -oX producirá una versión XML del archivo de resultados.

  3. grepable: Esta es una implementación de la salida -oG de Nmap que puede ser fácilmente analizada por herramientas de línea de comandos. Simplemente use el parámetro -oG <nombre_archivo>. O use los parámetros --output-format grepable y --output-filename <nombre_archivo>.

  4. json: Esto guarda los resultados en formato JSON. Simplemente use el parámetro -oJ <nombre_archivo>. O use los parámetros --output-format json y --output-filename <nombre_archivo>.

  5. list: Esta es una lista simple con un par de host y puerto por línea. Simplemente use el parámetro -oL <nombre_archivo>. O use los parámetros --output-format list y --output-filename <nombre_archivo>. El formato es:

    root@kitploit:~
    <port state> <protocol> <port number> <IP address> <POSIX timestamp>  
    open tcp 80 XXX.XXX.XXX.XXX 1390380064
    

Comparación con Nmap

Donde sea razonable, se ha hecho todo lo posible para que el programa sea familiar para los usuarios de nmap, aunque sea fundamentalmente diferente. Masscan está ajustado para el escaneo de amplio rango de muchas máquinas, mientras que nmap está diseñado para el escaneo intensivo de una sola máquina o un rango pequeño.

Dos diferencias importantes son:

  • no hay puertos predeterminados para escanear, debe especificar -p <puertos>
  • los hosts objetivo son direcciones IP o rangos simples, no nombres DNS, ni los rangos de subred extraños que nmap puede usar (como 10.0.0-255.0-255).

Puede pensar en masscan como si tuviera las siguientes configuraciones permanentemente habilitadas:

  • -sS: esto solo hace escaneo SYN (actualmente, cambiará en el futuro)
  • -Pn: no hace ping a los hosts primero, lo cual es fundamental para la operación asíncrona
  • -n: no se realiza resolución DNS
  • --randomize-hosts: escaneo completamente aleatorizado, siempre, no puede cambiarlo
  • --send-eth: envía usando libpcap crudo

Si desea una lista de configuraciones adicionales compatibles con nmap, use el siguiente comando:

root@kitploit:~
# masscan --nmap

Tasa de transmisión (¡¡IMPORTANTE!!)

Este programa expulsa paquetes muy rápido. En Windows, o desde máquinas virtuales, puede hacer 300,000 paquetes/segundo. En Linux (sin virtualización) hará 1.6 millones de paquetes por segundo. Eso es lo suficientemente rápido como para fundir la mayoría de las redes.

Tenga en cuenta que solo fundirá su propia red. Aleatoriza las direcciones IP de destino para que no debería abrumar a ninguna red distante.

Por defecto, la tasa está configurada en 100 paquetes/segundo. Para aumentar la tasa a un millón use algo como --rate 1000000.

Al escanear Internet IPv4, escaneará muchas subredes, por lo que aunque haya una alta tasa de paquetes salientes, cada subred de destino recibirá una pequeña tasa de paquetes entrantes.

Sin embargo, con el escaneo IPv6, tenderá a centrarse en una sola subred de destino con miles de millones de direcciones. Por lo tanto, su comportamiento predeterminado abrumará la red de destino. Las redes a menudo colapsan bajo la carga que masscan puede generar.

Diseño

Esta sección describe los principales problemas de diseño del programa.

Diseño del código

El archivo main.c contiene la función main(), como era de esperar. También contiene las funciones transmit_thread() y receive_thread(). Estas funciones se han aplanado deliberadamente y están muy comentadas para que pueda leer el diseño del programa simplemente recorriendo línea por línea cada una de ellas.

Asíncrono

Este es un diseño asíncrono. En otras palabras, es para nmap lo que el servidor web nginx es para Apache. Tiene hilos de transmisión y recepción separados que son en gran medida independientes entre sí. Es el mismo tipo de diseño que se encuentra en scanrand, unicornscan y ZMap.

Debido a que es asíncrono, se ejecuta tan rápido como lo permite la transmisión de paquetes subyacente.El código funciona bien en Linux, Windows y Mac OS X. Todas las partes importantes están en C estándar (C90). Por lo tanto, se compila en Visual Studio con el compilador de Microsoft, el compilador Clang/LLVM en Mac OS X y GCC en Linux.

Windows y Mac no están optimizados para la transmisión de paquetes, y obtienen solo unos 300.000 paquetes por segundo, mientras que Linux puede hacer 1.500.000 paquetes/segundo. Eso probablemente sea más rápido de lo que quieres de todas formas.

Safe code

Se ofrece una recompensa por vulnerabilidades; consulte el archivo VULNINFO.md para más información.

Este proyecto utiliza funciones seguras como safe_strcpy() en lugar de funciones inseguras como strcpy().

Este proyecto tiene pruebas de regresión unitarias automatizadas (make regress).

Compatibility

Se ha dedicado mucho esfuerzo a hacer que la entrada/salida se parezca a nmap, con la que todos los que hacen escaneos de puertos están (o deberían estar) familiarizados.

IPv6 and IPv4 coexistence

Masscan admite IPv6, pero no hay un modo especial; ambos son compatibles al mismo tiempo. (No existe la opción -6, siempre está disponible).

En cualquier ejemplo de uso de masscan, simplemente ponga una dirección IPv6 donde vea una dirección IPv4. Puede incluir direcciones IPv4 e IPv6 simultáneamente en el mismo escaneo. La salida incluye la dirección adecuada en la misma ubicación, sin ninguna marca especial.

Solo recuerde que el espacio de direcciones IPv6 es realmente grande. Probablemente no quiera escanear rangos grandes, excepto quizás las primeras 64k direcciones de una subred que se asignaron mediante DHCPv6.

En cambio, probablemente querrá escanear listas grandes de direcciones almacenadas en un archivo (--include-file filename.txt) que obtuvo de otras fuentes. Como en cualquier otro lugar, este archivo puede contener listas de direcciones IPv4 e IPv6. El archivo de prueba que uso contiene 8 millones de direcciones. Los archivos de ese tamaño necesitan un par de segundos adicionales para ser leídos al inicio (masscan ordena las direcciones y elimina duplicados antes de escanear).

Recuerde que masscan contiene su propia pila de red. Por lo tanto, la máquina local desde la que ejecuta masscan no necesita tener IPv6 habilitado, aunque la red local necesita poder enrutar paquetes IPv6.

PF_RING

Para superar los 2 millones de paquetes/segundo, necesita un adaptador Ethernet Intel de 10 Gbps y un controlador especial conocido como "PF_RING ZC" de ntop. Masscan no necesita ser recompilado para usar PF_RING. Para usar PF_RING, necesita compilar los siguientes componentes:

  • libpfring.so (instalado en /usr/lib/libpfring.so)
  • pf_ring.ko (su controlador de kernel)
  • ixgbe.ko (su versión del controlador Ethernet Intel de 10 Gbps)

No necesita compilar su versión de libpcap.so.

Cuando Masscan detecta que un adaptador se llama algo como zc:enp1s0 en lugar de algo como enp1s0, cambiará automáticamente al modo PF_RING ZC.

Se puede encontrar una discusión más detallada en PoC||GTFO 0x15.

Regression testing

El proyecto contiene una prueba unitaria integrada:

root@kitploit:~
$ make test
bin/masscan --selftest
selftest: success!

Esto prueba muchas partes complicadas del código. Debería hacer esto después de compilar.

Performance testing

Para probar el rendimiento, ejecute algo como lo siguiente a una dirección desechable, para evitar sobrecargar su enrutador local:

root@kitploit:~
$ bin/masscan 0.0.0.0/4 -p80 --rate 100000000 --router-mac 66-55-44-33-22-11

El --router-mac falso mantiene los paquetes en los segmentos de red local para que no salgan a Internet.

También puede probar en modo "offline", que es la velocidad a la que se ejecuta el programa sin la sobrecarga de transmisión:

root@kitploit:~
$ bin/masscan 0.0.0.0/4 -p80 --rate 100000000 --offline

Este segundo punto de referencia muestra aproximadamente la velocidad a la que se ejecutaría el programa si estuviera usando PF_RING, que tiene una sobrecarga casi nula.

Por cierto, el algoritmo de aleatorización hace un uso intensivo de la "aritmética de enteros", una operación crónicamente lenta en las CPU. Las CPU modernas han duplicado la velocidad a la que realizan este cálculo, haciendo que masscan sea mucho más rápido.

Authors

Esta herramienta fue creada por Robert Graham: email: [email protected] twitter: @ErrataRob

License

Derechos de autor (c) 2013 Robert David Graham

Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la GNU Affero General Public License tal como fue publicada por la Free Software Foundation, versión 3 de la Licencia.

Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la GNU Affero General Public License para más detalles.

Debería haber recibido una copia de la GNU Affero General Public License junto con este programa. Si no es así, consulte https://www.gnu.org/licenses/.

Descargar herramienta