[RETE] - Corto #33 Mettere in ascolto una porta tcp senza applicazione o server
Sommario:
- Sintassi Netcat
- Scansione delle porte
- Invio di file tramite Netcat
- Creazione di un server di chat semplice
- Esecuzione di una richiesta HTTP
- Conclusione
Netcat (o nc) è un'utilità della riga di comando che legge e scrive i dati attraverso le connessioni di rete, utilizzando i protocolli TCP o UDP. È uno degli strumenti più potenti della rete e dell'arsenale degli amministratori di sistema ed è considerato un coltellino svizzero di strumenti di rete.
Netcat è multipiattaforma ed è disponibile per Linux, macOS, Windows e BSD. È possibile utilizzare Netcat per eseguire il debug e monitorare le connessioni di rete, cercare porte aperte, trasferire dati, come proxy e altro. Il pacchetto Netcat è preinstallato su macOS e distribuzioni Linux popolari come Ubuntu.
Sintassi Netcat
La sintassi più semplice dell'utilità Netcat ha la forma seguente:
nc host port
Su Ubuntu, puoi usare
netcat
o
nc
. Sono entrambi collegamenti simbolici alla versione openBSD di Netcat.
Per impostazione predefinita, Netcat tenterà di avviare una connessione TCP all'host e alla porta specificati. Se desideri stabilire una connessione UDP, usa l'opzione
-u
:
Scansione delle porte
Scansione delle porte è uno degli usi più comuni per Netcat. È possibile eseguire la scansione di una singola porta o di un intervallo di porte.
Ad esempio, per cercare porte aperte nell'intervallo 20-80, utilizzare il comando seguente:
nc -z -v 10.10.8.8 20-80
L'opzione
-z
dirà a
nc
di cercare solo le porte aperte, senza inviare loro alcun dato e l'opzione
-v
per fornire informazioni più dettagliate.
L'output sarà simile al seguente:
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused Connection to 10.10.8.8 22 port succeeded! nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused… nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused Connection to 10.10.8.8 80 port succeeded!
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port succeeded! Connection to 10.10.8.8 80 port succeeded!
È inoltre possibile utilizzare Netcat per trovare il software del server e la sua versione. Ad esempio, se si invia un comando "EXIT" al server sulla porta SSH predefinita 22:
echo "EXIT" | nc 10.10.8.8 22
L'output sarà simile al seguente:
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4 Protocol mismatch.
Per cercare le porte UDP è sufficiente aggiungere l'opzione
-u
al comando come mostrato di seguito:
nc -z -v -u 10.10.8.8 20-80
Nella maggior parte dei casi, Nmap è uno strumento migliore di Netcat per la scansione di porte complesse.
Invio di file tramite Netcat
Netcat può essere utilizzato per trasferire dati da un host a un altro creando un modello client / server di base.
Funziona impostando Netcat per l'ascolto su una porta specifica (usando l'opzione
-l
) sull'host ricevente e quindi stabilendo una normale connessione TCP dall'altro host e inviando il file su di esso.
Alla ricezione eseguire il comando seguente che aprirà la porta 5555 per la connessione in entrata e reindirizzerà l'output al file:
nc -l 5555 > file_name
Dall'host di invio connettersi all'host di ricezione e inviare il file:
nc receiving.host.com 5555 < file_name
Per trasferire una directory è possibile utilizzare tar per archiviare la directory sull'host di origine ed estrarre l'archivio sull'host di destinazione.
Sull'host ricevente impostare lo strumento Netcat per l'ascolto di una connessione in entrata sulla porta 5555. I dati in arrivo vengono reindirizzati al comando tar che estrae l'archivio:
nc -l 5555 | tar xzvf -
Sull'host mittente comprimere la directory e inviare i dati connettendosi al processo di ascolto
nc
sull'host ricevente:
tar czvf - /path/to/dir | nc receiving.host.com 5555
Puoi vedere l'avanzamento del trasferimento su entrambe le estremità. Una volta completato, digitare
CTRL+C
per chiudere la connessione.
Creazione di un server di chat semplice
La procedura per la creazione di una chat online tra due o più host è la stessa del trasferimento di file.
Sul primo host avviare un processo Netcat per l'ascolto sulla porta 5555:
nc -l 5555
Dal secondo host, eseguire il comando seguente per connettersi alla porta di ascolto:
nc first.host.com 5555
Ora se si digita un messaggio e si preme
ENTER
questo verrà mostrato su entrambi gli host.
Per chiudere la connessione, digitare
CTRL+C
Esecuzione di una richiesta HTTP
Sebbene esistano strumenti molto migliori per le richieste HTTP come l'arricciatura, è anche possibile utilizzare Netcat per inviare varie richieste ai server remoti.
Ad esempio, per recuperare la pagina man Netcat dal sito Web OpenBSD, digitare:
printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80
La risposta completa, comprese le intestazioni HTTP e il codice HTML, verrà stampata nel terminale.
Conclusione
In questa esercitazione, è stato appreso come utilizzare l'utilità Netcat per stabilire e testare connessioni TCP e UDP.
Per maggiori informazioni visita la pagina man di Netcat e leggi tutte le altre potenti opzioni del comando Netcat.
terminale netcatComando di esecuzione Docker con esempi

Il comando run docker crea un contenitore da una determinata immagine e avvia il contenitore utilizzando un determinato comando. È uno dei primi comandi con cui dovresti familiarizzare quando inizi a lavorare con Docker.
Comando Eco in Linux con esempi

Il comando echo è uno dei comandi più basilari e usati di frequente in Linux. Gli argomenti passati a echo vengono stampati sull'output standard.
Comando Curl in Linux con esempi

Curl è un'utilità della riga di comando per il trasferimento di dati da o verso un server progettato per funzionare senza l'interazione dell'utente. In questo tutorial, ti mostreremo come utilizzare lo strumento arricciatura attraverso esempi pratici e spiegazioni dettagliate delle opzioni di arricciatura più comuni.