Scrivi allo stdin di un processo in esecuzione con lo stesso effetto / comportamento della scrittura diretta


8

Questo post risponde solo parzialmente alla mia domanda. Il mio problema è che scrivere sullo stdin del processo in esecuzione usando l'FD del processo sul filesystem / proc non ha lo stesso effetto.

Problema:

  1. avvia nc per ascoltare sulla porta 10000 (questo processo è chiamato ulteriore nc 1)

    nc -l 10000
    
  2. avvia un altro nc per inviare caratteri all'ascolto nc (questo sarà nc 2)

    nc localhost 10000
    
  3. Scrivi allo stdin sul nc 2

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

il problema: "alcuni caratteri qui" non arrivano all'ascolto nc (nc 1), MA sono mostrati sulla console dell'nc 2.

Domanda: perché ed è possibile farlo funzionare?

Risposte:


11

Questo non funziona come previsto perché /proc/<PID>/fd/0non è una pipa. Se invochi il lato di invio con lo stdin collegato a una pipe funzionerà

Sull'host ricevente

nc -l 10000

Sull'host di invio

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

Ora puoi

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

Si noti che cat >my.fifoè necessario mantenere aperto il FIFO, altrimenti viene inviato un EOF e la connessione viene chiusa prematuramente. Per chiudere la connessione è necessario interrompere il processo cat che tiene aperto il FIFO.


Molto utile! Nel mio caso, ciò ha reso più semplice la comunicazione con un processo perché i permessi a cinque possono consentire a un utente normale di influenzare uno script sudo'ne.
natevw,

1

Come indicato nella risposta al post che hai collegato, devi scrivere /proc/pid/fd/0, no /proc/pid/fd/1.


1
Ho corretto la mia domanda. Ma comunque: ho provato sia / fd / 0 che / fd / 1. La domanda rimane ...
Geo,

ho provato questo, ma affrontando poco problema. pubblica il dominio richiesto su telnet, ma penso che richieda una sorta di ritorno a capo o un nuovo carattere di linea, che non riesco a passare ad esso
Farhan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.