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

8

Este post responde apenas parcialmente 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 nc para escutar na porta 10000 (esse processo é chamado de nc adicional 1)

    nc -l 10000
    
  2. inicie outro nc para enviar caracteres para o ouvinte nc (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 nc de escuta (nc 1), MAS são mostrados no console do nc 2.

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

Geo
fonte

Respostas:

11

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

No host de recebimento

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 manter o fifo aberto, caso contrário, um EOF será enviado e a conexão será fechada prematuramente. Para fechar a conexão, você precisa interromper o processo do gato que está mantendo o fifo aberto.

user9517
fonte
Muito útil! No meu caso, isso realmente facilitou a comunicação com um processo, porque o fifo perms pode permitir que um usuário normal afete um script sudo'ne.
Natevw 11/09
1

Conforme indicado na resposta da postagem que você vinculou, você precisa escrever para /proc/pid/fd/0não /proc/pid/fd/1.

Michael Hampton
fonte
1
Corrigi minha pergunta. Mas enfim: tentei os / fd / 0 e / fd / 1. A questão permanece ...
Geo
Eu tentei isso, mas enfrentando pouco problema. ele faz as mensagens do domínio necessário para telnet, mas eu acho que requer algum tipo de retorno de carro ou caractere de nova linha, que eu sou incapaz de passar para ele
Farhan