
🖖 Veloce, moderno, scanner di rete facile da usare
sx è lo scanner di rete a riga di comando progettato per seguire la filosofia UNIX.
L'obiettivo di questo progetto è creare lo scanner di rete più veloce con codice pulito e semplice.
Il modo più semplice è scaricare da GitHub Releases e posizionare il file eseguibile nel tuo PATH.
Requisiti:
Su macOS, installa prima gli Xcode Command Line Tools in modo che CGO possa collegarsi alla libpcap di sistema:
xcode-select --install
Dalla radice dell'albero dei sorgenti, esegui:
go build
Ecco alcuni esempi rapidi che mostrano come puoi scansionare reti con sx.
Scansiona la tua rete locale e mostra l'indirizzo IP, l'indirizzo MAC e il vendor hardware associato dei dispositivi connessi:
sx arp 192.168.0.1/24
esempio di output:
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.
con output JSON:
sx arp --json 192.168.0.1/24
esempio di output:
{"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."}
aspettare 5 secondi prima di uscire per ricevere pacchetti di risposta ritardati, di default sx attende 300 millisecondi:
sx arp --exit-delay 5s 192.168.0.1/24
Modalità di scansione live che ri-scansiona la rete ogni 10 secondi:
sx arp 192.168.0.1/24 --live 10s
A differenza di nmap e altri scanner che eseguono implicitamente richieste ARP per risolvere gli indirizzi IP in indirizzi MAC prima della scansione effettiva, sx utilizza esplicitamente il concetto di cache ARP. Il file di cache ARP è un semplice file di testo contenente una stringa JSON su ogni riga (file JSONL), che ha gli stessi campi JSON dell'output JSON della scansione ARP descritto sopra. Le scansioni di protocolli di livello superiore come TCP e UDP leggono il file di cache ARP da stdin e poi avviano la scansione effettiva.
Ciò non solo semplifica la progettazione del programma, ma accelera anche il processo di scansione, poiché non è necessario eseguire una scansione ARP ogni volta.
Supponiamo che la cache ARP effettiva sia nel file arp.cache. Possiamo crearla manualmente o utilizzare la scansione ARP come mostrato di seguito:
sx arp 192.168.0.1/24 --json | tee arp.cache
Una volta che abbiamo il file di cache ARP, possiamo eseguire scansioni di protocolli di livello superiore come la scansione TCP SYN:
cat arp.cache | sx tcp -p 1-65535 192.168.0.171
esempio di output:
192.168.0.171 22
192.168.0.171 443
In questo caso scopriamo che le porte 22 e 443 sono aperte.
Se durante scansioni di grandi dimensioni vedi send: No buffer space available, di solito significa che il mittente sta superando i buffer del kernel/dei socket raw. La prima soluzione è aggiungere --rate e ridurre il burst di invio, ad esempio -r 100000/s o inferiore se necessario. Su alcuni sistemi, la regolazione dei limiti dei socket/buffer del sistema operativo può anche aiutare, ma la limitazione della velocità è la soluzione principale.
scansione con output JSON:
cat arp.cache | sx tcp --json -p 1-65535 192.168.0.171
esempio di output:
{"scan":"tcpsyn","ip":"192.168.0.171","port":22}
{"scan":"tcpsyn","ip":"192.168.0.171","port":443}
scansiona più intervalli di porte:
cat arp.cache | sx tcp -p 1-23,25-443 192.168.0.171
o porte individuali:
cat arp.cache | sx tcp -p 22,443 192.168.0.171
o usa l'opzione --ports-file per specificare un file con porte o intervalli di porte da scansionare, una per riga.
scansiona coppie ip/porta da un file con output JSON:
cat arp.cache | sx tcp --json -f ip_ports_file.jsonl
Ogni riga del file di input è una stringa json, che deve contenere i campi ip e port.
esempio di file di input:
{"ip":"10.0.1.1","port":1080}
{"ip":"10.0.2.2","port":1081}
È possibile specificare il file di cache ARP usando le opzioni -a o --arp-cache:
sx tcp -a arp.cache -p 22,443 192.168.0.171
o redirezione di stdin:
sx tcp -p 22,443 192.168.0.171 < arp.cache
Puoi anche usare il sottocomando tcp syn invece di tcp:
cat arp.cache | sx tcp syn -p 22 192.168.0.171
tcp è solo una abbreviazione per il sottocomando tcp syn a meno che non venga passata l'opzione --flags, vedi sotto.
sx supporta la scansione con interfacce di rete virtuali (wireguard, openvpn, ecc.) e in questo caso non è necessario utilizzare la cache ARP, poiché queste interfacce richiedono pacchetti IP grezzi invece di frame Ethernet come input. Ad esempio, scansionando un indirizzo IP su una rete vpn:
sx tcp 10.1.27.1 -p 80 --json