روش متفاوت نوشتن اسکریپت whois در پایتون :: Mr Python | مستر پایتون

روش متفاوت نوشتن اسکریپت whois در پایتون

  • ۱۳۰۲

روش متفاوت نوشتن اسکریپت 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

  • سلام چطوری؟

    اقا برای من Error trying to connect to socket: closing socket - timed out تایم اوت ارور میده

    نتم وصلع

    دامنمم فیلتر نیس

    aparat.com

    بعدشم همه اطلاعات null 

    مشکل از کجاست؟

    پاسخ:
    سلام . ممنون . تست کردم مشکلی نداشت ...
    دوباره تست کن
  • من میخام یه چیزی شبه چت روم بسازم که هر کسی فایل کلاینت رو باز کنه اسمش رو وارد کنه اسم بره برای سرور و توی یک متغیر ذخیره شه و هر کسی کلاینت رو باز کنه همین اتفاق بیفته بعد همه با هم چت کنن بعد اگر کسی وسط چت به به چت روم به پیونده سرور قبول کنه و اون هم بتونه پیام بده و پیام دریافت کنه بعضی سایت ها کار با سوکت رو اموزش میدن اما یاد نمیدن که چجوری وسط انتقال پیام منتظر درخاست کلاینت هم  برای عضو شدن به چت روم باشه و اگر هفت هشت نفر هم داخل چت روم بیان از کار نیفته

    پاسخ:
    سوال شما خیلی کلیه . دقیق تر مطرح کنید لطفا .
  • سلام

    خیلی جالب بود

    راستی اموزشsocketرو کی میزارید

    من خیلی به این اموزش نیاز دارم

    پاسخ:
    سلام . 
    در مورد چی این کتابخونه میخواید بدونید ؟ چه پروژه ای میخواید باهاش بسازید ؟
  • ببخشید سلطان یه سوال دیگه

    این هوییز خود پایتون وب سروش چیه؟

    بعد وب سروری نیست که همش رو جواب بده؟

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

    پاسخ:
    درود بر شما . مچکرم .
    ما مباحث پایه ی تست نفوذ با پایتون رو تصمیم داریم تا پوشش بدیم .
    همچنین دوره هایی هست که دارن آماده میشن .
  • مستر خداوکیلی دمت گرم!

    جدا عالی هستی، عالیی

    پاسخ:
    خواهش میکنم لطف داری 😉✋
  • وای خیلی قشنگ و عالی بود👍

    پاسخ:
    مچکرم از شما 😊✋
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی