ساخت پیلود شخصی برای کنترل کامپیوتر شخصی در پایتون :: Mr Python | مستر پایتون

ساخت پیلود شخصی برای کنترل کامپیوتر شخصی در پایتون

  • ۱۳۱۹

ساخت پیلود شخصی برای کنترل کامپیوتر شخصی در پایتون

 

درود به همه !

 

امیدوارم این چند روز تونسته باشین از قرنطینه بهترین استفاده رو برده باشین ! :)

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

ما معمولا اسکریپت هایی که مینوشتیم ، اسکریپت هایی بودن که کاری به اینترنت نداشتن (بجز چنتاشون) . امروز میخوایم بریم سراغ کتابخونه ی عالی و کاربردی socket !

شاید درمورد سوکت نویسی در پایتون شنیده باشین . بزارین بگیم که اصلا سوکت و سوکت نویسی چیه !؟ خب شاید با شنیدن واژه ی سوکت یاد سوکت های فیزیکی که سر بعضی کابل های مختلف هست بیافتین (سوکت های نری یا مادگی) . اتفاقا خوبه که یاد اینا میافتین . کار اینا چیه ؟ درگاه ارتباط کابل با سخت افزار یا هرجای دیگه هستن . سوکت های برنامه نویسی هم همینطور هستن . خیلی وقتا هست ما توی برنامه هامون نیاز داریم تا با یک کامپیوتر ، سرور یا .. دیگه ای ارتباط برقرار کنیم (از طریق شبکه) . اینجاس که سوکت ها به کمک ما میان . سوکت ها داخل برنامه نویسی به ما این قابلیت رو میدن تا از طریق شبکه یکی از انواع ارتباط مثل TCP یا َUDP را با سیستم هدف بگیریم .

خب حالا چرا ما باید از سوکت استفاده کنیم ؟‌ در ابتدا گفتیم که قراره یه ابزاری به نام پیلود بسازیم که کارش اینه میتونیم به وسیله ی اون سیستم خودمون رو از راه دور کنترل کنیم . خب چجوری ؟ فرض کنید ما دوتا هاست داریم .(هر دستگاهی توی شبکه که دارای کارت شبکه هست رو میگن هاست مثل کامپیوتر ، لپتاپ ، ...) یکی از این هاست ها کامپیوتر اصلیمونه که میخوایم با اون یک هاست کنترلش کنیم . خب برای این دوتا هاست اسم میزاریم . کامپیوتر اصلیمون رو میگیم هاست A و هاست دومی که میخوایم به وسیله ی اون وصل بشیم به کامپیوتر اصلیمون رو میگیم هاست B . ما یک اسکریپتی روی هاست A اجرا میکنیم که به عنوان یه سرور عمل میکنه و به یه پورت خاص گوش میده تا ما با هاست B وصل بشیم به همون پورت تا نهایتا ارتباط بین این دو سیستم برقرار بشه . سپس هر پیامی که از طرف هاست  B براش ارسال میشه رو داخل خط فرمانش اجرا میکنه . در نتیجه ما از طریق هاست B هر متنی برای هاست A بفرستیم توی خط فرمانش اجرا میشه و ما کنترل کامل رو در اختیار داریم . :)

پس بریم و اسکریپتی برای هاست A بنویسیم تا هاست A رو تبدیل به یک سرور بکنه

 

ما برای ارتباطات بین هاست ها از سوکت نویسی استفاده میکنیم . کتابخانه ای در پایتون هست به نام socket که مخصوص سوکت نویسی هستش .

 

ابتدا یه فایل پایتونی به نام server.py میسازیم و سورس زیر رو میزاریم داخلش :

import socket
from os import system
IP = "localhost"
PORT = 12345
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((IP,PORT))
sock.listen(2)
c ,addr = sock.accept()
while True:
    message = c.recv(1024)
    message = message.decode().strip("\n")
    system(message)

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

نکته : از پورت های رزرو شده به هیچ وجه استفاده نکنین چون اینکار میتونه فعالیت سرویس هایی که روی اون پورت ها دارن کار میکنن رو مختل کنه . پورت های رزرو شده از ۱ تا ۱۰۲۴ هستن . پیشنهاد میکنم از ۱۰۰۰۰ به بعد استفاده کنین . البته باید بگم ۶۵۵۳۵ تا پورت بیشتر نداریما ! (دقیق ترش ۶۵۵۳۶ تاس چون پورت صفر هم وجود داره ولی مثل بقیه ی پورت ها نیس جریانش)

سپس یک سوکت به نام sock تعریف کردیم . پارامتر socket.AF_INET یعنی میخوایم از آی پی ورژن ۴ (IPv4) استفاده کنیم . پارامتر socket.SOCK_STREAM یعنی میخوایم یه ارتباط TCP یا اتصال گرا برقرار کنیم .

سپس با دستور sock.bind اومدیم یه آدرس رو اختصاص دادیم به سوکت یا آی پی و پورت رو بایند کردیم .

پس از اون از دستور listen استفاده کردیم که میاد گوش میده روی پورتی که مشخص کردیم تا یکی وصل بشه بهش . اون عددی که توی پرانتز نوشتیم یعنی ۲ نفر میتونن نهایتا وصل بشن . (با این سورس ما فقط نفر اولی میتونه وصل شه !)

در خط بعد گفتیم c , addr = socket.accpet این میاد یه ارتباط رو اکسپت یا قبول میکنه . وقتی هاست B میخواد بهش وصل بشه ، ارتباط رو تایید میکنه.

و بعد هم یه حلقه while بی نهایت گذاشتیم که هربار با دستور ()recv میاد گوش میده ببینه هاست B که بهش وصله چی براش میفرسته .هرچی فرستاد با تابع    system داخل کتابخانه ی  os میره داخل خط فرمان اجرا میکنه .  

خب این از سورس سرورمون . اینو روی کامپیوتری که میخوایم کنترل کنیم باز میکنیم و در کامپیوتر دیگه ای (HOST B) باید وصل بشیم بهش . برای وصل شدن میتونیم دوباره یه سورس بنویسیم تا بهش وصل بشه . ولی از ابزار قدرتمند ntecat برای اینکار استفاده میکنیم :)

من هردوتا رو روی سیستم خودم اجرا میکنم برای تست . شما میتونید هاست A سیستم خودتون باشه و هاست B ترموکس روی گوشیتون باشه .

ابتدا سورس سرور رو روی کامپیوترم باز میکنم .

MrPython@debian:~$ python3 server.py

سپس با استفاده از nc یا همون نت کت وصل میشم بهش با استفاده از دستور زیر :

MrPython@debian:~$ nc localhost 12345

ابتدا دستور nc رو نوشتم بعد ایپی کامپیوتری که میخوام بهش وصل بشم رو میدم که من دادم localhost چون توی سورس داده بودم localhost . سپس پورت که بازم دادم ۱۲۳۴۵ چون توی سورس گذاشتیم ۱۲۳۴۵ .

پس از اجرای این دستور ما وصل میشیم به سرور . حالا هرچی بنویسیم میره توی خط فرمان اون اجرا میشه ولی چیزی به ما نشون نمیده .

 

 

مشکلی بود مطرح کنین.

یا حق !

 

  • سلام عالی بود!

    من با سوکت یه برنامهه نوشتم وقتی اجرا میشه chdir میگیره و درایو هارو عوض میکنه فایل ها رو میخونه و با سوکت send() میکنه به سرور و فایل های تارگت رو رو سیستم خودش می‌فرسته فقط فرایند ارسال طول میکشه و بستگی به حجم فایل داره

    پاسخ:
    درود . 
    چقد خوب عالیه !
  • Salam

    Man ye code neveshtam ba tkinter ke chand halat dare.

    Toye ge halat mikham vasl besham be server be in sorat ke ye liste sade befrestam va server ke aghaye modir hast check kone bad taeid kone.

    Hala age taeidie gereftam ba ye if e sade betoonam list ro print begiram

    Age nagereftam ham ke kharej beshe az barname va yechizi type kone momeh nist

     

    Rahnamei mikonid chekar konam?

     

    Fagjat to ye halate kod mikham taeidie begiram az server hamin

    Age rahe digei ham be zehneton mirese komakam konid.tashakor

     

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

    یکی از ساده ترین راه های استفاده از کتابخونه ی socket هستش که باید یک listener برای سرور بنویسید و از طرف کلاینت هم کدی بنویسید که وصل بشه به listener روی سرور . البته این روش میتونه از نظر امنیتی مشکل داشته باشه . بهتر هستش از ارتباط امن ssl برای اینکار استفاده بشه . 
    برای مثال میتونید یک وب سرور (وب سروری که خودتون با php یا جنگو یا ... مینویسید) رو روی سرور اجرا کنید و اینکارو انجام بدید .
  • سلام

    من این اسکریپت ها رو اجرا کردم ولی مشکلی که بود این بود که وقتی من دستوری رو از کامپیوتر b ارسال می کردم، دستور روی کامپیوتر a اجرا می شد ولی نتیجه ی دستور درون کنسول کامپیوتر b نمایش نمی شد.

    اگر میشه کمک کنید.

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

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