Scanner de ports TCP, envoie des paquets SYN de manière asynchrone, scannant l'ensemble d'Internet en moins de 5 minutes.
Ceci est un scanner de ports à l'échelle d'Internet. Il peut scanner l'ensemble d'Internet en moins de 5 minutes, en transmettant 10 millions de paquets par seconde, à partir d'une seule machine.
Son utilisation (paramètres, sortie) est similaire à nmap, le scanner de ports le plus célèbre.
En cas de doute, essayez l'une de ces fonctionnalités – les fonctionnalités qui prennent en charge le balayage généralisé de nombreuses machines sont supportées, tandis que le balayage approfondi de machines individuelles ne l'est pas.
En interne, il utilise une transmission asynchrone, similaire aux scanners de ports comme scanrand, unicornscan et ZMap. Il est plus flexible, permettant des plages de ports et d'adresses arbitraires.
NOTE : masscan utilise sa propre pile TCP/IP ad hoc. Toute autre chose qu'un simple scan de ports peut causer un conflit avec la pile TCP/IP locale. Cela signifie que vous devez utiliser soit l'option --src-ip pour exécuter à partir d'une adresse IP différente, soit utiliser --src-port pour configurer les ports source que masscan utilise, puis également configurer le pare-feu interne (comme pf ou iptables) pour protéger ces ports du reste du système d'exploitation.
Cet outil est gratuit, mais envisagez de contribuer financièrement à son développement : Adresse du portefeuille Bitcoin : 1MASSCANaHUiyTtR3bJ2sLGuMw5kDBaj4T
Sur Debian/Ubuntu, cela se passe à peu près comme suit. Il n'a vraiment aucune dépendance autre qu'un compilateur C (comme gcc ou clang).
sudo apt-get --assume-yes install git make gcc
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
Cela place le programme dans le sous-répertoire masscan/bin.
Pour l'installer (sur Linux) exécutez :
make install
Le code source se compose de nombreux petits fichiers, donc la compilation est beaucoup plus rapide en utilisant la compilation multi-thread. Cela nécessite plus de 2 Go sur un Raspberry Pi (et plante), donc vous pouvez utiliser un nombre plus petit, comme -j4 plutôt que tous les threads possibles.
make -j
Bien que Linux soit la plateforme cible principale, le code fonctionne bien sur de nombreux autres systèmes (Windows, macOS, etc.). Voici quelques informations de compilation supplémentaires :
makemakegmakecc src/*.c -o bin/masscanSur macOS, les binaires x86 semblent fonctionner aussi rapidement sous émulation ARM.
L'utilisation est similaire à nmap. Pour scanner un segment réseau pour certains ports :
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112
Cela va :
10.x.x.x et les sous-réseaux 2603:3001:2d00:da00::x<stdout> qui peut être redirigée vers un fichierPour voir la liste complète des options, utilisez la fonction --echo. Cela vide la configuration actuelle et quitte. Cette sortie peut être utilisée comme entrée dans le programme :
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo > xxx.conf
# masscan -c xxx.conf --rate 1000
Masscan peut faire plus que simplement détecter si les ports sont ouverts. Il peut également compléter la connexion TCP et l'interaction avec l'application sur ce port pour récupérer de simples informations de « bannière ».
Masscan prend en charge la vérification des bannières sur les protocoles suivants :
Le problème est que masscan contient sa propre pile TCP/IP distincte du système sur lequel vous l'exécutez. Lorsque le système local reçoit un SYN-ACK de la cible sondée, il répond avec un paquet RST qui tue la connexion avant que masscan ne puisse récupérer la bannière.
Le moyen le plus simple d'éviter cela est d'attribuer à masscan une adresse IP séparée. Cela ressemblerait à l'un des exemples suivants :
# 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
L'adresse que vous choisissez doit se trouver sur le sous-réseau local et ne pas être utilisée par un autre système. Masscan vous avertira que vous avez fait une erreur, mais vous pourriez avoir perturbé les communications de l'autre machine pendant plusieurs minutes, alors soyez prudent.
Dans certains cas, comme le WiFi, ce n'est pas possible. Dans ces cas, vous pouvez configurer un pare-feu sur le port que masscan utilise. Cela empêche la pile TCP/IP locale de voir le paquet, mais masscan le voit toujours car il contourne la pile locale. Pour Linux, cela ressemblerait à :
# iptables -A INPUT -p tcp --dport 61000 -j DROP
# masscan 10.0.0.0/8 -p80 --banners --source-port 61000
Vous voudrez probablement choisir des ports qui n'entrent pas en conflit avec les ports que Linux pourrait autrement choisir comme ports source. Vous pouvez voir la plage utilisée par Linux et reconfigurer cette plage en consultant le fichier :
/proc/sys/net/ipv4/ip_local_port_range
Sur la dernière version de Kali Linux (août 2018), cette plage est de 32768 à 60999, vous devriez donc choisir des ports soit en dessous de 32768, soit 61000 et au-dessus.
La définition d'une règle iptables ne dure que jusqu'au prochain redémarrage. Vous devez rechercher comment sauvegarder la configuration en fonction de votre distribution, par exemple en utilisant iptables-save et/ou iptables-persistent.
Sur Mac OS X et BSD, il y a des étapes similaires. Pour connaître les plages à éviter, utilisez une commande comme celle-ci :
# sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last
Sur FreeBSD et les anciennes versions de MacOS, utilisez une commande ipfw :
# sudo ipfw add 1 deny tcp from any to any 40000 in
# masscan 10.0.0.0/8 -p80 --banners --source-port 40000
Sur les nouvelles versions de MacOS et OpenBSD, utilisez l'utilitaire de filtrage de paquets pf.
Modifiez le fichier /etc/pf.conf pour ajouter une ligne comme celle-ci :
block in proto tcp from any to any port 40000:40015
Ensuite, pour activer le pare-feu, exécutez la commande :
# pfctl -E
Si le pare-feu est déjà en cours d'exécution, redémarrez ou rechargez les règles avec la commande suivante :
# pfctl -f /etc/pf.conf
Windows ne répond pas avec des paquets RST, donc aucune de ces techniques n'est nécessaire. Cependant, masscan est toujours conçu pour fonctionner au mieux en utilisant sa propre adresse IP, vous devriez donc l'exécuter de cette façon lorsque c'est possible, même si ce n'est pas strictement nécessaire.
La même chose est nécessaire pour d'autres vérifications, comme la vérification --heartbleed, qui n'est qu'une forme de vérification de bannière.
Bien qu'utile pour des réseaux internes plus petits, le programme est vraiment conçu pour l'ensemble d'Internet. Cela pourrait ressembler à ceci :
# masscan 0.0.0.0/0 -p0-65535