小さな (大きな) 趣味のプロジェクトとして、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: ライブラリが存在することは承知していますが、これは私のプロジェクトには関係ありません。