Escáner de puertos TCP, lanza paquetes SYN de forma asíncrona, escaneando todo Internet en menos de 5 minutos.
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 pf o iptables) para aislar esos puertos del resto del sistema operativo.
Esta herramienta es gratuita, pero considere contribuir económicamente a su desarrollo: Dirección de cartera Bitcoin: 1MASSCANaHUiyTtR3bJ2sLGuMw5kDBaj4T
En Debian/Ubuntu, algo como lo siguiente. Realmente no tiene más dependencias que un compilador C (como gcc o clang).
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:
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.
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:
makemakegmakecc src/*.c -o bin/masscanEn macOS, los binarios x86 parecen funcionar igual de rápido bajo emulación ARM.
El uso es similar a nmap. Para escanear un segmento de red para algunos puertos:
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112
Esto:
10.x.x.x y la subred 2603:3001:2d00:da00::x<stdout> que puede redirigirse a un archivoPara 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:
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo > xxx.conf
# masscan -c xxx.conf --rate 1000
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:
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:
# 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í:
# 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:
/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:
# sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last
En FreeBSD y MacOS antiguo, use un comando ipfw:
# 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:
block in proto tcp from any to any port 40000:40015
Luego, para habilitar el cortafuegos, ejecute el comando:
# pfctl -E
Si el cortafuegos ya está en ejecución, reinicie o recargue las reglas con el siguiente comando:
# 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.
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í:
# 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:
# 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:
# 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: