Grava no stdin de um processo em execução com o mesmo efeito / comportamento de escrever diretamente

7

Este post responde apenas parcial a minha pergunta. Meu problema é que gravar no stdin do processo em execução usando o FD do processo no sistema de arquivos / proc não tem o mesmo efeito.

Problema:

  1. inicie o nc para escutar na porta 10000 (esse processo é chamado de nc 1)

    nc -l 10000
    
  2. inicie outro nc para enviar chars para o nc de escuta (será nc 2)

    nc localhost 10000
    
  3. Escreva para o stdin no nc 2

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

o problema: "alguns caracteres aqui" não chegam ao escutar nc (nc 1), MAS são mostrados no console do nc 2.

Pergunta: por que e é possível fazer isso funcionar?

    
por Geo 15.07.2012 / 17:55

2 respostas

11

Isso não funciona como esperado porque /proc/<PID>/fd/0 não é um canal. Se você invocar o lado de envio com o stdin conectado a um pipe, ele funcionará

No host de destino

nc -l 10000

No host de envio

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

Agora você pode

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

Observe que cat >my.fifo é necessário para manter o fifo aberto, caso contrário, um EOF é enviado e a conexão é fechada prematuramente. Para fechar a conexão, você precisa matar o processo do gato que está mantendo o fifo aberto.

    
por 15.07.2012 / 20:37
1

Conforme indicado na resposta à postagem vinculada, é necessário escrever para /proc/pid/fd/0 , não /proc/pid/fd/1 .

    
por 15.07.2012 / 17:59

Tags