直接書き込むのと同じ効果/動作で実行中のプロセスの標準入力に書き込みます


8

この投稿は私の質問の一部にしか答えません。私の問題は、/ procファイルシステムのプロセスのFDを使用して実行中のプロセスのstdinに書き込んでも同じ効果がないことです。

問題:

  1. ncを起動してポート10000で待機します(このプロセスはさらにnc 1と呼ばれます)

    nc -l 10000
    
  2. 別のncを開始して、リスニングncに文字を送信します(これはnc 2になります)

    nc localhost 10000
    
  3. NC 2の標準入力に書き込む

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

問題:「ここにいくつかの文字」がリスニングしているnc(nc 1)に到達しませんが、nc 2のコンソールに表示されます。

質問:なぜそしてこれを機能させることは可能ですか?

回答:


11

これは/proc/<PID>/fd/0パイプではないため、期待どおりに動作しません。stdinがパイプに接続されている状態で送信側を呼び出すと、機能します

受信ホスト上

nc -l 10000

送信ホスト上

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

今できる

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

cat >my.fifoはfifoを開いたままにするために必要であることに注意してください。そうしないと、EOFが送信され、接続が時期尚早に閉じられます。接続を閉じるには、FIFOを開いたままにしているcatプロセスを終了する必要があります。


非常に役立ちます!私の場合、fifoパーマは通常のユーザーがsudo'neスクリプトに影響を与えることができるため、これにより実際にプロセスとの通信がより簡単になりました。
natevw 2013

1

あなたがリンクした投稿への回答で述べたように/proc/pid/fd/0、ではなく、に書き込む必要があります/proc/pid/fd/1


1
質問を訂正しました。しかし、とにかく:/ fd / 0と/ fd / 1の両方を試しました。質問は残っています...
Geo

私はこれを試しましたが、ほとんど問題に直面していません。必要なドメインをtelnetにポストしますが、それにはなんらかのキャリッジリターンまたは改行文字が必要なので、渡すことができません
Farhan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.