GNU/Linux >> Linux Esercitazione >  >> Linux

Introduzione a socat, uno strumento di inoltro multiuso per Linux

L'utilità socat è un relè per i trasferimenti di dati bidirezionali tra due canali di dati indipendenti.

Esistono molti tipi diversi di canali socat può connettersi, tra cui:

  • File
  • Tubi
  • Dispositivi (linea seriale, pseudo-terminale, ecc.)
  • Prese (UNIX, IP4, IP6 - raw, UDP, TCP)
  • Prese SSL
  • Connessioni proxy CONNECT
  • Descrittori di file (stdin, ecc.)
  • L'editor di riga GNU (readline)
  • Programmi
  • Combinazioni di due di questi

Questo strumento è considerato la versione avanzata di netcat. Fanno cose simili, ma socat ha più funzionalità aggiuntive, come consentire a più client di ascoltare su una porta o riutilizzare le connessioni.

Perché abbiamo bisogno di Socat?

Ci sono molti modi per usare socate effettivamente. Ecco alcuni esempi:

  • Port forwarder TCP (one-shot o demone)
  • Calzino esterno
  • Strumento per attaccare i firewall deboli (sicurezza e audit)
  • Interfaccia da shell a socket Unix
  • Relè IP6
  • Reindirizza i programmi orientati al TCP su una linea seriale
  • Collega logicamente linee seriali su computer diversi
  • Crea un ambiente relativamente sicuro (su e chroot ) per eseguire script di shell client o server con connessioni di rete

Come utilizziamo socat?

La sintassi per socat è abbastanza semplice:

socat [options] <address> <address>

È necessario fornire gli indirizzi di origine e di destinazione affinché funzioni. La sintassi per questi indirizzi è:

protocol:ip:port

Esempi di utilizzo di socat

Iniziamo con alcuni esempi di base sull'utilizzo di socat per vari collegamenti.

1. Collegarsi alla porta TCP 80 sul sistema locale o remoto:

# socat - TCP4:www.example.com:80

In questo caso, socat trasferisce i dati tra STDIO (-) e una connessione TCP4 alla porta 80 su un host denominato www.example.com.

2. Usa socat come port forwarder TCP:

Per una singola connessione, inserisci:

# socat TCP4-LISTEN:81 TCP4:192.168.1.10:80

Per connessioni multiple, usa il fork opzione utilizzata negli esempi seguenti:

# socat TCP4-LISTEN:81,fork,reuseaddr TCP4:TCP4:192.168.1.10:80

Questo esempio è in ascolto sulla porta 81, accetta connessioni e inoltra le connessioni alla porta 80 sull'host remoto.

# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock 

L'esempio sopra è in ascolto sulla porta 3307, accetta connessioni e inoltra le connessioni a un socket Unix sull'host remoto.

3. Implementa un semplice raccoglitore di messaggi basato sulla rete:

# socat -u TCP4-LISTEN:3334,reuseaddr,fork OPEN:/tmp/test.log,creat,append

In questo esempio, quando un client si connette alla porta 3334, viene generato un nuovo processo figlio. Tutti i dati inviati dai client vengono aggiunti al file /tmp/test.log . Se il file non esiste, socat lo crea. L'opzione reuseaddr consente un riavvio immediato del processo del server.

4. Invia una trasmissione alla rete locale:

# socat - UDP4-DATAGRAM:224.255.0.1:6666,bind=:6666,ip-add-membership=224.255.0.1:eth0

In questo caso, socat trasferisce i dati da stdin all'indirizzo multicast specificato utilizzando UDP sulla porta 6666 sia per le connessioni locali che remote. Il comando dice anche all'interfaccia eth0 di accettare pacchetti multicast per il gruppo dato.

Usi pratici di socat

Socat è un ottimo strumento per la risoluzione dei problemi. È anche utile per effettuare facilmente connessioni remote. In pratica ho usato socat per connessioni MySQL remote. Nell'esempio seguente, mostro come utilizzo socat per connettere la mia applicazione web a un server MySQL remoto connettendomi tramite il socket locale.

1. Sul mio server MySQL remoto, inserisco:

# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock &

Questo comando avvia socat e lo configura per l'ascolto utilizzando la porta 3307.

2. Sul mio web server, inserisco:

# socat UNIX-LISTEN:/var/lib/mysql/mysql.sock,fork,reuseaddr,unlink-early,user=mysql,group=mysql,mode=777 TCP:192.168.100.5:3307 &

Il comando precedente si connette al server remoto 192.168.100.5 utilizzando la porta 3307.

Tuttavia, tutte le comunicazioni verranno effettuate sul socket Unix /var/lib/mysql/mysql.sock , e questo fa sembrare un server locale.

Concludi

socat è un'utilità sofisticata e in effetti uno strumento eccellente per ogni amministratore di sistema per fare le cose e per la risoluzione dei problemi. Segui questo link per leggere altri esempi di utilizzo di socat.

[ Corso online gratuito:panoramica tecnica di Red Hat Enterprise Linux. ]


Linux
  1. Iniziare con awk, un potente strumento di analisi del testo

  2. 5 suggerimenti per iniziare con la sicurezza del server Linux

  3. Iniziare con Samba per l'interoperabilità

  4. Iniziare con PostgreSQL su Linux

  5. Introduzione a SSH in Linux

Introduzione al sistema operativo Linux

Tutorial Vagrant – Introduzione a Vagrant in Linux

Introduzione a VirtualBox in Linux – Parte 1

Introduzione a Flutter su desktop Linux

Guida introduttiva a Buildah per la gestione dei container Linux

Guida introduttiva e installazione di Slack per Linux