Scanner de portas TCP, emite pacotes SYN de forma assíncrona, escaneando toda a Internet em menos de 5 minutos.
Este é um scanner de portas em escala de Internet. Ele pode escanear toda a Internet em menos de 5 minutos, transmitindo 10 milhões de pacotes por segundo, a partir de uma única máquina.
Seu uso (parâmetros, saída) é semelhante ao nmap, o scanner de portas mais famoso.
Em caso de dúvida, experimente um desses recursos – funcionalidades que suportam
varredura generalizada de muitas máquinas são suportadas, enquanto a varredura aprofundada
de máquinas individuais não.
Internamente, ele usa transmissão assíncrona, semelhante a scanners de portas
como scanrand, unicornscan e ZMap. É mais flexível, permitindo
faixas arbitrárias de portas e endereços.
NOTA: o masscan usa sua própria pilha TCP/IP ad hoc. Qualquer coisa além de
varreduras de portas simples pode causar conflito com a pilha TCP/IP local. Isso significa que você
precisa usar a opção --src-ip para executar a partir de um endereço IP diferente, ou
usar --src-port para configurar quais portas de origem o masscan usa, e então também
configurar o firewall interno (como pf ou iptables) para firewalling essas portas
do resto do sistema operacional.
Esta ferramenta é gratuita, mas considere contribuir com dinheiro para seu desenvolvimento: Endereço da carteira Bitcoin: 1MASSCANaHUiyTtR3bJ2sLGuMw5kDBaj4T
No Debian/Ubuntu, é algo como o seguinte. Na verdade, não
tem dependências além de um compilador C (como gcc
ou clang).
sudo apt-get --assume-yes install git make gcc
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
Isso coloca o programa no subdiretório masscan/bin.
Para instalá-lo (no Linux) execute:
make install
O código fonte consiste em muitos arquivos pequenos, então a compilação fica muito mais rápida
usando a compilação com vários threads. Isso requer mais de 2 GB em um
Raspberry Pi (e quebra), então você pode usar um número menor, como -j4 em vez de
todos os threads possíveis.
make -j
Embora o Linux seja a plataforma alvo principal, o código roda bem em muitos outros sistemas (Windows, macOS, etc.). Aqui estão algumas informações adicionais de compilação:
makemakegmakecc src/*.c -o bin/masscanNo macOS, os binários x86 parecem funcionar tão rápido sob emulação ARM.
O uso é semelhante ao nmap. Para escanear um segmento de rede para algumas portas:
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112
Isso irá:
10.x.x.x e as sub-redes 2603:3001:2d00:da00::x<stdout> que pode ser redirecionada para um arquivoPara ver a lista completa de opções, use o recurso --echo. Isso
despeja a configuração atual e sai. Esta saída pode ser usada como entrada de volta
no programa:
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo > xxx.conf
# masscan -c xxx.conf --rate 1000
O Masscan pode fazer mais do que apenas detectar se as portas estão abertas. Ele também pode completar a conexão TCP e a interação com o aplicativo naquela porta para capturar informações simples de "banner".
O Masscan suporta verificação de banner nos seguintes protocolos:
O problema com isso é que o masscan contém sua própria pilha TCP/IP separada do sistema no qual você o executa. Quando o sistema local recebe um SYN-ACK do alvo sondado, ele responde com um pacote RST que interrompe a conexão antes que o masscan possa capturar o banner.
A maneira mais fácil de evitar isso é atribuir ao masscan um endereço IP separado. Isso seria algo como um dos seguintes exemplos:
# 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
O endereço que você escolher deve estar na sub-rede local e não deve estar sendo usado por outro sistema. O Masscan avisará que você cometeu um erro, mas você pode ter bagunçado as comunicações da outra máquina por vários minutos, então tome cuidado.
Em alguns casos, como WiFi, isso não é possível. Nesses casos, você pode firewallar a porta que o masscan usa. Isso impede que a pilha TCP/IP local veja o pacote, mas o masscan ainda o vê, pois ele contorna a pilha local. Para Linux, seria algo como:
# iptables -A INPUT -p tcp --dport 61000 -j DROP
# masscan 10.0.0.0/8 -p80 --banners --source-port 61000
Você provavelmente deseja escolher portas que não conflitem com portas que o Linux possa escolher para portas de origem. Você pode ver a faixa que o Linux usa e reconfigurar essa faixa, olhando no arquivo:
/proc/sys/net/ipv4/ip_local_port_range
Na versão mais recente do Kali Linux (agosto de 2018), essa faixa é 32768 a 60999, então você deve escolher portas abaixo de 32768 ou acima de 61000.
Definir uma regra iptables só dura até a próxima reinicialização. Você precisa descobrir como
salvar a configuração dependendo da sua distribuição, como usar iptables-save
e/ou iptables-persistent.
No Mac OS X e BSD, existem etapas semelhantes. Para descobrir as faixas a evitar, use um comando como o seguinte:
# sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last
No FreeBSD e MacOS mais antigo, use um 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
No MacOS mais novo e OpenBSD, use o utilitário de filtro de pacotes pf.
Edite o arquivo /etc/pf.conf para adicionar uma linha como a seguinte:
block in proto tcp from any to any port 40000:40015
Em seguida, para ativar o firewall, execute o comando:
# pfctl -E
Se o firewall já estiver em execução, reinicie ou recarregue as regras com o seguinte comando:
# pfctl -f /etc/pf.conf
O Windows não responde com pacotes RST, então nenhuma dessas técnicas é necessária. No entanto, o masscan ainda é projetado para funcionar melhor usando seu próprio endereço IP, portanto, você deve executá-lo dessa forma quando possível, mesmo quando não for estritamente necessário.
O mesmo é necessário para outras verificações, como a verificação --heartbleed,
que é apenas uma forma de verificação de banner.
Embora útil para redes internas menores, o programa é realmente projetado com toda a Internet em mente. Pode ser algo assim:
# masscan 0.0.0.0/0 -p0-65535
Escaneamento da Internet é ruim. Por um lado, partes da Internet reagem mal a serem escaneadas. Por outro lado, alguns sites rastreiam escaneamentos e adicionam você a uma lista de banimento, o que fará com que você seja firewalled de partes úteis da Internet. Portanto, você deseja excluir muitos intervalos. Para colocar na lista negra ou excluir intervalos, você deseja usar a seguinte sintaxe:
# masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt
Isso apenas imprime os resultados na linha de comando. Você provavelmente deseja que eles sejam salvos em um arquivo. Portanto, você deseja algo como:
# masscan 0.0.0.0/0 -p0-65535 -oX scan.xml
Isso salva os resultados em um arquivo XML, permitindo que você facilmente despeje os resultados em um banco de dados ou algo do tipo.