2009-02-23 8 views
15

Ho alcune applicazioni e strumenti Unix standard che inviano il loro output a named pipe in Solaris, tuttavia le pipe denominate possono essere lette solo dall'archivio locale (su Solaris), quindi non posso accedervi dalla rete o posizionare i tubi su una memoria NFS per l'accesso in rete al loro output.Uno strumento da riga di comando Unix standard per il collegamento a una presa

Il che mi ha fatto chiedendo se ci fosse un modo analogo a trasmettere l'uscita di strumenti a linea di comando direttamente ai socket, dire qualcosa come:

mksocket mysocket:12345 
vmstat 1 > mysocket 2>&1 

risposta

19

Netcat è perfetto per questo. Ecco uno page with some common examples.

Uso per il vostro caso potrebbe essere simile a questo:

  1. server in ascolto per una connessione, quindi invia l'uscita ad esso:

    server$ my_script | nc -l 7777

  2. client remoto si connette alla server sulla porta 7777, riceve dati, salva in un file di registro:

    client$ nc server 7777 >> /var/log/archive

+0

grazie e grazie per gli esempi! –

+0

se "nc -l 7777" non funziona prova "nc -l -p 7777" –

6

netcat contribuirà a stabilire un tubo attraverso la rete.

3

Si consiglia di utilizzare uno dei:

  1. ssh: sicuro (criptato), già installato out-of-the-box su Solaris - ma è necessario impostare una coppia di chiavi per i non - sessioni interattive
  2. netcat: semplice da configurare - ma insicura e aperta ad attacchi
+0

grazie per la risposta ssh, in questo caso la sicurezza non è un problema, ma è bello averlo qui nella domanda –

14

netcat (noto anche come nc) è esattamente ciò che si' sto cercando. Sta diventando ragionevolmente standard, ma non disponibile su tutti i sistemi.

socat sembra essere una versione potenziata di netcat, con molte più funzionalità, ma meno comunemente disponibile.

Su Linux, è anche possibile utilizzare /dev/tcp/<host>/<port>. Vedere lo Advanced Bash-Scripting Guide per ulteriori informazioni.

0

Tutti sono sulla strada giusta con netcat. Ma voglio aggiungere che se si sta canalizzando in nc e si aspetta una risposta, sarà necessario utilizzare l'opzione -q <seconds>. Dal manuale:

q secondi

dopo EOF su stdin, attendere il numero specificato di secondi e quindi chiudere.Se i secondi sono negativi, aspetta per sempre.

Per esempio, se si desidera interagire con il vostro agente SSH si può fare qualcosa di simile:

echo -en '\x00\x00\x00\x01\x0b' | nc -q 1 -U $SSH_AUTH_SOCK | strings 

un esempio più completo è a https://gist.github.com/RichardBronosky/514dbbcd20a9ed77661fc3db9d1f93e4

* ho rubato questo da https://ptspts.blogspot.com/2010/06/how-to-use-ssh-agent-programmatically.html

Problemi correlati