بارگیری...
خانه -> بلاگ
بات:

ساخت روبات یاهو مسنجر - قسمت اول
(پست شده در تاریخ 2007/12/31, 22:20:47)

در این سری از نوشته ها ما می خوایم یاد بگیریم که چطوری یه روبات (bot) یاهو مسنجر بسازیم.
بذارید اول چند تا از دانش پژوهان رو معرفی کنم:
Question level 2 یه دانش پژوه نرمال که تا حدودی کار با کامپیوتر رو بلده.
Question level 1 یه دانش پژوه گیر که کار با کامپیوتر رو خوب بلده و سر هر چیزی گیر میاد سوال میکنه.
Question level 3 یه دانش پژوه تیز که کار با کامپیوتر رو خیلی خوب بلده اما برنامه نویسی با ویژوال بیسیک رو بلد نیست.
Question level 4 یه دانش پژوه خیلی قوی از نظر کامپیوتر که زبان برنامه نویسی ویژوال بیسیک رو کاملا بلده.
Question level 5 این دانش پژوه کلا چیزی بلد نیست فقط بلده تیکه بپرونه و شیطونی کنه.

روبات یاهو مسنجر چیست؟

خوب حالا باید بدونیم یک ربات یاهو چی هست اصلا! یعنی مثلا چطوری آنلاین می شه و چه فرقی با یه آی دی (ID) معمولی دار.
در اصل آی دی یه روبات یاهو مسنجر هیچ فرقی با آی دی های دیگه نداره فقط نحوه لاگین (Login) کردنش فرق میکنه. یعنی بر عکس من و شما که با یاهو! مسنجر (Yahoo! Messenger) لاگین می کنیم یه روبات با یاهو! مسنجر لاگین نمی کنه و با یه برنامه ی دیگه که بهش اصطلاحا میگن شبیه سازی شده یاهو! مسنجر (Yahoo! Messenger Clone) لاگین می کنه! کار ما هم برای روبات ساختن دقیقا همینه یعنی باید یه یاهو مسنجر کلون بسازیم.

یاهو! مسنجر چگونه لاگین می شود؟

خوب برای اینکه بتونیم یه چیزی عین یاهو! مسنجر بسازیم اول باید ببینیم یاهو! مسنجر وقتی ما دکمه Sign In رو می زنیم چیکارا میکنه...
فعلا یه توضیح مختصر میدم بعدا سعی میکنم هر تیکشو به طور مفصل توضیح بدم:
یاهو! مسنجر اول میاد به سرور یاهو! پیغام میفرسته که میخوام بهت کانکت (Connect) بشم.
سوال دارین بکنین...
Question level 1 ببخشید، سرور چیه؟
Answer " کلا به هر کامپیوتری که هر نوع سرویسی بده میگن سرور! مثلا توی شبکه داخلی (LAN) به اون کامپیوتری که همه کامپیوترا بهش کانکت میشن رو میگن سرور!
اما تو اینترنت وقتی صحبت از سرور میشه منظور یه کامپیوتره که همیشه آنلاینه! (معنی اصلیش اونیه که بالا گفتما! بعدا نگی این سیاوش همه چیو اشتباه میگه) "
Question level 3 این سرور که یاهو! مسنجر یهش وصل میشه ربطی به همون وب سرور (Web Server) اینا داره که روش سایت می ریزن؟
Answer " نه عزیز من! این سرورا اصلابرنامه وب سرور (Web Server) روش نصت نیست. بجاش تمام یوزرنیم (Username) ها و پسورد های آی دی های یاهو روی این کامپیوترا ذخیره هستن... روی این سرورا یه برنامه نصب هست که کارش اینه که وقتی یاهو! مسنجر بهش خواست وصل شه اول بهش اجازه وصل شدن بده و بعد یه سری از اطلاعات (مثل یوزرنیم و پسوورد) رو چک کنه و اگه درست نبود ارتباط رو قطع کنه.
دز ضمن تقریبا تمام پی ام (PM) هایی هم که میفرستین اول میاد تو این سرورا و بعد به وسیله همین برنامه از سرور به اون شخصی که قرار بوده پی ام بهش برسه فرستاده میشه! "
Question level 4 ببخشید شما چرا تو جوابتون گفتین سرورا؟ مگه بیشتر از یکین؟
Answer " آفرین! خوشم میاد تیزی! یک سرور برای این که این همه اطلاعات رو چک کنه و دریافت کنه و بفرسته کمه... یعنی اصلا نمی کشه. در نتیجه یاهو! اومده این کار رو بین کلی کامپیوتر تقسیم کرده. "
Question level 4 پس چرا آخرش گفتین از سرور به اون شخص میفرسته به جای از سرورا؟
Answer " یه بار گیر دادی ازت تعریف کردم. حالا دیگه گیر ملا لغتی نده. منظورم اون سرور خاص بود که پیغام رو دریافت کرده. "
Question level 4 اونوقت یه سوال دیگه! چرا گفتین تقریبا تمام پی ام ها اول میرن تو سرور بعد از اونجا فرستاده میشن؟ چرا نگفتین همشون؟
Answer " انگار جو گرفتتا! تو قرار نیست پشت سر هم سوال کنی. آقای Question level 1 قراره اینطوری باشه!
برای این گفتم تقریبا چون بعضی اوقات که یاهو ببینه ترافیک زیاده ارتباط مستقیم (Direct Connection) بر قرار می کنه یعنی پی ام ها دیگه به سرور نمی رن و مستقیم سند (Send) میشن به کسی که قراره بگیردش.
بعضی از برنامه های مسنجر مثل AOL همیشه ارتباط مستقیم بین کاربراشون بر قرار میکنن اینطوری هم سرورا زیاد بارشون سنگین نمیشه هم اگه مثلا اگر لاگ اوت (Logout) کنین خود AOL رو، می تونین به چتتون ادامه بدین چون برای ادامه چت نیازی به سرور نیست. "
Question level 4 ببخشید، ما میتونیم بفهمیم کی ارتباط غیر مستقیمه کی مستقیم؟
Answer " آره! وقتی تو مسنحر داری چت می کنی بالای هر پنجره چت اسم تو و کسی که داری باهاش چت می کنی رو نوشته و یه - (dash) بینشون گذاشته. اگه به جای یک - دو تا دش ( -- ) اومد بینشون یعنی ارتباط مستقیم بر قرار شده.
خوب سوال دیگه بسه ... از موضوع اصلی خیلی دور شدیم. داشتیم میگفتیم یاهو! مسنجر اول به یکی از سرور پیغام میفرسته که میخوام کانکت شم. "
Question level 4 ببخشید ...
Answer " بسه دیگه. الان سوال نکن. یه ذره وایسا این تیکرو گفتم دوباره سوال کن. "
خلاصه بعد سرور یاهو! قبول میکنه و کانکت میشن... اینجا باید دقت کنید که منظور از کانکت شدن لاگین شدن نیست. بلکه فقط کانکت شدن که اطلاعات بتونن به هم بفرستن. خوب حالا یاهو! مسنجر یوزرنین (Username) رو میفرسته و سرور بر حسب یوزرنیم و زمان یه اطلاعاتی رو میفرسته که به اون Seed میگن. حالا یاهو! مسنجر با توجه به Seed و یوزرنیم، پسورد رو encrypt میکنه و میفرسته به سرور یاهو!!! این تیکه مشکل ساز ترین قسمت برای ساختن یه یاهو! مسنجر کلون (Clone) هست. چون باید بفهمیم پسورد رو یاهو! مسنجر چطوری با توجه به یوزرنیم و سید، encrypt میکنه. این کار خیلی سخت هست و کار من و شما نیست در نتیجه ما برای این قسمت از یک DLL استفاده می کنیم که عمل encrypt کردن پسورد رو مثل یاهو مسنجر انجام میده (این DLL رو مدیون پروژه گیم (Gaim Project) هستیم! از همینجا از تمام دست اندر کاران این پروژه تشکر میکنم...)
حالا اگر سوالی دارین بپرسین...
Question level 3 ببخشید، من نفهمیدم encrypt چیه اصلا.
Answer " خوب حق داری. ببین عزیز من معمولا برای امنیت بیشتر پسورد ها و اطلاعاتی که به راحتی نباید درز کنرو رمز میکنن. رمز کردن بطور کلی به دو دسته تقسیم میشه:
دسته اول encrypt یا encode کردن هست. مثل base64 encoding
این دسته همیشه دوطرفه هستن یعنی میشه از رمز شده دوباره به اصلش برگشت.
بعضی encrypt ها هم یک یا چند پارامتر به عنوان key میگیرن. یعنی با توجه به اون اطلاعات encrypt میکنن.
مثلا encrypt کردن کلمه syavash به وسیله الگوریتم Blowfish با کی a1 میشه No0ICOlDP6E= و با کی b2 میشه cu/FsS9kwvg= و مینونیم با داشتن کی (key) دوباره این دو تا رو به syavash برگردوند.
encryption پسورد یاهو! مسنجر هم تقریبا همینطوریه... یعنی چند تا پارامتر مثل Seed و یوزرنیم رو میگیده و پسورد رو encrypt میکنه!
دسته دوم رو hash بهشون میگن. در این مدل رمز کردن، ممکنه رمز برگشت پذیر نباشه چون تابع یک به یک نیست. برای مثال وقتی syavash رو با الگوریتم md5 هش میکنیم این شکلی میشه : 07fcf2ae7ef576f7d31d845e91001097
حالا از همین رمزی که بالا در اومده امکان نداره بشه به syavash رسید. "
Question level 3 یاهو برای چی اصلا Seed رو میفرسته؟ خوب بر حسب یوزرنیم و پسورد این کارو انجام میداد.
Answer " دلیل اصلی اینه که زمان هم در اون تاثیر داشته باشه. چون اگه اینطوری نباشه یکی راحت میتونه encrypt شده پسورد یکی دیگرو رو به وسیله یه sniffer (بعدا دربارش توضیح میدم) بدست بیاره و بعدا هر وقت خواست با آی دی اون لاگین کنه. اما اگر زمان هم توش اثر داشته باشه فقط در همون لحظه (که دیگه تکرار نخواهد شد) از اون پسورد encrypt شده استفاده می شه کرد. "
Question level 1 DLL چیه دیگه؟ ربطی به download داره؟
Answer " نه... DLL مخفف Dynamic Link Library هست و یه سری فرمان های اجرایی توش قرار دارن که میشه ازشون در هر برنامه ای استفاده کرد. فقط باید به این توجه داشته باشیم که DLL ها فقط برای ویندوزن و تو بقیه سیستم عامل ها نمیشه ازشون استفاده کرد.
کار DLL ای که بالا دربارش توضیح دادم اینه که پسورد رو همونطوری که یاهو! مسنجر رمز میکنه، رمز کنه! "
آقای Question level 4 انگار سوال داشتی؟
Question level 4 اممم... یادم رفت...
Answer " باشه پس وقتی یادت اومد بگو. "
خوب وقتی ما این اطلاعات رو فرستادیم سرور یاهو! چک میکنه اطلاعاتی که بهش دادیم (همون یوزرنیم و پسورد) درست هستن یا نه. در صورتی که غلط باشن برای یاهو! مسنجر یه پیغام میفرسته که پسورد و یوزرنیم مطابقت ندارن و قطع میکنه ارتباط رو. در صورتی هم که درست باشه یه پیغام میفرسته که لاگین انجام شد و دقیقا در همون لحظست که چراغ آی دی شما تو یاهو! مسنجر دوستاتون روشن میشه و بعدشم لیست دوستان (Friend List) و سایر اطلاعات فرستاده میشه.
خوب! برای این جلسه بسه دیگه... این دفعه فقط همینطوری فهمیدیم چه اتفاقی میوفته که ما از طریق یاهو مسنجر آنلاین میشیم. جلسه ی دیگه میبینیم دقیقا چه اطلاعاتی فرستاده و دریافت میشن و چطوری میتونیم یه برنامه درست کنیم که دقیقا همون کارارو بکنه.
خوب دیگه سوالی نیست؟
Question level 1 Question level 2 Question level 3 Question level 4 Question level 5 ...
عجیبه این جلسه خانوم Question level 2 چیزی نگفت... انشالله از جلسه دیگه حضور فعالانشونو میبینیم.

تگ ها

programming, socket, tutorial, messenger, yahoo, network

نظرها

نام:
ایمیل:
وبگاه:
نظر:
 
amir:
پست شده در تاریخ 2008/05/15, 08:15:02
" ba arze salaam. vaaghe`an khaste nabaashin . albate man hameye in chizaaro balad boodam vali vaaghe`an az tarze bayaan va makhsoosan in soalo javaabaaaye shoma kheyli khosham umad . moafagh baashin :-* "
98:
پست شده در تاریخ 2008/04/28, 20:30:14
" ممنون تویحاتتون حتی یه کاربر ساده رو قانع میکنه "
فاطی زرنگه:
پست شده در تاریخ 2008/04/16, 09:53:32
" اولین باره که توی این سایت میام. به طور خیلی خسته ای خوشم اومد .گوگولی... می خوامش(2 تا) "
نیما:
پست شده در تاریخ 2008/03/21, 23:33:03
" سلام کارتون عالیه میشه راجب httprequest va httpresponse هم صحبت کنید. و اینکه با کوکی های یاهو چگونه می تونیم کار کنیم و چگونه تو 360 یا جایه دیگه یک فرم رو پر کنیم. اگه اینو بگی عالی میشه. مرسی از زحماتت "
مریم dj:
پست شده در تاریخ 2008/03/21, 12:01:12
" سلام می شه بگید چند سالتونه اگه بگید وظیفتونه اگه نگید هم خیلی بدید در ضمن بگید چه رشته ای تحصیل کردید . ممنون ..........قربانت "
مانا:
پست شده در تاریخ 2008/03/20, 15:07:24
" اقا سیاوش محمودیان سال خوبی را برایتان ارزومندم ...... ............ ...................بای "
مانا:
پست شده در تاریخ 2008/03/20, 15:05:19
" اگه با حالید میخواید با هاتون چت کنم. اگر هم نه که دیگه......... "
مانا:
پست شده در تاریخ 2008/03/20, 15:03:17
" خیلی باحالی واسه خودت دفتر راه انداختی نه راه افتادی ببخشیندا نشناختمتون .راستی میتونی بگید اسم واقعیتون چیه مطمئن باش به کسی نمی گم . سلام اقا بچه ها رو برسون. "
سوزان یوسف:
پست شده در تاریخ 2008/03/08, 02:58:02
" سلام دوست خوبم خیلی جالب بود اکه موافقی بیا با هم تبادل لینک کنیم "
aida:
پست شده در تاریخ 2008/01/16, 22:48:01
" سلام عالی بود اگر آموزش های دیگه هم دارین ممنون میشم لینک بدین "
Hamid ( KraToS ):
پست شده در تاریخ 2008/01/16, 03:55:47
" آقا دمت گرم واقا عالیه امیدوارم همینطور ادامه بدی ! درسته قدیمی هستن ولی عالیه همینطور ادامه بده تا برسیم به جدیداش منتظر پست جدید هستیم ! و اینکه من هر کاری کردم نتونستم میل اتون رو از روبات بگیرم لطفا یه میل به من بزن کارت دارم . "
گلی:
پست شده در تاریخ 2008/01/14, 18:24:19
" عالی بود به حرف این زیریه هم اصلا گوش نکن... "
امین:
پست شده در تاریخ 2008/01/14, 12:23:39
" مرسی اما خیلی مMOZARKHRAF بوووود "
SHELLMAN:
پست شده در تاریخ 2008/01/04, 15:30:05
" ghorboone dastet azizam "
رسول:
پست شده در تاریخ 2008/01/04, 12:10:44
" خيلي خوب بود مرسي "
odise_keyhan_3712:
پست شده در تاریخ 2008/01/03, 22:13:34
" عالی بود.فقط یه سوال؟ yahoo این کار ها رو با توجه به SMTP انجام میده یاIMAP ؟ممنون میشم بدونم. دستت در نکنه جالب بود. "
amirmahdi:
پست شده در تاریخ 2008/01/03, 21:41:12
" haji mitoni raveshe hackkardan e-mail ra behem yad bedi be man e-mail koon bye. "
الیار:
پست شده در تاریخ 2008/01/03, 18:08:12
" آقا سیاوش گل کاشتی دمت گرم. به حرف این ضد حال ها هم گوش نکن. نمی فهمن! حالا برا ایشون قدیمی بوده که لزومی نداره برا بقیه هم قدیمی باشه. برا افرادی که هیچی از شبکه نمیدونند همین ها کلی بدرد می خوره. "
ali:
پست شده در تاریخ 2008/01/03, 11:43:33
" ببخشید ها خیلی مضخرف بود . چون حرف های شما مالخ یه قرن پیش بود "
مهسا:
پست شده در تاریخ 2008/01/03, 01:49:08
" احتمالا اون دوستت خود سیاوش بوده چون تو یه بخش از سایتش که یادم نیست آدرسش رو یک سری آموزش مثل همینا داشت. در هر صورت سیاوش عالیه. همینطوری ادامه بده. "
بشیر:
پست شده در تاریخ 2008/01/03, 01:04:55
" هیییی ... من اینارو چند سال یش تو سایت یکی از دوستام دیدم ! ;( :-p "
farhang:
پست شده در تاریخ 2008/01/03, 00:01:50
" agha siyavash age mishe hameye in amoozeshatoon ro chandta file word konid va bezarid base download.mamnoon misham "
فاطمه:
پست شده در تاریخ 2008/01/02, 01:44:05
" سلام. شب ور روزتون بخير. واقعا شيوه ي آموزشي خوبيه. يكي دو بار با روباتتون چت كردم خيلي بچه ي خوبيه. اما بعضي از چيزا رو نميگيره. بيشتر باهاش كار كنيد تا راه بيفته و جلوي ما كم نياره!!!!! موفق باشيد "
Babak:
پست شده در تاریخ 2008/01/02, 00:31:09
" آقا سیاوش به خدا گل کاشتی طرز بیان و این شیوه‌ی آموزشت معرکس واقعآ دمت گرم. از اینکه چنین مطلب های مفید فارسی‌ای رو نشر میدی دمت گرم لطفآ همینطور به کارت ادامه بده ما هم همیشه پشتت هستیم "
اشكان:
پست شده در تاریخ 2008/01/01, 15:53:33
" سلام خوبي سياوش از آموزشت ممنونم وقتي ديدم واقعا خوشحال شدم من مرده ي اين سوال جواباتم معلومه نمايش نامه نويسم هستي ! خواهش ميكنم زودتر ادامه بده آخه من آتيشم تنده نمي خوام سرد بشه و از طريق آفلاين منو خبر كن ممنون "
پادین:
پست شده در تاریخ 2008/01/01, 14:51:18
" بازم ایول "
موسی:
پست شده در تاریخ 2008/01/01, 13:55:14
" عاالی، عاااالی <div align="left">Keep it on! </div> "
فرزین:
پست شده در تاریخ 2008/01/01, 13:16:19
" سلام دست شما درد نکنه! قبلا یه ساب دون داشتید که آموزش ساختش توی اون بود ولی انگار بش داشتید اگه یه لطفی بکنید و وباره طریقه ساختش رو بفرمایید خیلی ممنون میشم ازتون :) "