ورود و ثبت نام

آموزش ساخت پورت اسکنر گرافیکی با پایتون

خواندن این مطلب

7 دقیقه

زمان میبرد!

آموزش ساخت پورت اسکنر گرافیکی با پایتون

 

سلام خدمت تمامی کاربران گل اکادمی اولترا آموز

 

با یه آموزش دیگه راجب زبان برنامه نویسی پایتون درخدمتتون هستیم ، اما اینبار پایتون به صورت گرافیکی رو میخواهیم با هم تجربه کنیم ، توی این آموزش میخواهیم با کمک Pyqt که یک فریمورک طراحی رابط گرافیکی (GUI) برای پایتون است ، یک پورت اسکنر بسازیم اما نه به صورت خط فرمان به صورت گرافیکی که خیلی راحت آدرس مورد نظرتون رو وارد کنید و دکمه Scan رو بزنید و در نهایت به صورت کاملا گرافیکی بهتون خروجی نمایش داده بشه ، خب بریم سراغ کارمون ولی قبل از شروع کار اگر دوست دارید راجب طراحی برنامه های گرافیکی با پایتون بیشتر مطلب بزاریم حتما تو قسمت کامنت ها بگید…

 

 

قبل از اینکه بریم سراغ آموزش یه دوره رایگان خیلی باحال براتون آماده کردیم که به صورت کامل ساخت ابزار های گرافیکی با پایتون رو آموزش دادیم با دیدگاه امنیتی 

 

دوره آموزشی Pyqt5 برای متخصصین امنیت

 

 

خب برای ساخت پورت اسکنر گرافیکی ما نیاز به دوتا ماژول داریم یکی requests برای فرستادن درخواست های http یکی هم PyQt5 که با استفاده از این ماژول رابط گرافیکی خودمون رو می نویسیم

 

با دستور زیر این دو ماژول رو نصب میکنیم

 

 

 

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

 

 

 

در خط ۱ کد بالا کلاس هایی که در ماژول QtWidgets وجود داره رو فراخوانی کردیم در خط ۲ هم همین کار رو انجام دادیم با این تفاوت که تمام کلاس های QtGui رو فراخوانی کردیم در خط ۳ هم ماژول sys رو فراخوانی کردیم که توی این برنامه ما به متغیر argv و تابع exit نیاز داریم در خط ۶ تابعی به اسم main تعریف کردیم در خط ۷ یک شی جدید از کلاس QApplication ساختیم و ورودی اون یک لیست هست که در اینجا ما از sys.argv استفاده که ارگومان های که بعد از اسم برنامه در اون قرار داره کلاس QApplication همونطور که از اسمش مشخصه برای ساخت برنامه های گرافیکی باید از این کلاس استفاده کنیم در خط ۸ یک شی از کلاس QWidget ساختیم و اون رو در متغیر win ذخیره کردیم این کلاس برای ما یک پنجره خالی میسازه در خط ۱۱ با استفاده متد show این پنجره رو نشون دادیم و در خط ۱۲ برنامه گرافیکی خودمون رو اجرا کردیم و به محض خروج از برنامه با استفاده از تابع exit که در sys وجود داره از برنامه خارج میشیم در خط ۱۵ یک شرط تعریف کردیم که اگه مقدار متغیر name برابر با main باشه بیا تابع main رو اجرا کن زمانی مقدار متغیر برابر با main میشه که برنامه توسط مفسر پایتون اجرا بشه

 

حالا اگه برنامه رو با مفسر اجرا کنیم برنامه به شکل زیر اجرا میشه

 

 

 

از اونجایی که ما ایکون و تایتلی برای برنامه ست نکردیم برنامه خودش اینارو ست میکنیم با استفاده متد setWindowIcon و setWindowTitle میتونیم چیزی که خودمون میخوایم رو ست کنیم

 

 

 

 

در خط ۱۰ با استفاده متد setWindowTitle تایتل برنامه رو ست کردیم در خط ۱۱ با استفاده از متد setWindowIcon ایکون برنامه رو ست کردیم ورودی این متد باید از جنس کلاس QIcon برای همین ما یک شی ساختیم که ورودی اون مسیر ایکون هست و بعد این شی رو به ورودی فرستادیم

 

اگه مجددا کد رو اجرا کنیم برنامه خروجی زیر رو میده

 

 

 

 

حالا باید متنی روی این پنجره بنویسیم که کاربر بدونه چه چیزی رو وارد کن برا نوشتن متن از کلاس QLabel استفاده میکنیم

 

 

 

 

در خط ۱۳ شی ای از کلاس QLabel تعریف کردیم ما باید مشخص کنیم که این متن کجا قرار باید بگیره , روی پنجره پس باید متغیر win رو به عنوان ورودی به اون بدیم و بعد در خط ۱۴ با استفاده از متد setText متن خودمون رو مینویسم

 

اگر برنامه رو اجرا کنید خروجی زیر رو میده

 

 

 

از اونجایی که فونت و سایز پیشفرض زیاد جالب نیست میتونیم با استفاده از کلاس QFont اینو تغییر بدیم و یه چیز قشنگ تر بزاریم 🙂

 

 

 

در خط ۱۶ کد بالا شی ای از کلاس QFont تعریف کردیم و اسم اون رو font گذاشتیم در خط ۱۷ با استفاده متد setFamily فونت رو تغییر دادیم در خط ۱۸ با استفاده از متد setBold این متن رو bold کردیم و در خط ۱۹ با استفاده از متد setPointSize سایز فونت رو به ۱۶ تغییر دادیم در خط ۲۱ با استفاده متد setFont که در کلاس QLabel وجود داره این فونت رو ست کردیم

 

به اجرای برنامه به خروجی زیر میرسیم

 

 

 

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

 

 

 

در خط ۲۳ شی ای جدید از کلاس QTextEdit تعریف کردیم و win رو به عنوان ورودی فرستادیم این کار باعث میشه فیلدی در پنجره برنامه برای وارد کردن متنی نمایش داده بشه در خط ۲۴ از با استفاده متد setGeometry طول عرض و مکان این فیلد رو مشخص کردیم و در خط ۲۵ فونت رو تغییر دادیم

 

با اجرای برنامه به خروجی زیر میرسیم

 

 

 

حالا باید دکمه ای روی صفحه بگذاریم که با زدن روی اون برنامه روی تارگت عملیات پورت اسکن انجام بده

 

 

 

در خط ۳۲ شی ای از کلاس QPushButton ساختیم و اسم اون رو btn گذاشتیم و متغیر win رو به عنوان ورودی فرستادیم که باعث میشه دکمه ای روی برنامه ما نمایش داده بشه در خط ۳۳ متن این دکمه رو با استفاده متد setText ست کردیم درخط ۳۴ با استفاده از متد setGeometry طول عرض و مکان دکمه در صفحه رو مشخص کردیم و در خط ۳۵ از کلاس clicked متد connect رو اجرا کردیم و تابع evnt_btn رو به عنوان ورودی تابع فرستادیم این کد باعث میشه که کلیک کردن رو دکمه تابع evnt_btn اجرا بشه در خط ۲۷ تابع به اسم evnt_btn تعریف کردیم در خط ۲۸ تارگتی که کاربر در فیلد وارد کرده با استفاده متد toPlaintText گرفتیم و در متغیر s ذخیره کردیم در خط ۲۹ شی ای از کلاس Thread تعریف کردیم که با استفاده از متد start تابع scan_port در بکگراند برنامه اجرا میشه و متغیر s رو به عنوان ورودی به تابع فرستادیم

 

 

 

 

در خط ۱۵ تابعی به اسم scan_port تعریف کردیم در خط ۱۶ ادرس سایت hackertarget و تارگت خودمون رو باهم ترکیب کردیم و در خط ۱۷ با استفاده از تابع get در ماژول requests در خواستی به این سایت میفرستیم این سایت پورت اسکن رو انمپ انجام میده و خیلی سریع نتیجه رو برمیگردونه نتیجه رو در متغیر ports قرار دادیم در خط ۱۸ تابع run_msgbox رو اجرا کردیم و نتیجه اسکن رو به ورودی اون فرستادیم در خط ۷ تابعی بع اسن run_msgbox تعریف کردیم که ورودی اون نتیجه اسکن هست در خط ۸ شی ای از کلاس QMessageBox تعریف کردیم و در متغیر msg قرار دادیم در خط ۹ ایکن این پیام رو ست کردیم در خط ۱۰ متن پیام که همون نتیجه اسکن هست رو ست کردیم در خط ۱۱ تایتل پیام رو ست کردیم و در خط ۱۲ با استفاده متد setStandardButtons دکمه پیام رو ست کردیم و در خط ۱۳ این پیام رو نشون دادیم

 

با اجرای کد به خروجی زیر میرسیم 🙂

 

 

 

 

 

امیدوارم که از این آموزش لذت کافی رو برده باشید و حتما نظرات خودتون رو برای ما بنویسید… برامون با ارزشه 🙂

 

 

 

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



نظرات کاربران



  • Behi
    مهمان

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

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

مطالب مرتبط