-
دوشنبه, ۳۰ فروردين ۱۴۰۰، ۱۲:۵۰ ب.ظ
-
۶۶۳
سلام دوستان :)
توی این برنامه قراره یک اسکریپت whois با پایتون بنویسیم اما به روشی متفاوت
خب همونطور که میدونید اکثرا برای نوشتن این اسکریپت از کتابخونه های آماده و ابزار ها استفاده میکنن ولی ما میخوایم الان با اتصال مستقیم به سرور های whois اطلاعات مربوط به domain رو ازش استخراج کنیم
خب اول یکم از نظر مفهومی توضیح بدم
هر وب سایتی که توی اینترنته یک دامین داره مثلا google.com , aparat.com. این دامین ها رو صاحب های وبسایت خریدن و روی وبسایتشون ثبت کردن
دیتابیس هایی توی جهان موجودند که به اونها whois server میگن توی این دیتابیس ها اطلاعات این دامنه و صاحب اون نوشته می شن مثل شماره تلفن ، آدرس ، ایمیل و... که ما میتونیم با وصل شدن به اونها به این اطلاعات دسترسی داشته باشیم
خب برای اینکار دو تا سرور whois معروف توی جهان وجود دارن:
1- whois.internic.net
2- whois.iana.org
خب ما برای بدست آوردن اطلاعات از دو سرور بالا استفاده میکنیم. سرور اول برای دامین های org, com و... هست و سرور دوم برای دامین های کشوری مثل ir, ca و...
پروتکل whois روی پورت 43 TCP کار میکنه برای همین باید روی پورت 43 یک اتصال TCP به سمت سرور برقرار کنیم و یک درخواست برای اطلاعات دامین مورد نظرمون بفرستیم تا اطلاعات دامین مورد نظر رو برامون ارسال کنه
برای اتصال به سرور ها و برقراری کانکشن به سمت سرور(چه TCP و چه UDP) از کتابخونه 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())
خب اول دامین رو از کاربر گرفتیم و همشو تبدیل به حروف کوچیک کردیم بعدش http یا https و www رو ازش حذف کردیم
بعدش یک if نوشتیم که چک میکنه ببینه آیا دامین com , org یا net هست اگر بود سرور اولی رو برای اتصال انتخاب کنه اگر نه سرور دومی رو
حالا یک شی برای اتصال به سرور درست میکنیم
socket.AF_INET داره میگه که کانکشن از نوع IPV4 هست و socket.SOCK_STREAM میگه کانکشن از نوع TCP هست
بعدش روی پورت 43 به سرور متصل میشیم و دامین رو براش میفرستیم و جواب رو ازش دریافت میکنیم و چاپ میکنیم.
امیدوارم براتون مفید بوده باشه D: