2010-05-20 15 views
6

एक छोटी (बड़ी) शौक परियोजना के रूप में मैंने सी # में एक (बहुत आदिम) एसएसएच-2.0 क्लाइंट बनाने के लिए सेट किया है। यह पता लगाने और बेहतर DH को समझते हैं और मेरी एन्क्रिप्शन familiarities :)आदिम एसएसएच कनेक्शन (लोलेवल)

प्रति आरएफसी 4253 के रूप में पनपने में मदद करने के लिए है, मैं इस तरह प्रारंभिक कनेक्शन शुरू कर दिया है:

(बाहर छोड़ने वार्स की आदि अप्रासंगिक presetting)

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(); 
    } 
} 

जैसा कि आप आरएफसी 4253 के पेज 16 पर देख सकते हैं, मुझे 10 नाम-सूचियां देने की उम्मीद है। क्या ये बस स्ट्रिंग होने का मानते हैं, या मैं प्रत्येक सूची के प्रारंभ/अंत को कैसे चिह्नित करूं (बस न्यूलाइन द्वारा \ n)? क्या मैं यहां पर सही रास्ते पर भी हूं? (ध्यान रखें कि मैं इस बिंदु से पहले डीएच और एन्क्रिप्शन को संभालेगा। मेरा प्रश्न पूरी तरह से प्रारंभिक संपर्क पर आधारित है)।

कोई मदद या टिप्पणी का स्वागत किया और सराहना कर रहे हैं,

पुनश्च: मुझे पता है पुस्तकालयों मौजूद हूँ, लेकिन यह मेरा परियोजना के लिए प्रासंगिक नहीं है।

+0

प्रश्न यह है कि सी # का उपयोग करके नाम-सूचियां कैसे भेजें, तो मुझे लगता है कि यह एक सी # प्रश्न है? मैं सर्वनामिस्टों को प्राप्त करता हूं, लेकिन यह प्रति स्ट्रिंग प्रारूप में नहीं है, इसलिए मैं पूछ रहा हूं कि मुझे लगता है कि मैं अपने नामेलिस्ट (किस प्रारूप में) के पक्ष में जवाब देने और जवाब देने का अनुमान लगाता हूं। उम्मीद है कि यह इसे साफ़ करता है :) – Chuck

उत्तर

2

खैर, आरएफसी पेज 9 पर 4251 राज्यों के रूप में:

अशक्त पात्रों को समाप्त नहीं इस्तेमाल किया जाना चाहिए, न तो अलग-अलग नामों के लिए , और न ही एक पूरे के रूप सूची के लिए।

नामित आरएफसी में भी उदाहरण हैं।

+0

आप सही हैं, धन्यवाद। मैंने यह खो दिया। Flush() से पहले अंतिम पंक्ति स्क्रैचिंग। मैं अभी भी अनिश्चित हूं कि डेटा को नाम-सूची के रूप में कैसे रखा जाए, हालांकि सर्वर की सूची इस तरह दिखती है: http://i46.tinypic.com/11b3dib.png – Chuck

+1

आरएफसी 4251 भी इस प्रश्न का उत्तर देता है: पहला आपको नाम-सूची की बाइट-लंबाई वाली यूआईंट 32 भेजनी होगी। सूची में केवल वर्ण हैं। तो उदाहरण के लिए zlib, कोई भी नहीं होगा: 00 00 00 09 7 ए 6 सी 69 62 2 सी 6e 6f 6e 65. 00 00 00 09 यूंट 32 कह रहा है, कि 9 बाइट्स का पालन करें। –

+1

यह भी आपकी छवि के अनुरूप है। अनुक्रम \ 0 \ 0 \ 0 ~ diffie-hellman से पहले ... uint32 है। ASCII से: ~ 0x7E है, इसलिए 126 बाइट्स का पालन कर रहे हैं। फिर अगले uint32 \ 0 \ 0 \ 0 [बॉक्स] का पालन करता है ... एक एसीआईआई नियंत्रण स्ट्रिंग 0x0F लगता है, मुझे लगता है (निम्नलिखित 15 वर्णों के कारण)। –

संबंधित मुद्दे