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?

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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.