بایگانی نویسنده

MSN مسنجر چگونه کار می کند؟ قسمت دوم … ( روشهای برقراری ارتباط با سرور)

دی ۱۹م, ۱۳۸۷

اتصال
اولین قدم برای اتصال برقراری ارتباط با dispatch سرور می باشد. ابندا یک سوکت tcp با مشخصات آدرس messenger.hotmail.com و شماره پورت ۱۸۳۶ باز کنید. وقتی اتصال برقرار گردید دستور ver را با یکی از پارامترهای MSNP7 – MSNP6 – MSNP5 – MSNP4 –CVR0 ارسال کنید. این پارامتر شماره نسخه پروتکل ارتباطی می باشد. من پیشنهاد می کنم که از MSNP2 استفاده کنید. وقتی که پاسخ از سرور دریافت کردید اگر اولین مقدار بعد از کد یکتا اتصال مخالف با صفر بود بدین معنی است که سرور کد نسخه پروتکل شما را قبول کرده است. سپس دستور INF را برای دریافت اطلاعات تصدیق اتصال ارسال می کنیم. در پاسخ سرور یک دستور INF همراه با یک کد MD5 ارسال می کند که برای ما به صورت یکتا در نظر گرفته است. سپس ما دستور user همراه با پارامتر MD5 I myuser@hotmail ارسال می کنیم . توجه داشته باشید که myuse@hotmail گذرنامه عبور ( کد کاربری) ما می باشد.
در این زمان سرور با یک دستور XFR همراه با پارامتر NS w.x.y.z:1836 0 A.B.C.D:1836 پاسخ ما را ارسال می کند. پارامترهای دریافتی یکی w.x.y.z:1836 شماره سوکت Notification سرور می باشد و دیگری A.B.C.D:1836 شماره سوکت فعلی می باشد. حالا ما اتصال فعلی را قطع می کنیم و با سرور Notification که توسط سرور بدست آورده ایم اتصال برقرار می کنیم.
در زیر یک گفتگو بین ما ( Client) و سرور Dispatch را می بینید.

Connect: messenger.hotmail.com 1863
>>> VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVR0
<<< VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVR0
>>> INF 1
<<< INF 1 MD5
>>> USR 2 MD5 I example@passport.com
<<< XFR 2 NS 207.46.106.145:1863 0 207.46.104.20:1863
Client Disconnects

Notification Server
برقراری با Notification سرور عینا” مثل برقراری ارتباط با Dispatch سرور می باشد. دقیقا تا مرحله قبل از پاسخ سرور با دستور XFR. مثل dispatch سرور باید عمل کنیم. در این مرحله سرور با دریافت دستور USR همراه با کد کاربری ما منتظر کلمه عبور می ماند. در این لحظه ما یک دستور USR دیگر به شکل زیر ارسال می کنیم.

USR MD5 S #.#

در این دستور پارامتر S به سرور می گوید که این دستور حامل کلمه عبور می باشد و #.# همان کلمه عبور ما می باشد که با MD5 کد شده است. در این لحظه سرور با دستور

OK user@host Name 1

پاسخ ما را میدهد. در صورتی که مشکلی در اتصال باشد کد خطای ۹۱۱ از طرف سرور می آید.
در دستور OK بازگشتی از سرور user@host کد کاربری و Name اسم اسکرین ما می باشد.
در این لحظه در صورت دریافت دستور ok از طرف سرور ما به MSN مسنجر وارد شده ایم و باید وضعیت فعلی خود را ارسال کنیم. با استفاده از دستور CHG و پارامتر ۳ حرفی وضعیت خود را در زمان اتصال مشخص می کنیم. سرور نیز دقیقا دستور ارسالی را برای تایید وضعیت ارسال می کند. در حالت عادی اتصال پارامتر NLN ارسال می گردد. کلا ۹ پارامتر برای دستور CHG وجود دارد. به طور مثال اگر با پارامتر HDN دستور CHG را ارسال کنید ما به صورت مخفی وارد مسنجر می شویم.
در زیر یک گفتگو بین ما ( client) و Notification سرور را می بینیم.

Connect: 207.46.106.145 1863
>>> VER 3 MSNP7 MSNP6 MSNP5 MSNP4 CVR0
<<< VER 3 MSNP7 MSNP6 MSNP5 MSNP4 CVR0
>>> INF 4
<<< INF 4 MD5
>>> USR 5 MD5 I example@passport.com
<<< USR 5 MD5 S 1013928519.693957190
>>> USR 6 MD5 S 23e54a439a6a17d15025f4c6cbd0f6b5
<<< USR 6 OK example@passport.com My%20Screen%20Name 1
>>> CHG 7 NLN
<<< CHG 7 NLN
ادامه اتصال

اولین پیامها
بعد از برقراری ارتباط با سرور مسنجر از طرف سرور ۲ پیام برای ما ارسال می گردد اولین پیام شامل پروفایل ما می باشد و دومین پیام در صورتی که ما در صندوق پست الکترونیکی خود نامه ای داشته باشیم که هنوز نخوانده باشیم ارسال می گردد. اطلاعات ارسالی از سرور که شامل پروفایل ما می باشد دارای یک مایم تایپ می باشد. این مایم تایپ از نوع

text/x-msmsgsprofile

,و به صورت یونیکد می باشد
یک نمونه از پروفایل ارسالی از طرف سرور به شکل زیر می باشد.

MSG Hotmail Hotmail 363
MIME-Version: 1.0
Content-Type: text/x-msmsgsprofile; charset=UTF-8
LoginTime: 1016941010
EmailEnabled: 1
MemberIdHigh: 41922
MemberIdLow: -619232012
lang_preference: 1033
preferredEmail: example@passport.com
country: US
PostalCode: 12345
Gender: M
Kid: 0
Age:
sid: 507
kv: 2
MSPAuth: 2AAAAAAAADMoV8ORoz64BVwmjtksIg!kmR!Rj5tBBqEaW9hc4YnPHSOQ$$

پیام هشدار وجود پست الکترونیکی با مایم تایپ

text/x-msmsgsinitialemailnotification;.

ارسال می گردد.یک نمونه از پیام ارسالی از طرف سرور برای هشدار وجود ایمیل جدید به شکل زیر می باشد.

MSG Hotmail Hotmail 223
MIME-Version: 1.0
Content-Type: text/x-msmsgsinitialemailnotification; charset=UTF-8

Inbox-Unread: 21
Folders-Unread: 33
Inbox-URL: /cgi-bin/HoTMaiL
Folders-URL: /cgi-bin/folders
Post-URL: http://www.hotmail.com

بعد از برقراری ارتباط اگر در طول مدت اتصال ایمیل جدیدی برای شما ارسال گردد یک پیام از سمت سرور به شکل زیر برای ما ارسال می گردد.

MSG Hotmail Hotmail 340
MIME-Version: 1.0
Content-Type: text/x-msmsgsemailnotification; charset=UTF-8

From: Mike Mintz
Message-URL: /cgi-bin/getmsg?msg=MSG1029401739.3&start=1610592&len=402&curmbox=ACTIVE
Post-URL: https://lc1.law13.hotmail.passport.com/ppsecure/domessengerlogin/EN
Subject: Hi
Dest-Folder: ACTIVE
From-Addr: example@passport.com
id: 2

در زمانی که یک نامه الکترونیکی پاک شود پیام زیر از طرف سرور ارسال می گردد.

MSG Hotmail Hotmail 145
MIME-Version: 1.0
Content-Type: text/x-msmsgsactivemailnotification; charset=UTF-8

Src-Folder: ACTIVE
Dest-Folder: trAsH
Message-Delta: 1

خوب حالا ارتباط ما برقرار است اگر کسانی که در لیست دوستان ما هستند تغییر وضعیت دهند سرور تغییر وضعیت ایشان را با دستور ILN به ما اطلاع می دهد.سرور این دستور را با ۳ پارامتر کد وضعیت , کد کاربری , و نام اسکرین برای ما ارسال می کند.
یک نمونه از پیام ارسالی از طرف سرور به شکل زیر می باشد.

<<< ILN 7 AWY example@passport.com Mike
<<< ILN 7 NLN name_123@hotmail.com Name_123
<<< ILN 7 BSY myname@msn.com My%20Name

امیدوارم که از این مقاله هم استفاده کرده باشید در مقالات بعدی به مباحث پیشرفته تری خواهیم پرداخت.

MSN مسنجر چگونه کار می کند؟ – روش کار MSN مسنجر – دستورات و روش برنامه نویسی

دی ۱۹م, ۱۳۸۷

سلام
در این سری مقالات میخواهم پروتکل ارتباطی یک سرویس پیام رسانی معروف به نام MSN مسنجر را به شما معرفی کنم. مطمئنا” همه شما MSN مسنجر را می شناسید و از آن استفاده می کنید. این مقاله و چند مقاله بعدی در مورد نحوه کار MSN مسنجر و برقراری ارتباط آن با سرور اصلی و کاربران می باشد. امیدوارم که مورد استفاده قرار بگیرد.

اطلاعات سوکت
MSN مسنجر از TCP استفاده می کند و مسنجر شما با پورت شماره ۱۸۶۳ با سرور ارتباط برقرار می کند.

سرورهای MSN مسنجر
سه نوع سرور در این پروتکل مورد استفاده قرار می گیرد :
Dispatch Server-1
این سرور با کاربران دائما در ارتباط است و وظیفه برقراری ارتباط با کاربران را بر عهده دارد و مشخصات آنها را بدست می آورد از طریق آدرس messenger.hotmail.com on port 1863. و پورت ۱۸۶۳ می توان به این سرور دسترسی پیدا کرد.
۲- Notification Server
این سرور وظیفه نگهداری وضعیت کاربران , ارسال وضعیت , ارسال پیام , درخواست چت , هشدار دریافت ایمیل و … را بر عهده دارد.
۳- Switchboard Server
این سرور دروازه اصلی برقراری ارتباط کاربران در اتاقهای گفتگو chat می باشد. همچنین در زمان ارسال فایلها نیز از این سرور استفاده می گردد. وظیفه انتقال اطلاعات اتاقهای گفتگو به عهده این سرور است.

پروتکل برقراری ارتباط
MSN مسنجر از طریق ارتباط TCP با سرور ارتباط برقرار می کند و تمامی اطلاعات خود را به صورت Text رد و بدل می کند. یعنی دستورات را به صورت متن معمولی ارسال و دریافت می کند . البته نحوه ارسال اطلاعات و دریافت آن متفاوت می باشد.

دستورات
همه دستورات در MSN مسنجر به صورت ۳ کاراکتری هستند. همه پارامترها بعد از دستور اصلی می آیند و هر پارامتر با کاراکتر فاصله مشخص می گردد.

پیامها
دستور ارسال پیامها تنها دستوری هست که با دیگر دستورات اندکی تفاوت دارد. نام دستور فوق
MSG می باشد. در هنگام ارسال دستور MSG در اولین سطر ارسالی از اطلاعات دستور ارسال شده و در سطرهای بعدی به ترتیب Mime ها و نوع کاراکتر ست , در سطرهای بعدی متن پیام می باشد که می تواند شامل هر کارکتری باشد. سطر دوم در ارسال یک پیام MIME-Version: 1.0
می باشد.سطر سوم در ارسال یک پیام Content-Type: */*; charset=UTF-8, می باشد. در سطرهای بعدی متن پیام ارسال می گردد.

تغییرات وضعیت
این دستور که به صورت CHL ارسال می گردد فقط از طرف کاربران MSN مسنجر ارسال می گردد و هیچ وقت از طرف سرور ارسال نمی شود. این دستور بعد از ارسال هر پیام و بعد از هر تغییر در وضعیت ارسال می گردد.

خطاها
وقتی که یک دستور اشتباه برای سرور ارسال گردد یا یکی از روالهای کاری به درستی انجام نگیرد سرور یک کد خطای ۳ رقمی را به کاربر بر می گرداند که نشان دهنده نوع خطا می باشد.
لیست خطاها ارسالی از طرف سرور عبارتند از :
• ۲۰۰ Syntax error
• ۲۰۱ Invalid parameter
• ۲۰۵ Invalid user
• ۲۰۶ Domain name missing
• ۲۰۷ Already logged in
• ۲۰۸ Invalid username
• ۲۰۹ Invalid fusername
• ۲۱۰ User list full
• ۲۱۵ User already there
• ۲۱۶ User already on list
• ۲۱۷ User not online
• ۲۱۸ Already in mode
• ۲۱۹ User is in the opposite list
• ۲۸۰ Switchboard failed
• ۲۸۱ Transfer to switchboard failed
• ۳۰۰ Required field missing
• ۳۰۲ Not logged in
• ۵۰۰ Internal server error
• ۵۰۱ Database server error
• ۵۱۰ File operation failed
• ۵۲۰ Memory allocation failed
• ۵۴۰ * Wrong CHL value sent to server
• ۶۰۰ Server is busy
• ۶۰۱ Server is unavaliable
• ۶۰۲ Peer nameserver is down
• ۶۰۳ Database connection failed
• ۶۰۴ Server is going down
• ۷۰۷ Could not create connection
• ۷۱۱ Write is blocking
• ۷۱۲ Session is overloaded
• ۷۱۳ Too many active users
• ۷۱۴ Too many sessions
• ۷۱۵ Not expected
• ۷۱۷ Bad friend file
• ۹۱۱ Authentication failed
• ۹۱۳ Not allowed when offline
• ۹۲۰ Not accepting new users
• ۹۲۴ * Passport account not yet verified

کد شناسایی
هر کاربر MSN مسنجر برای برقراری ارتباط نیاز به یک کد ارتباطی خاص برای ارتباط یا درخواست خویش باشد. این کد یک عدد بین ۰ تا ۴۲۹۴۹۶۷۲۹۵ می تواند باشد. سرور از روی کد ارسال توسط هر کاربر در زمان پاسخ می تواند تشخیص بدهد که هر درخواست برای چه کسی بوده است. این شما شناسایی همیشه بعد از نام دستور ۳ حرفی و قبل از پارامترها قرار می گیرد.

MD5
MD5 یک الگوریتم رمز گذاری می باشد که در MSN مسنجر و بسیاری از نرم افزاری دیگر مورد استفاده قرار می گیرد. هر وقت که کلمه عبور ارسال می گردد قبل از ارسال با الگوریتم MD5 رمزگذاری شده و سپس ارسال می گردد. خروجی همیشه با حروف کوچک و به صورت هگز می باشد. ۶f3963009fc8a9d2b2ff137da0905c55 یک نمونه از کلمه عبور رمز شده می باشد

فرمول تشخیص صحت کد ملی ( کارت ملی شناسایی )

آذر ۲۵م, ۱۳۸۷

در این مقاله می خواهم به شما طریقه تشخیص صحت کد ملی را که ممکن است در زبانهای برنامه نویسی

مختلف و در فرمهای ورود اطلاعات مورد نیاز شما باشد را آموزش دهم.

همانطور که می دانید همه ارگانها و سازمانهای دولتی جمهوری اسلامی و شرکتهای تابعه موظف شده اند از

این پس فیلد جدیدی در کنار مشخصات افراد به نام کد ملی درج نمایند و تقریبا همه هموطنان عزیز در حال حاضر کارت ملی را دارند. ولی ما به عنوان یک برنامه نویس وقتی در فرمی کد ملی را دریافت می کنیم چگونه از صحت کد وارد شده مطمئن شویم.

سازمان ثبت احوال کشور در راستای ارائه کارت ملی روشی را برای تولید کدهای ملی استفاده نموده است که با استفاده از آنها می توانیم کدهایی داشته باشیم که از امنیت بالایی برخوردار باشند و همچنین قابلیت تقلب نداشته باشند.

همه کدهای ملی ۱۰ رقمی هستند.

کدهای ملی که همه ارقام آنها مثل هم باشند معتبر نیستند مثل

۰۰۰۰۰۰۰۰۰۰

۱۱۱۱۱۱۱۱۱۱

۲۲۲۲۲۲۲۲۲۲

۳۳۳۳۳۳۳۳۳۳

۴۴۴۴۴۴۴۴۴۴

۵۵۵۵۵۵۵۵۵۵

۶۶۶۶۶۶۶۶۶۶

۷۷۷۷۷۷۷۷۷۷

۸۸۸۸۸۸۸۸۸۸

۹۹۹۹۹۹۹۹۹۹

روش اعتبار سنجی کد ملی :

دهمین رقم شماره ملی را ( از سمت چپ ) به عنوان A در نظر می گیریم.

یک مقدار B در نظر می گیریم و آن را برابر با =

(اولین رقم * ۱۰) + ( دومین رقم * ۹ ) + ( سومین رقم * ۸ ) + ( چهارمین رقم * ۷ ) + ( پنجمین رقم * ۶) + ( ششمین رقم * ۵ ) + ( هفتمین رقم * ۴ ) + ( هشتمین رقم * ۳ ) + ( نهمین رقم * ۲ )

قرار می دهیم.

مقدار C را برابر با = B – (B/11)*11 قرار می دهیم.

اگر مقدار C برابر با صفر باشد و مقدار A برابر C باشد کد ملی صحیح است.

اگر مقدار C برابر با ۱ باشد و مقدار A برابر با ۱ باشد کد ملی صحیح است.

اگر مقدار C بزرگتر از ۱ باشد و مقدار A برابر با ۱۱ – C باشد کد ملی صحیح است.

در پایان یک نمونه کد جاوا اسکریپت جهت چک کردن کد ملی تقدیم می گردد //

function checkMelliCode(varmellicode)
{
var meli_code;
meli_code=varmellicode.value;
if (meli_code.length == 10)
{
if(meli_code==’1111111111′ ||
meli_code==’0000000000′ ||
meli_code==’2222222222′ ||
meli_code==’3333333333′ ||
meli_code==’4444444444′ ||
meli_code==’5555555555′ ||
meli_code==’6666666666′ ||
meli_code==’7777777777′ ||
meli_code==’8888888888′ ||
meli_code==’9999999999′ )
{
alert(“کد ملی صحیح نمی باشد”);
objcode.focus();
return false;
}
c = parseInt(meli_code.charAt(9));
n = parseInt(meli_code.charAt(0))*10 +
parseInt(meli_code.charAt(1))*9 +
parseInt(meli_code.charAt(2))*8 +
parseInt(meli_code.charAt(3))*7 +
parseInt(meli_code.charAt(4))*6 +
parseInt(meli_code.charAt(5))*5 +
parseInt(meli_code.charAt(6))*4 +
parseInt(meli_code.charAt(7))*3 +
parseInt(meli_code.charAt(8))*2;
r = n – parseInt(n/11)*11;
if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 – r))
{
return true;
}
else
{
alert(“کد ملی صحیح نمی باشد”);
objcode.focus();
return true;
}
}
else
{
return true;
}