Introduzione
Uno dei maggiori vantaggi nell'utilizzare Linux è la pletora di utili utility che fornisce. Le funzionalità integrate nel programma sono solitamente sufficienti per la maggior parte dei programmatori per svolgere il proprio lavoro. Ciò significa che la maggior parte delle volte non sarà necessario scaricare programmi e software esterni. Gli strumenti integrati ti forniranno un'utilità sufficiente. Tra queste utili funzionalità c'è l'utility netcat.
Quando si tratta del mondo degli strumenti di rete, netcat è una sorta di arma potentissima. È un comando incredibilmente versatile che puoi utilizzare per molteplici scopi. Ad esempio, puoi utilizzare questo singolo strumento per monitorare, testare e trasferire tutti i tipi di file e dati attraverso le connessioni del tuo sistema. In questa guida esploreremo come eseguire tutte queste azioni su un VPS utilizzando netcat.
Trovare Netcat
Netcat è tipicamente disponibile su tutte le moderne distribuzioni Linux. Ciò significa che molto probabilmente lo hai già e non hai bisogno di fare di tutto per installarlo. Nel nostro tutorial utilizzeremo il VPS Ubuntu 12.04. Puoi installare il tuo server Ubuntu seguendo il nostro tutorial. Ubuntu normalmente viene fornito con la variante BSD dell'utility netcat. Tieni presente che se hai un'altra versione, potrebbe funzionare in modo leggermente diverso.
Esame della sintassi di base
Iniziamo imparando la sintassi generale che funziona nell'utility netcat. Puoi utilizzare netcat avviando una connessione TCP. La connessione deve essere avviata verso un host remoto. Ecco la sintassi di base per netcat:
|
1 |
netcat [opzioni] host porta |
Questo comando proverà ad avviare una connessione TCP verso un host remoto. L'host a cui si connette dipende dal numero di porta specificato nel comando. La connessione non sarà crittografata. Come puoi vedere, questo comando funziona in modo simile al comando telnet.
D'altra parte, puoi anche avviare una connessione UDP. Per inviare un pacchetto UDP invece di TCP, devi utilizzare l'opzione -u. Ecco come apparirebbe:
|
1 |
netcat -u host porta |
Se lo desideri, puoi anche specificare un intervallo di porte. Per fare ciò, devi inserire un trattino tra la prima e l'ultima porta. Ecco un esempio:
|
1 |
netcat host porta_iniziale-porta_finale |
Puoi anche aggiungere altri flag a questo. Un'altra cosa da notare è che puoi usare netcat e nc in modo intercambiabile. Ti avvieranno nello stesso comando, il che significa che sono l'uno l'alias dell'altro.
Utilizzare Netcat per il Port Scanning
Per cominciare, esploriamo uno degli usi più comuni di netcat. Capiremo come usarlo come port scanner. Nella maggior parte delle situazioni, è meglio utilizzare uno strumento come nmap. Tuttavia, se hai solo bisogno di eseguire semplici scansioni di porte, netcat è utile. Può aiutarti a identificare facilmente le porte aperte.
Per utilizzare netcat como port scanner, devi indicare l'intervallo di porte. Lo farai utilizzando l'opzione -z. In questo modo, il sistema eseguirà la scansione dell'intervallo di porte invece di tentare una connessione. Diciamo che vogliamo scansionare dalla porta 1 alla porta 1000:
|
1 |
netcat -z -v dominio.com 1-1000 |
Oltre al comando -z, abbiamo utilizzato anche l'opzione -v. Quest'ultima ci consente di fornire maggiori informazioni al comando. Ci permette di essere più 'prolissi' (verbose).
In cambio otterrai un output come questo:

L'output mostra molte informazioni per ogni singola porta. Conoscerai lo stato della connessione di ciascuna porta. D'altra parte, puoi utilizzare l'indirizzo IP al posto del nome di dominio se lo conosci. Questo rende il processo molto più veloce. Ecco un esempio:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 |
Abbiamo utilizzato il flag -n per indicare che il sistema non ha bisogno di utilizzare il DNS per risolvere l'indirizzo IP.
In genere, i messaggi di ritorno vengono inviati allo standard error. Per filtrare i risultati più rapidamente, puoi reindirizzarli allo standard out. Utilizzeremo la sintassi bash 2>&1 per fare questo. Successivamente, filtreremo i risultati utilizzando grep. Applichiamo questo al nostro esempio:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep riuscito |
L'output sarà simile a questo:
![]()
L'output mostra che solo la porta 22 è aperta per la connessione nell'intervallo specificato. La porta 22 è casualmente la porta SSH tradizionale.
Comunicazione tramite Netcat: come funziona?
Successivamente, vedremo come utilizzare netcat per inviare pacchetti TCP e UDP. Non solo, ma può anche ricevere pacchetti su varie porte. Come risultato di questa funzionalità, è possibile utilizzare due istanze di netcat per creare una relazione client-server. All'inizio, determinerai il client e il server. Dopo la configurazione iniziale, entrambi i client potranno inviare e ricevere pacchetti in entrambe le direzioni.
Naturalmente, dovrai configurare netcat su un sistema per rimanere in ascolto di connessioni su una porta. Per fare ciò, devi utilizzare il parametro -l. Con questo, puoi selezionare la porta di tua scelta in questo modo:
|
1 |
netcat -l 4444 |
Ora il protocollo TCP su questa macchina sarà in ascolto di connessioni sulla porta 4444. Un punto da notare è che se sei un utente non root o un utente normale, non sarai in grado di accedere alle porte inferiori a 1000.
Successivamente, devi configurare una seconda macchina per stabilire una connessione. Utilizzerai lo stesso numero di porta e indicherai un nome di dominio specifico in questo modo:
|
1 |
netcat domain.com 4444 |
L'esecuzione di questo comando non fornirà alcun output. Tuttavia, stabilirà la connessione. Ciò significa che puoi iniziare a inviare messaggi da uno qualsiasi dei server all'altro. Per fare ciò, tutto ciò che devi fare è digitare il messaggio e poi premere INVIO. Il messaggio apparirà su entrambi gli schermi.
Una volta terminato, puoi chiudere la connessione TCP premendo CTRL+D.
È possibile inviare file utilizzando Netcat?
Successivamente, ti mostreremo come inviare file tramite netcat. Con una connessione TCP, puoi inviare messaggi e altri tipi di dati. Per iniziare, devi selezionare una macchina che rimanga in ascolto delle connessioni. Tuttavia, invece di digitare le informazioni nel comando, le inseriremo in un file come questo:
|
1 |
netcat -l 4444 > received_file |
Sull'altra macchina, dovrai creare un nuovo file di testo. Ecco il comando da utilizzare:
|
1 |
echo "Ciao, questo è un file" > original_file |
Per trasmettere il file, lo userai come input per la connessione sul computer in ascolto:
|
1 |
netcat domain.com 4444 < original_file |
L'altro computer mostrerà un nuovo file chiamato 'received_file'. Conterrà tutte le informazioni che abbiamo digitato:
|
1 |
cat received_file |
Puoi usare questa utilità e trasformarla in un programma di trasferimento file. Supponiamo che tu voglia trasferire il contenuto di una directory. Lo faremo creando un archivio tar senza nome che trasferiremo sul sistema e decomprimeremo nella directory remota. Sull'altra macchina, dobbiamo prepararci a ricevere il file. Sappiamo che dovremo decomprimerlo ed estrarlo. Per fare ciò, esegui questo comando:
|
1 |
netcat -l 4444 | tar xzvf - |
Il trattino indica che tar opererà sullo standard input. Questo proviene da netcat sul server iniziale quando abbiamo stabilito la connessione iniziale.
Infine, possiamo inserire il contenuto dell'intera directory in un archivio tar e inviarlo tramite netcat in questo modo:
|
1 |
tar -czf - * | netcat domain.com 4444 |
Il trattino nel comando tar mostra che stiamo dicendo al sistema di archiviare e comprimere il contenuto della directory. Gli indica anche di scrivere il risultato sullo standard output. Il file passerà attraverso la connessione TCP all'altra estremità. Il server ricevente lo decomprimerà e lo salverà nella directory remota corrente.
Proprio in questo modo, puoi trasferire anche altri tipi di dati tramite netcat. Molte persone usano il comando dd per creare immagini di dischi e trasferirle. Per un altro modo di trasferire dati e file, dai un'occhiata al nostro tutorial che mostra come garantire la sicurezza durante il trasferimento di file con SFTP.
Utilizzare Netcat como server Web
Un'altra utile funzione di netcat è che puoi usarlo per testare le tue pagine. Diciamo che stiamo usando un server per creare un file HTML come questo:
|
1 |
nano index.html |
Questo è il codice HTML contenuto nel file:
|
1 2 3 4 5 6 7 8 9 10 |
<html> <head> <title>Pagina di test</title> </head> <body> <h1>Intestazione di livello 1</h1> <h2>Sottotitolo</h2> <p>Testo normale qui</p> </body> </html> |
Inserisci questo nel file, poi salvalo e chiudilo. In genere, la porta 80 è la porta web predefinita. Come utente normale, non root, selezioneremo la porta 8888. Supponendo che tu voglia servire e controllare la pagina una sola volta, dovrai usare questo comando:
|
1 |
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888 |
Per visualizzare il contenuto del file, vai sul tuo browser. Visita il seguente indirizzo:
|
1 |
http://server_IP:8888 |
Sarai in grado di vedere la pagina che hai codificato con il file HTML:

Una volta ottenuta la pagina, la connessione netcat si chiuderà. Ciò significa che aggiornando la pagina riceverai un errore invece del contenuto. Questo perché l'abbiamo configurata per servire la pagina una sola volta. Se desideri continuare a ricevere connessioni per vedere la pagina indefinitamente, utilizzerai un codice diverso:
|
1 |
while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done |
Qui abbiamo racchiuso l'ultimo comando in un ciclo infinito. Se vuoi interrompere il ciclo, non devi fare altro che premere CTRL-C. Ora puoi continuare a visualizzare la tua pagina e il suo rendering anche dopo la chiusura della prima connessione. Tuttavia, questa è la massima funzionalità che puoi estrarre dall'uso dell'utility netcat come server web. Non provare a usarla per servire siti web reali poiché non fornisce alcuna sicurezza. Invece, puoi dare un'occhiata ai nostri tutorial su come installare software per server web come Nginx o Apache.
Conclusione
In questo tutorial abbiamo trattato l'utility netcat ed esplorato la sua versatilità come strumento su Ubuntu. Come abbiamo visto nelle sezioni precedenti, puoi usarlo per scopi di comunicazione, trasferimento dati e pubblicazione di pagine. Funziona perfettamente per interazioni rapide tra server tramite connessioni TCP/UDP. È una funzionalità molto utile per molte funzioni di base e diagnostica.
Buon computing!
Commenti
Ancora nessun commento. Scrivi il primo.