2009-02-23 14 views
15

Tengo algunas aplicaciones y herramientas estándar de Unix que envían su salida a tuberías con nombre en Solaris, sin embargo las tuberías con nombre solo se pueden leer desde el almacenamiento local (en Solaris). así que no puedo acceder a ellos desde la red o colocarlos en un almacenamiento NFS para acceder en red a su salida.Una herramienta de línea de comandos Unix estándar para conectar a un socket

Lo que me llevó preguntando si había una manera análoga a reenviar la salida de herramientas de línea de comandos directamente a enchufes, diga algo como:

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

Respuesta

19

Netcat es ideal para esto. Aquí hay un page with some common examples.

Uso para su caso podría ser algo como esto:

  1. servidor espera una conexión, a continuación, envía la salida a la misma:

    server$ my_script | nc -l 7777

  2. cliente remoto se conecta a server en el puerto 7777, recibe datos, los guarda en un archivo de registro:

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

+0

gracias, y gracias por los ejemplos! –

+0

si "nc -l 7777" no funciona, intente con "nc -l -p 7777" –

6

netcat ayudará a establecer una tubería través de la red.

3

Es posible que desee utilizar uno de:

  1. ssh: segura (cifrada), ya instalado fuera de la caja en Solaris - pero hay que establecer un par de claves para no -interactive sessions
  2. netcat: fácil de configurar - pero inseguro y vulnerable a ataques externos
+0

gracias por la respuesta ssh, en este caso la seguridad no es un problema, pero es bueno tenerla aquí en la pregunta –

14

netcat (también conocido como nc) es exactamente lo que usted' que estas buscando. Está llegando a ser razonablemente estándar, pero no disponible en todos los sistemas.

socat parece ser una versión reforzada de netcat, con muchas más funciones, pero menos comúnmente disponibles.

En Linux, también puede usar /dev/tcp/<host>/<port>. Consulte el Advanced Bash-Scripting Guide para obtener más información.

0

Todo el mundo está en el camino correcto con netcat. Pero quiero agregar que si está conectando a nc y esperando una respuesta, necesitará usar la opción -q <seconds>. Del manual:

-q segundos

después de EOF en la entrada estándar, espera el número especificado de segundos y luego termina.Si los segundos son negativos, espera por siempre.

Por ejemplo, si desea interactuar con su agente de SSH se puede hacer algo como esto:

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

Un ejemplo más completo está en https://gist.github.com/RichardBronosky/514dbbcd20a9ed77661fc3db9d1f93e4

* robé esto desde https://ptspts.blogspot.com/2010/06/how-to-use-ssh-agent-programmatically.html

Cuestiones relacionadas