Escriba en el stdin de un proceso en ejecución con el mismo efecto / comportamiento de escribir directamente

8

Esta publicación responde solo parcialmente mi pregunta. Mi problema es que escribir en el stdin del proceso en ejecución usando el FD del proceso en el sistema de archivos / proc no tiene el mismo efecto.

Problema:

  1. inicie nc para escuchar en el puerto 10000 (este proceso se llama más nc 1)

    nc -l 10000
    
  2. iniciar otro nc para enviar caracteres al nc que escucha (esto será nc 2)

    nc localhost 10000
    
  3. Escribir al stdin en el nc 2

    echo "some chars here" >> /proc/[PID-nc-2]/fd/0
    

el problema: "algunos caracteres aquí" no llegan al nc de escucha (nc 1), PERO se muestran en la consola del nc 2.

Pregunta: ¿por qué y es posible hacer que esto funcione?

Geo
fuente

Respuestas:

11

Esto no funciona como espera porque /proc/<PID>/fd/0no es una tubería. Si invoca el lado emisor con su stdin conectado a una tubería, funcionará

En el host receptor

nc -l 10000

En el host de envío

mkfifo my.fifo
cat >my.fifo &
cat my.fifo | nc remotehost.tld 10000

Ahora usted puede

echo "Hello World" >my.fifo
myprog >my.fifo

Tenga en cuenta que cat >my.fifoes necesario mantener abierto el Fifo; de lo contrario, se envía un EOF y la conexión se cierra prematuramente. Para cerrar la conexión, debe eliminar el proceso cat que mantiene abierto el fifo.

usuario9517
fuente
¡Muy útil! En mi caso, esto realmente facilitó la comunicación con un proceso porque los quince permisos pueden permitir que un usuario normal afecte un script sudo'ne.
natevw
1

Como se indica en la respuesta a la publicación que ha vinculado, debe escribir /proc/pid/fd/0, no /proc/pid/fd/1.

Michael Hampton
fuente
1
Corrija mi pregunta. Pero de todos modos: probé tanto / fd / 0 como / fd / 1. La pregunta sigue siendo ...
Geo
He intentado esto, pero enfrento un pequeño problema. publica el dominio requerido para telnet, pero creo que requiere algún tipo de retorno de carro o un nuevo carácter de línea, que no puedo pasar a él
Farhan