web-dev-qa-db-ja.com

'netcat-e'はstdoutを中継していません

私はnetcatを使用して、次のコマンドでpythonスクリプトを実行するバックドアを作成しています:

netcat -l -p 1234 -e 'python /script.py'

次に、次を使用して別のシェルでバックドアに接続しています。

netcat localhost 1234

script.pyは、入力を読み取り、ファイルに保存してから出力する単純なループです。これで、2番目のシェルに書き込んだものはすべてスクリプトに送られ、ファイルに正常に保存されます。ただし、2番目のシェルにスクリプトの出力が表示されません。 pythonのprintメソッドとsys.stdout.writeメソッドの両方を試しましたが、どちらも失敗したようです。出力が2番目のシェルにリレーされる理由がわかりません。私はこれを使用します:

netcat localhost 1234 /bin/bash

しかし、私のスクリプトではありません。私は明らかに重要な何かを見逃しています。これが私のスクリプトです:

import sys

while 1:
    kbInput = sys.stdin.readline()
    sys.stdout.write( 'Input: '+kbInput)
    f  = open("output.txt", "w")
    f.write(kbInput)
    f.close()
    print
3
Mazen

Stdoutへの書き込みはPythonによってバッファリングされており、バッファがいっぱいになったときにのみ書き込まれます。 2つの簡単な修正があります:

  1. _-u_オプションをpythonコマンドに追加して、バッファーなしの出力(_'python -u /script.py'_)を要求します。

  2. または、各書き込み後に出力をフラッシュします。あなたの例では、行sys.stdout.write( 'Input: '+kbInput)の後に次の行を追加します。

    _sys.stdout.flush()
    _
2
meuh