Come utilizzare i comandi Netcat con esempi

Il comando Netcat (nc) è un potente strumento per analizzare le connessioni di rete, scansionare le porte aperte, trasferire dati, ecc. È un’utilità di rete per la lettura e la scrittura di connessioni di rete utilizzando i protocolli TCP o UDP.
Come installa netcat
È uno strumento multipiattaforma ed è disponibile per Linux, macOS, Windows e BSD. Installeremo netcat sulla macchina Ubuntu 18.04 usando apt install
o compilandolo dal codice sorgente.
L’installazione tramite apt è piuttosto semplice, basta digitare il seguente comando nel terminale:
sudo apt install netcat
Su CentOS 8
Ncat può essere installato con il pacchetto nmap su RHEL 8/CentOS 8. Utilizzare il comando dnf come di seguito
sudo dnf install nmap
Come installare netcat dal codice sorgente
La compilazione di netcat dai sorgenti non è facile come l’installazione tramite apt install
ma se segui i passaggi seguenti puoi installarlo facilmente.
Scarica il codice sorgente da sito netcat con il seguente comando
wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
Estrarre l’archivio appena scaricato. Per fare ciò, puoi eseguire:
tar -xzvf netcat-0.7.1.tar.gz
cd
nella directory contenente il codice sorgente e il tipo di pacchetto ./configure
per configurare il pacchetto per il tuo sistema.
cd netcat-0.7.1
./configure
Se ricevi un messaggio di errore come questo – “nessun compilatore C accettabile trovato in $PATH” quando esegui il comando ./configure, assicurati di aver installato il compilatore gcc. Per installarlo digitare il seguente comando:
apt-get install build-essential
In esecuzione configure
ci vuole un po’ di tempo.
Una volta che l’installazione è stata completata correttamente, eseguire:
sudo make
e
sudo make install
È possibile rimuovere i programmi binari ei file oggetto dalla directory del codice sorgente digitando make clean
. Per rimuovere anche i file che configure
creato, eseguito make distclean
comando.
Esempi di netcat
Prima di iniziare a esplorare alcuni comandi netcat, è importante sapere che se ti colleghi a porte conosciute (0-1023) con nc, hai bisogno dei privilegi di root. Altrimenti, puoi eseguire nc come utente normale.
1) Verifica se una porta TCP specifica di un host remoto è aperta
nc -vn 192.168.40.146 2424
Esci se la porta 2424 sul server remoto è chiusa
nc: connect to 192.168.40.146 port 2424 (tcp) failed: Connection refused
Output se la porta sul server remoto è aperta (es. porta 22)
Connection to 192.168.40.146 22 port [tcp/*] succeeded!
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
2) Eseguire la scansione della porta TCP su un host remoto
Il comando seguente controllerà le porte da 20 a 25 sull’host remoto e stamperà il risultato.
nc -vnz -w 1 192.168.40.146 20-25
L’output sarà simile a questo
nc: connect to 192.168.40.146 port 20 (tcp) failed: Connection refused
nc: connect to 192.168.40.146 port 21 (tcp) failed: Connection refused
Connection to 192.168.40.146 22 port [tcp/*] succeeded!
nc: connect to 192.168.40.146 port 23 (tcp) failed: Connection refused
nc: connect to 192.168.40.146 port 24 (tcp) failed: Connection refused
nc: connect to 192.168.40.146 port 25 (tcp) failed: Connection refused
3) Eseguire la scansione della porta UDP su un host remoto
nc -vnzu 192.168.40.146 1-65535
L’output mostrerà solo le porte che consentono le connessioni udp.
Connection to 192.168.40.146 2424 port [udp/*] succeeded!
Connection to 192.168.40.146 12354 port [udp/*] succeeded!
4) Invia un pacchetto UDP di prova a un host remoto
echo -n "udp test" | nc -u -w1 192.168.40.146 2424
Il comando precedente invierà un pacchetto UDP di prova con un timeout di 1 secondo a un host remoto sulla porta 2424
5) Copiare un file (es. test.txt) da un host all’altro
Sull’host del ricevitore (192.168.40.146 nel mio caso) esegui:
nc -lp 2424 > test.txt
Sull’host del mittente (192.168.40.144) eseguire il seguente comando:
nc 192.168.40.146 2424 < test.txt
Questo copierà il file test.txt dall’host del mittente all’host del destinatario tramite la porta 2424. assicurati di consentire le connessioni in entrata sulla porta 2424 sull’host del destinatario.
6) Trasferire un’intera directory (compreso il suo contenuto) da un host all’altro
Nell’host del ricevitore eseguire:
nc -l 2424 | tar xvf -
Nell’host del mittente, eseguire il seguente comando:
tar cvf - /path/to/dir | nc 192.168.40.146 2424
7) Creare un backup del disco rigido compresso (ad esempio /dev/sdc) su un host remoto
Sull’host remoto eseguire:
nc -lp 2424 | sudo dd of=/path/to/image.img.gz
Su localhost, esegui il seguente comando:
dd if=/dev/sdc | gzip -c | nc 192.168.40.146 2424
8) Ripristinare un disco rigido (ad esempio /dev/sdc) da un’immagine disco compressa memorizzata su un host remoto
Su localhost esegue:
nc -lp 2424 | gunzip -c | sudo dd of=/dev/sdc
Sull’host remoto, eseguire il seguente comando:
cat /path/to/image.img.gz | nc 192.168.40.144 2424
9) Esegui chat online non sicure tra due host
Su un host (ad es. 192.168.40.144) eseguire il comando seguente:
nc -lp 2424
Su un altro host (ad es. 192.168.40.146) esegui il seguente comando:
nc 192.168.40.144 2424
Dopo aver eseguito questi comandi, qualsiasi cosa digitata in entrambi i terminali verrà visualizzata su entrambi i computer host.
10) Eseguire un server web con una pagina web statica
Eseguire il comando seguente su localhost (ad es. 192.168.40.144) per avviare un server Web che serve test.html sulla porta 80. Si noti che è necessario eseguire con privilegi sudo poiché 80 è nell’intervallo di porte noto (1-1023)
while true; do sudo nc -lp 80 < test.html; done
Ora aperto http://192.168.40.144/test.html
da un altro host per accedervi.
11) Ascolta su una porta TCP utilizzando l’indirizzo IPv6
È possibile utilizzare il seguente comando per consentire a nc di utilizzare l’indirizzo IPv6 durante l’ascolto su una porta TCP.
nc -6 -l 2424
Controlla se funziona con il comando qui sotto
sudo netstat -nap | grep 2424
L’output sarà simile a questo
tcp6 0 0 :::2424 :::* LISTEN 15665/nc
12) Eseguire lo streaming di un file video da un server affinché il client guardi il video in streaming utilizzando il lettore video (ad esempio mplayer)
Su un server video (192.168.40.144):
cat sample_video.avi | nc -l 2424
Su un host client (192.168.40.146):
nc 192.168.40.144 2424 | mplayer -vo x11 -cache 3000 –
Leggi anche:
Come puoi vedere, netcat è un ottimo strumento per le reti TCP/IP ed è uno degli strumenti preferiti dagli amministratori di sistema quando si tratta di risoluzione dei problemi di rete e sperimentazione. Ecco perché molte distribuzioni Linux vengono fornite con netcat preinstallato.