Il comando Netcat (nc) è un potente strumento per analizzare le connessioni di rete, cercare porte aperte, trasferire dati, ecc. È un'utilità di rete per leggere e scrivere su connessioni di rete utilizzando i protocolli TCP o UDP.
Come installare netcat
È uno strumento multipiattaforma ed è disponibile per Linux, macOS, Windows e BSD. Installeremo netcat su una macchina Ubuntu 18.04 usando apt install
o compilandolo dal codice sorgente.
L'installazione tramite apt è piuttosto semplice, devi solo digitare il seguente comando nel terminale:
sudo apt install netcat
Su CentOS 8
Il ncat può essere installato con il pacchetto nmap su RHEL 8/CentOS 8. Usa il comando dnf come di seguito
sudo dnf install nmap
Come installare netcat dal codice sorgente
La compilazione di netcat dal codice sorgente non è facile come l'installazione tramite apt install
, ma se segui i passaggi seguenti puoi installarlo facilmente.
Scarica il codice sorgente dal sito web 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 farlo puoi eseguire:
tar -xzvf netcat-0.7.1.tar.gz
cd
nella directory contenente il codice sorgente del pacchetto e digita ./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" durante l'esecuzione del comando ./configure, assicurati di aver installato il compilatore gcc. Per installarlo digita il seguente comando:
apt-get install build-essential
Esecuzione di configure
ci vuole un po'.
Una volta che la configurazione è stata completata con successo, esegui:
sudo make
e
sudo make install
Puoi rimuovere i file binari del programma e i file oggetto dalla directory del codice sorgente digitando make clean
. Per rimuovere anche i file che configure
creato, esegui make distclean
comando.
Esempi Netcat
Prima di iniziare a esplorare alcuni comandi netcat è importante sapere che se si esegue il binding a porte note (0-1023) con nc, è necessario il privilegio di root. Altrimenti, puoi eseguire nc come un utente normale.
1) Verifica se una particolare porta TCP di un host remoto è aperta
nc -vn 192.168.40.146 2424
Output 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. 22 porte)
Connection to 192.168.40.146 22 port [tcp/*] succeeded!
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
2) Esegui 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) Esegui la scansione delle porte UDP su un host remoto
nc -vnzu 192.168.40.146 1-65535
L'output mostrerà solo le porte che consentono 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) Copia un file (ad es. test.txt) da un host all'altro
Sull'host ricevente (192.168.40.146 nel mio caso) esegui:
nc -lp 2424 > test.txt
Sull'host del mittente (192.168.40.144) eseguire il comando seguente:
nc 192.168.40.146 2424 < test.txt
Questo copierà il file test.txt dall'host mittente all'host ricevente tramite la porta 2424. assicurati di consentire le connessioni in entrata sulla porta 2424 sull'host del ricevitore.
6) Trasferisci un'intera directory (incluso il suo contenuto) da un host all'altro
Sull'host del ricevitore esegui:
nc -l 2424 | tar xvf -
Sull'host del mittente eseguire il comando seguente:
tar cvf - /path/to/dir | nc 192.168.40.146 2424
7) Crea un backup compresso del disco rigido (ad es. /dev/sdc) su un host remoto
Sull'host remoto eseguito:
nc -lp 2424 | sudo dd of=/path/to/image.img.gz
Sull'host locale eseguire il comando seguente:
dd if=/dev/sdc | gzip -c | nc 192.168.40.146 2424
8) Ripristina un disco rigido (ad es. /dev/sdc) da un'immagine disco compressa archiviata in un host remoto
Sull'host locale eseguito:
nc -lp 2424 | gunzip -c | sudo dd of=/dev/sdc
Sull'host remoto eseguire il comando seguente:
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) esegui 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 entrambe le macchine host.
10) Esegui un server web con una pagina web statica
Esegui il comando seguente sull'host locale (ad es. 192.168.40.144) per avviare un server Web che serva test.html sulla porta 80. Nota che devi eseguire con privilegi sudo poiché 80 è nell'intervallo di porte ben note (1-1023)
while true; do sudo nc -lp 80 < test.html; done
Ora apri 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 comando seguente per consentire a nc di utilizzare l'indirizzo IPv6 durante l'ascolto su una porta TCP.
nc -6 -l 2424
Verifica se funziona con il comando seguente
sudo netstat -nap | grep 2424
L'output sarà simile a questo
tcp6 0 0 :::2424 :::* LISTEN 15665/nc
12) Trasmetti in streaming un file video da un server affinché il client possa guardare il video in streaming utilizzando il lettore video (ad es. 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 usare Linux Netcat Command come Port Scanner
- Come creare una chat semplice con netcat in Linux
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 risolvere problemi di rete e sperimentazioni. Ecco perché molte distribuzioni Linux vengono fornite con netcat preinstallato.