
🖖 Rápido, moderno, scanner de rede fácil de usar
sx é um scanner de rede de linha de comando projetado para seguir a filosofia UNIX.
O objetivo deste projeto é criar o scanner de rede mais rápido com código limpo e simples.
A maneira mais simples é baixar dos GitHub Releases e colocar o arquivo executável no seu PATH.
Requisitos:
No macOS, instale as Ferramentas de Linha de Comando do Xcode primeiro para que o CGO possa vincular-se à libpcap do sistema:
xcode-select --install
Na raiz da árvore de código-fonte, execute:
go build
Aqui estão alguns exemplos rápidos mostrando como você pode escanear redes com sx.
Escaneie sua rede local e exiba o endereço IP, endereço MAC e o fabricante do hardware associado dos dispositivos conectados:
sx arp 192.168.0.1/24
exemplo de saída:
192.168.0.1 b0:be:76:40:05:8d TP-LINK TECHNOLOGIES CO.,LTD.
192.168.0.111 80:c5:f2:0b:02:e3 AzureWave Technology Inc.
192.168.0.171 88:53:95:2d:3c:af Apple, Inc.
com saída JSON:
sx arp --json 192.168.0.1/24
exemplo de saída:
{"ip":"192.168.0.1","mac":"b0:be:76:40:05:8d","vendor":"TP-LINK TECHNOLOGIES CO.,LTD."}
{"ip":"192.168.0.111","mac":"80:c5:f2:0b:02:e3","vendor":"AzureWave Technology Inc."}
{"ip":"192.168.0.171","mac":"88:53:95:2d:3c:af","vendor":"Apple, Inc."}
aguarde 5 segundos antes de sair para receber pacotes de resposta atrasados, por padrão o sx aguarda 300 milissegundos:
sx arp --exit-delay 5s 192.168.0.1/24
Modo de varredura contínua que reescaneia a rede a cada 10 segundos:
sx arp 192.168.0.1/24 --live 10s
Ao contrário do nmap e de outros scanners que implicitamente realizam requisições ARP para resolver endereços IP em endereços MAC antes da varredura real, o sx utiliza explicitamente o conceito de cache ARP. O arquivo de cache ARP é um arquivo de texto simples contendo uma string JSON em cada linha (arquivo JSONL), que possui os mesmos campos JSON da saída JSON da varredura ARP descrita acima. As varreduras de protocolos de nível superior, como TCP e UDP, leem o arquivo de cache ARP da entrada padrão (stdin) e então iniciam a varredura real.
Isso não apenas simplifica o design do programa, mas também acelera o processo de varredura, já que não é necessário realizar uma varredura ARP toda vez.
Vamos supor que o cache ARP real esteja no arquivo arp.cache. Podemos criá-lo manualmente ou usar a varredura ARP como mostrado abaixo:
sx arp 192.168.0.1/24 --json | tee arp.cache
Assim que tivermos o arquivo de cache ARP, podemos executar varreduras de protocolos de nível superior, como a varredura TCP SYN:
cat arp.cache | sx tcp -p 1-65535 192.168.0.171
exemplo de saída:
192.168.0.171 22
192.168.0.171 443
Neste caso, descobrimos que as portas 22 e 443 estão abertas.
Se você vir send: No buffer space available durante varreduras grandes, isso geralmente significa que o emissor está ultrapassando os buffers do kernel/socket bruto. A primeira correção é adicionar --rate e reduzir a rajada de envio, por exemplo -r 100000/s ou menos, se necessário. Em alguns sistemas, ajustar os limites de buffer/socket do SO também pode ajudar, mas a limitação de taxa é a correção principal.
varredura com saída JSON:
cat arp.cache | sx tcp --json -p 1-65535 192.168.0.171
exemplo de saída:
{"scan":"tcpsyn","ip":"192.168.0.171","port":22}
{"scan":"tcpsyn","ip":"192.168.0.171","port":443}
escaneie múltiplas faixas de portas:
cat arp.cache | sx tcp -p 1-23,25-443 192.168.0.171
ou portas individuais:
cat arp.cache | sx tcp -p 22,443 192.168.0.171
ou use a opção --ports-file para especificar um arquivo com portas ou faixas de portas para escanear, uma por linha.
escaneie pares ip/porta de um arquivo com saída JSON:
cat arp.cache | sx tcp --json -f ip_ports_file.jsonl
Cada linha do arquivo de entrada é uma string JSON, que deve conter os campos ip e port.
arquivo de entrada de exemplo:
{"ip":"10.0.1.1","port":1080}
{"ip":"10.0.2.2","port":1081}
É possível especificar o arquivo de cache ARP usando as opções -a ou --arp-cache:
sx tcp -a arp.cache -p 22,443 192.168.0.171
ou redirecionamento de stdin:
sx tcp -p 22,443 192.168.0.171 < arp.cache
Você também pode usar o subcomando tcp syn em vez de tcp:
cat arp.cache | sx tcp syn -p 22 192.168.0.171
O subcomando tcp é apenas uma abreviação para o subcomando tcp syn, a menos que a opção --flags seja passada, veja abaixo.
O sx suporta varredura com interfaces de rede virtuais (wireguard, openvpn, etc.) e neste caso não é necessário usar o cache arp, pois essas interfaces exigem pacotes IP brutos em vez de quadros Ethernet como entrada. Por exemplo, escaneando um endereço IP em uma rede vpn:
sx tcp 10.1.27.1 -p 80 --json