-
جمعه, ۲۱ شهریور ۱۳۹۹، ۱۱:۴۳ ق.ظ
-
۱۳۰۲
روش متفاوت نوشتن اسکریپت whois در پایتون
درود به همه !
امروز در خدمت شما هستیم با یک آموزش دیگر در فاز اول هکینگ یعنی جمع آوری اطلاعات . همانطور که احتمالا میدانید کار ابزار های whois بدست آوردن اطلاعات یک دامنه و صاحب آن دامنه است . خب برای اینکار کتابخانه هایی آماده هستند که این کار را به راحتی انجام میدهند ولی ما امروز از آن کتابخانه ها استفاده نمیکنیم و به طور دستی اسکریپتی مینویسیم که به سرور های whois وصل شود و اطلاعات جمع آوری کند .
خب در ابتدا کمی از نظر مفهومی میریم جلو . هر وب سایتی که در اینترنت است ،دارای یک دامنه است . برای مثال google.com , aparat.com , blog.ir . این دامنه ها را صاحب های این وبسایت ها خریده اند و روی وبسایتشان ثبت کرده اند .سرور هایی در جهان هستند که به آن ها سرور های whois میگویند. روی این سرور ها دیتابیس هایی موجود هستش که وقتی شخصی دامنه ای را برای خود ثبت میکند ، اطلاعات این دامنه و صاحب آن مثل(شماره تلفن ، آدرس و ...) ، داخل این دیتابیس ها نوشته میشود . بنابراین ما اگر به این دیتابیس ها دسترسی داشته باشیم ، میتوانیم به اطلاعات دامنه هر سایتی که میخواهیم دسترسی داشته باشیم .
ما برای اینکار از دو سرور whois معروف در جهان استفاده میکنیم :
1 - سرور whois.internic.net : این سرور ، اطلاعات مربوط به دامنه های com. و net. و org. را نگه داری میکند .
۲ - سرور whois.iana.org : این سرور ، اطلاعات مربوط به دامنه های کشوری مثل ir. , .uk , .... را نگهداری میکند.
ما برای بدست آوردن اطلاعات از دو سرور بالا استفاده میکنیم . پروتکل whois روی پورت TCP 43 فعالیت میکند بنابراین باید روی پورت ۴۳ به سرور های بالا متصل بشویم و یک درخواست برای اطلاعات دامین مورد نظرمون بفرستیم تا اطلاعات دامین مورد نظر را برای ما ارسال کنند .
برای اتصال به سرور ها و برقراری ارتباط tcp از کتابخانه ی socket در پایتون استفاده میکنیم که به طور پیشفرض در پایتون نصب است .
سورس کد :
import socket
domain = input("Domain : ").lower()
domain = domain.replace("http://","") domain = domain.replace("https://","") domain = domain.replace("www.","")
if domain[-3:] == "org" or domain[-3:] == "com" or domain[-3:] == "net": whois_server = "whois.internic.net" else: whois_server = "whois.iana.org"
s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
s.connect((whois_server,43))
s.send((domain+"\r\n").encode())
msg = s.recv(10000)
print(msg.decode())
توضیح سورس کد : در خط اول کتابخانه ی socket رو ایمپورت کردیم .
سپس از کاربر یه ورودی گرفتیم که باید دامین مورد نظر رو وارد کنه . پس از اینکه دامین رو وارد کرد اومدیم http:// و https:// و .www رو از اول دامین حذف کردیم .
سپس با یه if چک کردیم اگه آخر دامین com یا org یا net بود سروری که باید ازش استفاده کنیم رو برابر سرور اول یعنی whois.internic.net قرار بده . در غیر این صورت یعنی دامین یک دامین کشوری هستش پس از سرور دوم یعنی whois.iana.org استفاده کنه .
سپس یک شیء سوکت ساختیم و ریختیم داخل متغییر s . ورودی socket.AF_INET مشخص میکنه ما از IP ورژن ۴ استفاده میکنیم و ورودی دوم یعنی socket.SOCK_STREAM مشخص میکنه میخوایم ارتباط TCP برقرار کنیم .
پس از اون با استفاده از تابع connect وصل شدیم به پورت ۴۳ روی سرور مورد نظر .
در خط بعد اسم دامینی که میخوایم اطلاعاتشو بگیریم رو برای سرور ارسال کردیم . دقت کنید آخر دامین حتما باید r\n\ باشه .
پس از اون با استفاده از تابع recv اومدیم جواب درخواستمون یعنی اطلاعات دامین رو از سرور گرفتیم و ریختیم داخل متغییر msg . عدد ۱۰۰۰۰ که به تابع recv دادیم مشخص کننده ی حداکثر حجم اطلاعات دریافتی هستش .
در نهایت اطلاعات رو چاپ کردیم .
پس از اجرای سورس کد و نوشتن دامین مورد نظر میبینیم که اطلاعات دامین (شماره تلفن صاحب دامین ، آدرس ، ثبت کننده دامین و... ) برای ما نمایش داده میشود :
به جای سرور های whois که در سورس از آن ها استفاده کردیم میتونید از هر سرور whois دلخواهی که میخواین استفاده کنین . برای مثال سرور whois مخصوص دامنه های ایران (ir.) ، whois.nic.ir است . در لینک زیر لیست عظیمی از whois server های جهان رو میتونید ببینید :
https://www.nirsoft.net/whois_servers_list.html
سوالی بود در بخش نظرات مطرح کنید .
یا حق !
Telegram Channel : @mrpythonblog