6

小さな (大きな) 趣味のプロジェクトとして、C# で (非常に原始的な) ssh-2.0 クライアントを作成することに着手しました。これは、DH を調査して理解を深め、暗号化の知識を深めるのに役立ちます :)

RFC 4253 に従って、次のように初期接続を開始しました。

(varsなどの無関係な事前設定を除外します)

Random cookie_gen = new Random();
while ((ssh_response = unsecure_reader.ReadLine()) != null)
{
   MessageBox.Show(ssh_response);
   if (ssh_response.StartsWith("SSH-2.0-")
   {
      // you told me your name, now I'll tell you mine
      ssh_writer.Write("SSH-2.0-MYSSHCLIENT\r\n");
      ssh_writer.Flush();
      // now I should write up my supported (which I'll keep to the required as per rfc 4253)
      ssh_writer.Write(0x20); // SSH_MSG_KEXINIT
      byte[] cookie = new byte[16];
      for (int i = 0; i < 16; i++)
         cookie[i] = Convert.ToByte(cookie_gen.Next(0, 10));
      ssh_writer.Write(cookie); // cookie
      // and now for the name-list
      // This is where I'm troubled

      // "Footer"
      ssh_writer.Write(0x00); // first_kex_packet_follows
      ssh_writer.Write(0x00); // 0
      ssh_writer.Flush();
   }
}

RFC 4253 の 16 ページにあるように、10 個の名前リストを提供することが期待されています。これらは単に文字列であると想定されていますか、または各リストの開始/終了をどのようにマークしますか (単純に改行 \n で)? 私はここで正しい軌道に乗っていますか?(この時点以降は DH と暗号化を処理することに注意してください。私の質問は、これまでの最初の連絡のみに基づいています)。

ヘルプやコメントは大歓迎です。

PS: ライブラリが存在することは承知していますが、これは私のプロジェクトには関係ありません。

4

1 に答える 1

2

RFC 4251 の 9 ページに次のように記載されています。

個々の名前にもリスト全体にも、終端のヌル文字を使用してはなりません (MUST NOT)。

名前付き RFC にも例があります。

于 2010-05-20T09:30:39.420 に答える