Ecrire dans le stdin d'un processus en cours avec le même effet / comportement que l'écriture directe

8

Ce post ne répond que partiellement à ma question. Mon problème est que l'écriture dans le stdin du processus en cours en utilisant le FD du processus sur le système de fichiers / proc n'a pas le même effet.

Problème:

  1. démarrer nc pour écouter sur le port 10000 (ce processus est appelé en outre nc 1)

    nc -l 10000
    
  2. démarrer un autre nc pour envoyer des caractères au nc d'écoute (ce sera nc 2)

    nc localhost 10000
    
  3. Ecrire à la stdin sur le nc 2

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

le problème: "certains caractères ici" ne parviennent pas à l'écoute nc (nc 1), MAIS sont affichés sur la console du nc 2.

Question: pourquoi et est-il possible de faire fonctionner cela?

Géo
la source

Réponses:

11

Cela ne fonctionne pas comme prévu car ce /proc/<PID>/fd/0n'est pas un tuyau. Si vous invoquez le côté d'envoi avec son stdin connecté à un tuyau, cela fonctionnera

Sur l'hôte récepteur

nc -l 10000

Sur l'hôte d'envoi

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

Maintenant vous pouvez

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

Notez que le cat >my.fifoest requis pour garder le fifo ouvert sinon un EOF est envoyé et la connexion se ferme prématurément. Pour fermer la connexion, vous devez tuer le processus cat qui maintient le fifo ouvert.

user9517
la source
Très utile! Dans mon cas, cela a en fait facilité la communication avec un processus car les perms fifo peuvent permettre à un utilisateur normal d'affecter un script sudo'ne.
natevw
1

Comme indiqué dans la réponse au message que vous avez lié, vous devez écrire à /proc/pid/fd/0, non /proc/pid/fd/1.

Michael Hampton
la source
1
J'ai corrigé ma question. Mais de toute façon: j'ai essayé à la fois / fd / 0 et / fd / 1. La question demeure ...
Geo
j'ai essayé cela, mais face à peu de problèmes. il publie le domaine requis sur telnet, mais je pense qu'il nécessite une sorte de retour chariot ou un nouveau caractère de ligne, que je ne peux pas lui transmettre
Farhan