برنامه نویسی سوکت در پایتون – قسمت اول

خوب سوکت چیه؟

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

برنامه معروفی که برای ارتباط سوکت بین دو کامپیوتر استفاده میشه telnet هست

مثال دریافت صفحه یک سایت با سوکت به وسیله telnet

نکته: بعد از مشخص کردن هاست باید دو بار کلید اینتر رو بزنید

مثال دریافت whois با سوکت به وسیله telnet

سرورهای هوییز در پورت ۴۳ سرویس میدن

حالا همین کار رو میخوایم با پایتون انجام بدیم

خوب شروع میکنیم

socket_family میتونه AF_INET (برای IPv4) و AF_INET6 (برای IPv6) باشه و یا AF_UNIX

socket_type هم میتونه SOCK_STREAM (برای استفاده از پروتکل TCP) و SOCK_DGRAM (برای استفاده از پروتکل UDP) باشه. دو پروتکل TCP و UDP موارد استفاده متفاوتی داره

در ۹۹ درصد مواقع خانواده AF_INET درکنار پروتکل TCP کارتون رو راه میندازه

پس اگه بخوایم یک سوکت در IPv4 با پروتکل TCP داشته باشیم

برای اتصال به یک سرور از تابع connect باید استفاده کنیم اگه از AF_INET استفاده کنیم تابع connect دو مقدار addr و port رو میگیره

addr میتونه نام هاست و یا آدرس آی پی باشه و port هم پورت موردنظر برای اتصال هست.

نکته: برای به دست آوردن آی پی یک هاست میتونید از تابع gethostbyname استفاده کنید

خوب الان میخوایم صفحه اول یک سایت رو بگیریم

برای ارسال اطلاعات از تابع send استفاده میکنیم تابع send بایت قبول میکنه برای همین باید اطلاعات رو انکد کنید و چون utf-8 استاندارد بیشتر سرورها هست از utf-8 استفاده میکنیم. QUERY دستوری هست که میخواید بفرستید.

برای مثال اگه بخوایم صفحه اول یک سایت رو دانلود کنیم:

برای دریافت صفحه اول سایت باید هدرهای بالا رو بفرستیم اگه مرورگرتون رو باز کنید و به بخش developertools برید و یک سایت رو باز کنید متوجه هدرهای بالا میشید.

نکته: ما همه دستورها رو در قالب یک رشته بزرگ فرستادیم میتونیم اونها رو جدا کنیم و تکی بفرستیم مثل نمونه زیر البته فکر میکنم فرستادن یک رشته بزرگ قابل اعتماد تر از این روش باشه.

نکته: هدر Host ضروری هست شما با ارسالی این هدر به سرور دستور میدید که یک سایت مشخص رو بده همونطور که میدونید در هر سرور تعداد زیادی سایت میتونه قرار داشته باشه.

نکته: هدرها با r\n\ از هم جدا شدن (در واقع ما باید نشونه ای رو بفرستیم که به سرور بفهمونیم بره خط جدید که اگه سرور لینوکس باشه این نشونه n\ هست و اگه ویندوز باشه r\n\ هست پس برای اینکه دستورمون در همه سرورها قابل اجرا بشه همون r\n\ رو میزنیم) در انتها هم دوباره باید اضافه کنید که در واقع عین فشردن کلید اینتر میمونه و سرور نتیجه رو به ما میده.

نکته: تقریبا همه سایتها روی پورت ۸۰ اجرا هستند برای همین به پورت ۸۰ سرور سوکت میزنیم.

در مثال بالا با تابع recv به اندازه ۴۰۹۶ بایت از اطلاعات دریافت شده از سرور رو میخونیم این عدد دلبخواه هست البته خود پایتون توصیه کرده که این عدد توانی از ۲ باشه تا بهترین هماهنگی بین سخت افزار و نرم افزار باشه

یادتون نره که وقتی کارتون تموم شد سوکت رو ببندید

یک مثال دیگه

میخوایم whois یک دومین رو بگیریم برای این کار باید به سرور whois.nic.ir با سوکت وصل شیم و اطلاعات بفرستیم و نتیجه رو بگیریم

 

نکته: انتهای اطلاعات ارسالی باید r\n\ (همونطور که توضیح دادم) بزارید همونطور که گفتم عین زدن کلید اینتر میمونه

 

سوکت با پروکسی

برای اینکه با پروکسی سوکت بزنید میتونید از کتابخونه pysocks استفاده کنید این کتابخونه توانایی برقرار ارتباط با پروکسی های socks و http رو داره API اون هم بسیار شبیه کتابخونه سوکت خود پایتون هست.

مثال بالا در pysocks

قبلش با دستور  pip install pysocks  نصبش کنید

 

این پایان قسمت اول آموزش بود در قسمت دوم درباره ایجاد سرور سوکت توضیح خواهم داد

جستجو در کل مطالب سایت

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *