GNU/Linux >> Linux Esercitazione >  >> Linux

Comando Netcat (nc) con esempi

Netcat (o nc ) è un'utilità della riga di comando che legge e scrive dati attraverso connessioni di rete, utilizzando i protocolli TCP o UDP. È uno degli strumenti più potenti nell'arsenale degli amministratori di rete e di sistema ed è considerato un coltellino svizzero degli strumenti di rete.

Netcat è multipiattaforma ed è disponibile per Linux, macOS, Windows e BSD. Puoi 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, Debian o CentOS.

Sintassi Netcat #

La sintassi più elementare dell'utilità Netcat assume la forma seguente:

nc [options] host port

Su Ubuntu, puoi usare sia 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 il -u opzione:

nc -u host port

Scansione porta #

La scansione delle porte è uno degli usi più comuni di Netcat. Puoi scansionare una singola porta o un intervallo di porte.

Ad esempio, per cercare porte aperte nell'intervallo 20-80 dovresti usare il seguente comando:

nc -z -v 10.10.8.8 20-80

Il -z l'opzione dirà a nc per cercare solo le porte aperte, senza inviare loro alcun dato e il -v opzione per fornire informazioni più dettagliate.

L'output sarà simile a questo:

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 [tcp/ssh] 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 [tcp/http] succeeded!

Se vuoi stampare solo le righe con le porte aperte, puoi filtrare i risultati con il grep comando.

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Puoi anche usare Netcat per trovare il software del server e la sua versione. Ad esempio, se invii un comando "EXIT" al server sulla porta SSH 22 predefinita:

echo "EXIT" | nc 10.10.8.8 22

L'output sarà simile a questo:

SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.

Per cercare le porte UDP, aggiungi semplicemente il -u opzione al comando come mostrato di seguito:

nc -z -v -u 10.10.8.8 20-80

In genere, Nma è uno strumento migliore di Netcat per la scansione complessa delle porte.

Invio di file tramite Netcat #

Netcat può essere utilizzato per trasferire dati da un host all'altro creando un modello client/server di base.

Funziona impostando Netcat in ascolto su una porta specifica (usando il -l opzione) sull'host ricevente e quindi stabilire una connessione TCP regolare dall'altro host e inviare il file su di esso.

In ricezione esegui il seguente comando che aprirà la porta 5555 per la connessione in entrata e reindirizzerà l'output al file:

nc -l 5555 > file_name

Dall'host mittente connettiti all'host ricevente e invia il file:

nc receiving.host.com 5555 < file_name

Per trasferire una directory puoi usare tar per archiviare la directory sull'host di origine ed estrarre l'archivio sull'host di destinazione.

Sull'host ricevente, imposta lo strumento Netcat in ascolto per una connessione in entrata sulla porta 5555. I dati in entrata vengono inviati a tar comando, che estrarrà l'archivio:

nc -l 5555 | tar xzvf -

Sull'host di invio imballare la directory e inviare i dati collegandosi al nc in ascolto processo sull'host ricevente:

tar czvf - /path/to/dir | nc receiving.host.com 5555

Puoi guardare l'avanzamento del trasferimento su entrambe le estremità. Una volta completato, digita CTRL+C per chiudere la connessione.

Creazione di un server di chat semplice #

La procedura per creare una chat online tra due o più host è la stessa di quando si trasferiscono file.

Sul primo host avvia un processo Netcat in 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 scrivi un messaggio e premi ENTER verrà mostrato su entrambi gli host.

Per chiudere la connessione, digita CTRL+C .

Esecuzione di una richiesta HTTP #

Sebbene ci siano strumenti molto migliori per le richieste HTTP come curl , puoi anche usare Netcat per inviare varie richieste a server remoti.

Ad esempio, per recuperare la pagina man di Netcat dal sito Web di 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 questo tutorial, hai imparato come utilizzare l'utilità Netcat per stabilire e testare connessioni TCP e UDP.

Per ulteriori informazioni, visita la pagina man di Netcat e leggi tutte le altre potenti opzioni del comando Netcat.

Se hai domande o commenti, lascia un commento qui sotto.


Linux
  1. Comando wc Linux con esempi

  2. Comando Tee Linux con esempi

  3. Comando testa di Linux con esempi

  4. Comando Nohup con esempi

  5. Comando JQ in Linux con esempi

15 Comando Linux ps con esempi

Comando CD Linux con esempi

Comando Linux watch con esempi

Attendi comando in Linux con esempi

Comando IP Linux con esempi

Comando della cronologia con esempi