چگونه Whois (کیست آن) ۵۰۰ هزار دومین رو در ۱۰ روز گرفتیم

قبل از خوندن ادامه متن حتما این نوشته که درباره تفاوت Registrar ،Registry و Registrant هست رو بخونید.

تو جدیدترین پروژم باید اطلاعات Whois (کیست آن) تعداد 500 هزار دومین رو به دست میاوردم دومین هایی با tld های مختلف.

وقتی هوییز چند تا دامنه رو گرفتم متوجه شدم اطلاعات کامل به ما نمیده اونجا با مفهوم thick whois و thin whois آشنا شدم.

حالا این دو تا چیه؟

وقتی شما هوییز دامنه ای که پسوند اون com یا net هست رو میگیرید اگه اون دامنه در یک Registrar ثبت شده باشه اون موقع شما تمام اطلاعات اون دامنه رو نمیگیرید و فقط نام و آدرس سرور هوییز Registrar یا Registrar Whois Server به همراه تاریخ ثبت و انقضا دامنه رو میگیرید، برای اینکه تمام اطلاعات دامنه مثل اطلاعات تماس و ... رو به دست بیارید باید هوییز دامنه رو از Registrar Whois Server بگیرید. این اولین چالش پروژه بود.

چالش بعدی این بود که وقتی درخواست زیادی به سرور هوییز در بازه زمانی کم میزدیم در پاسخ، سرور هوییز به ما خطا برمیگردوند که سهمیه شما در این بازه زمانی تموم شده و باید بعدا درخواست بزنید این حالت برای سرور whois.nic.ir که دامنه های ir رو ثبت میکنه بدتر بود چون هیچ خطایی برنمیگردوند و فقط اتصال رو زنده نگه میداشت و هیچ چیزی برنمیگردوند.

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

حالا میریم سراغ کد زدن

طبق چالش ها باید کتابخونه ای رو استفاده کنیم که هوییز یک دامنه رو بگیره و اگه اون دامنه Registrar Whois Server داشت دوباره درخواست بزنه به اون سرور هوییز تا اطلاعات کاملتر رو بگیره تا اینجا بیشتر کتابخونه ها جزو کاندیدها بودن اما همشون یک مشکلی داشتن.

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

پس خودم دست به کار شدم.

برای اینکه هوییز یک دومین رو بگیریم از یک لیست آماده که شامل پسوند و سرور هوییز اون پسوند بود استفاده کردیم به اینصورت که با سوکت به سرور هوییز وصل شدیم و اطلاعات رو دریافت و پردازش کردیم اگه فیلدی به نام Registrar Whois Server داشت دوباره هوییز رو با اون سرور تکرار میکردیم.

اگه سرور هوییز پسوندی رو هم نداشتیم کافی بود به whois.iana.org سوکت بزنیم و نام پسوند رو بفرستیم و سرور هوییز اون رو دریافت کنیم و بعد فایلی که اطلاعات سرورهای هوییز رو نگه میداره رو به روز کنیم.

یک سری پسوندها سرور هوییز ندارن و برای دریافت هوییز باید به سایتشون مراجعه کرد مثل پسوند az

whois server برای پسوندهایی که بیشتر از یک قسمت دارند همون whois server قسمت tld هست برای مثال whois server پسوند co.uk. همون whois server پسوند uk. هست.

برای تنظیم کردن پروکسی هم به جای استفاده از کتابخونه استاندارد سوکت پایتون از pysocks استفاده کردیم که امکان سوکت زدن به همراه پروکسی رو میده.

برای پروکسی و تغییر آی پی هم از تور استفاده کردیم اینجا میتونید آموزش راه انداختن تور رو ببینید.

برای اینکه به طور خودکار آی پی عوض بشه باید در فایل تنظیمات تور در آدرس  etc/tor/torrc/ خط زیر رو قرار بدید

با این دستور هر 10 ثانیه آی پی عوض میشه توجه داشته باشید که 10 ثانیه حداقل مقدار مجاز برای این تنظیم هست.

یه راه دیگه عوض کردن IP در tor این هست که سیگنال HUP رو به اون ارسال کنید مثل دستور زیر

تعداد درخواست مجاز در یک بازه زمانی مشخص برای دریافت هوییز از سرور هوییز مراکز ثبت دومین باهم متفاوت بود به همین خاطر ما دوره تغییر آی پی رو، حداقل مقدار مجاز یعنی 10 ثانیه گذاشتیم.

خوب تا اینجا بیشتر مراحل انجام شده، برای اجرایی کردن این کار ما از 3 تا سرور استفاده کردیم به طوری که در هر کدوم از سرور ها، خزنده لیست دامنه رو میگرفت و هوییز اونها رو به دست میاورد و ذخیره میکرد چالش بعدی این بود که برنامه ای که لیست دامنه ها رو به خزنده ها میده که اسمش رو feeder میزاریم دامنه تکراری نده.

برای حل این مشکل فیلدی گذاشتیم به نام robot_see_date و هر وقت که feeder یه سری دامنه رو به خزنده میداد مقدار این فیلد رو هم به روز میکرد و دفعه بعد به خزنده بعدی لیست دامنه هایی که robot_see_date اونها قدیمتر بود رو اول میداد تا تکراری نده.

نکته مهم اینکه چون این آی پی ها عمومی هستند ممکن بود افرادی باعث شده باشن که سهمیه هوییز در اون بازه زمانی تموم شده باشه و با وجود اینکه ما IP رو عوض میکردیم سرور هوییز جواب نده برای حل این مشکل ما هوییزی که میگرفتیم رو چک میکردیم اگه تعداد کاراکترهاش کمتر از 100 بود به احتمال زیاد پیامی  داشت که میگفت شما سهمیتون تموم شده پس ما اینها رو ذخیره نمیکردیم تا سری بعد دوباره اونها رو بگیریم.

ما این عدد 100 رو با بررسی اطلاعات هوییزی که قبلن داشتیم به دست آوردیم.

 

ما با این روش به طور متوسط روزانه 50 هزار هوییز رو به دست آوردیم و در عرض 10 روز 500 هزار هوییز در دیتابیسمون قرار داشت.

 

خروجی این پروژه هم کتابخونه Pois شد که شامل پیاده سازی کامل راه حل های بالا هست.

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

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