netcatから出力を取得してデコードし、出力を返します。

netcatから出力を取得してデコードし、出力を返します。

netcatから出力を取得し、デコードして返す必要があります。

入力後:

nc cs2107.spro.ink 9000

私が得た結果は次のとおりです。

Welcome to the Proof of work challenge!  
Rules: i will provide hex encoded byte strings to you.  
Your task is to decode it and calculate the md5 hash in hex encoded format and return it back to me. You will need to do this 500 times!

Ready? Go!

cdde140fffda1da2bc3f

MD5:

したがって、16進数でエンコードされた文字列を取得してデコードしてから再度出力する必要があります。これを500回繰り返す必要があります。

何をすべきかはわかりますが、Unixでコーディングする方法がわかりません。 .shファイルが必要だと思いますか?しかし、よくわかりません。

  1. nc cs2107.spro.ink 9000から開始

  2. NC出力で16進文字列を検索する

  3. md5ハッシュ値のデコードと計算

  4. 最後に送ってください。

編集する:

私は次のようにしてncの出力を保存できることを知っています。

nc cs2107.spro.ink 9000 > somefile.txt  

それでは、16進文字列を具体的に検索するにはどうすればよいですか?
16進文字列をどのようにデコードしますか?
最後に、結果を端末に返す方法は?

edit2: したがって、Python を使用してこれを行うことができます。いくつかのヒントは、サブプロセスモジュールまたはソケットモジュールを使用することです。読んでいるときに子プロセスとして試してください。

subprocess.Popen

バックグラウンドでのコマンド実行の維持

現在、この問題で悩んでいます。

import subprocess
p = subprocess.Popen('nc cs2107.spro.ink 9000', shell = True, stdin = subprocess.PIPE, stdout = subprocess.PIPE)
a = subprocess.Popen('grep ^[0-9a-f] | xxd -r | md5sum | awk "{print $1}" ', stdin = p.stdout, stdout = subprocess.PIPE)

これで a を p に戻そうとすると、詰まっています。

ベストアンサー1

これは部分的な解決策です。 netcatスクリプトの入力が発生して残念です。

  1. それでは、16進文字列を具体的に検索するにはどうすればよいですか?

簡単な方法は次のとおりです。

$nc -d cs2107.spro.ink 9000 > file

Welcome to the Proof of Work Challenge.
Rules: I will provide hex encoded byte strings to you.
Your task is to decode it and calculate the md5 hash.
Return the md5 hash in hex encoded format back to me.
You will need to do this 500 times.
Ready? Go!
eeb105fb2f5e24216bd2
MD5:

ここでは最初にsed特定の行#7を選択するコマンドがありますが、最初の16進数でエンコードされたバイト文字列を解決した直後に、次の出力が表示されます。だから私は16進文字に一致する正規表現に変更しました。

$cat file.txt | grep '^[a-f0-9]'

eeb105fb2f5e24216bd2
  1. 16進文字列をどのようにデコードしますか?

$cat file.txt | grep '^[a-f0-9]' | xxd -r -p | md5

92b34e4055a92b9ec32b15f89cc22389

そのため、手動で実行できる確認を受けました。

Welcome to the Proof of Work Challenge.
Rules: I will provide hex encoded byte strings to you.
Your task is to decode it and calculate the md5 hash.
Return the md5 hash in hex encoded format back to me.
You will need to do this 500 times.
Ready? Go!
eeb105fb2f5e24216bd2
MD5: 92b34e4055a92b9ec32b15f89cc22389
Correct.
9ecbc2b8d14ae903dce5
  1. 最後に、結果を端末に返す方法は?

最後の質問は本当に最大の質問です。私はそれを動作させることはできません。複数のスクリプトを作成しましたが、問題は解決されませんでした。次の質問ザイルズ言及されているのは、データを読み取ってまだ開いているプログラムにフィードバックするのに十分な長さの接続を開いておく必要があるということです。これは、上記のように、シェルでパイプされたコマンドを使用する一般的な方法を妨げます。

シェルスクリプトからすぐに取得できなかった擬似コードは次のとおりです。

  1. forループは500回繰り返されます。働く
  2. cs2107.spro.ink 9000への接続を開いておきます。進行中です。
  3. サーバーから送信されたビットを読み取ります。働く
  4. 16進文字列をデコードします。働く
  5. md5 ハッシュ値を計算します。働く
  6. 接続を開くには入力を送信します。進行中。
  7. 手順3〜6を繰り返します。
  8. 終わり。

私が試したいくつかのリソースは次のとおりです。

  1. 入力/出力名前付きパイプを使用したTCP接続
  2. https://serverfault.com/questions/188936/writing-to-stdin-of-Background-process/297095#297095
  3. https://stackoverflow.com/questions/21130757/send-commands-to-socket-using-netcat
  4. https://superuser.com/questions/261900/how-can-i-pipe-commands-to-a-netcat-that-will-stay-alive
  5. https://stackoverflow.com/questions/2559076/how-do-i-redirect-output-to-a-variable-in-this-shell-function
  6. http://www.linuxquestions.org/questions/programming-9/dynamically-supply-input-to-netcat-in-a-script-793526/

解決策を見つけたら、解決策を知りたいです。後でもう一度やりましょう。

おすすめ記事