چطوری کامپیوترمون رو از طریق ربات تلگرام کنترل کنیم (پایتون) :: Mr Python | مستر پایتون

چطوری کامپیوترمون رو از طریق ربات تلگرام کنترل کنیم (پایتون)

  • ۶۲۵

چطوری کامپیوترمون رو از طریق ربات تلگرام کنترل کنیم (پایتون)

 

درود به همه !

 

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

خب همونطور که میدونید برای تلگرام یه کتابخونه ای وجود داره به اسم python-telegram-bot که در واقع یک API برای بات های تلگرام در پایتون هستش و ما میتونیم از طریق این کتابخونه توی پایتون ربات تلگرام بنویسیم .

در همین پروژه هم ما برای نوشتن ربات تلگرام از این کتابخونه استفاده میکنیم . خب برای شروع نیاز داریم تا کتابخونه رو نصب کنیم . برای اینکار از ابزار pip استفاده میکنیم .

نصب کتابخونه در لینوکس :

MrPython@debian:~$ sudo pip3 install python-telegram-bot

نصب کتابخونه در ویندوز :

C:\> pip install python-telegram-bot

 

خب میریم برای نوشتن سورس . سورس کد ابزار :

from telegram.ext import Updater,CommandHandler
import subprocess

updater = Updater("TOKEN",use_context = True)

def start_method(update,context):
    context.bot.sendMessage(update.message.chat_id,"Connected !")

def run_command(update,context):
    command = ""
    for i in context.args:
        command += i+" "
    print(str(update.message.chat_id)+" : "+command)
    proc = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)
    command_result = proc.stdout.read() + proc.stderr.read()
    context.bot.sendMessage(update.message.chat_id,command_result.decode())

updater.dispatcher.add_handler(CommandHandler("start",start_method))
updater.dispatcher.add_handler(CommandHandler("run",run_command))

updater.start_polling()

توضیح : طبق معمول در خط اول و دوم کتابخونه های مورد نیاز رو وارد کردیم . از کتابخونه ی telegram دو کلاس Updater و CommandHandler رو ایمپورت کردیم که بعدا کاربردشو میبینیم . و همچنین کتابخونه ی subprocess رو نیز برای اجرای دستورات در خط فرمان و دیدن نتیجه ی آن ها ایمپورت کردیم .

سپس اومدیم یه شیء از کلاس Updater ساختیم که درواقع همون شیء مربوط به ربات تلگراممونه . نکته ای که هست اینه که کلاس Updater اولین ورودی که میگیره آدرس توکن ربات تلگرام هستش که باید آدرس توکن ربات خودتونو بدین . در ادامه توضیح بیشتری راجع بهش میدیم .

پس از اون یه تابع به اسم start تعریف کردیم که وقتی کاربر توی ربات دستور start/ رو برای شروع کردن ربات میزنه کد های داخلش اجرا میشه . همینطور که میبینید ما داخلش با استفاده از تابع sendMessage گفتیم یه پیام به اسم Connected به کاربر ارسال کنه . از این طریق کاربر میفهمه ربات فعاله یا نه .

بعد از این تابع ، تابع اصلی برنامه یعنی تابع run_command رو نوشتیم . طرز استفاده از ربات به این صورته که برای مثال وقتی من میخوام دستور ifconfig درون خط فرمانم اجرا بشه باید اینطوری برای ربات بنویسم :

/run ifconfig

دقیق تر بگم سینتکس استفاده از رباتمون رو اینجوری تعیین کردیم :‌

/run <command>

که به جای command دستوری که میخوایم اجرا بشه قرار میگیره .

خب وقتی کاربر از سینتکس بالا برای اجرای یک دستور استفاده میکنه ، ربات ما تابع run_command رو فراخونی میکنه و این دستور رو به عنوان یک ورودی میفرسته به تابع run_command حالا همونطور که میبینید داخل این تابع ما ابتدا اومدیم آرگومان ورودی کاربر که همون دستوره رو داخل یه متغییر به اسم command ذخیره کردیم (استفاده از for به خاطر دستور هایی بوده که بیش از یک کلمه هستند و بینشون فاصلس) .

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

 

پس از اون اومدیم با استفاده از کتابخونه ی subprocess  دستور کاربر  رو داخل خط فرمان اجرا کردیم و در خط بعد جواب دستور اجرا شده در خط فرمان که حالا میتونه ارور باشه (stderr) یا جواب کارکرد صحیح برنامه باشه (stdout) رو داخل متغییری به اسم

command_result ذخیره کردیم و به کاربر ارسال کردیم .

پس تعریف توابع مورد نیاز اومدیم هندلر های مورد نیازمون رو اجرا کردیم . همینطور که میبینید یه هندلر برای دستور start/ داخل ربات تعریف کردیم و یه هندلر هم برای دستور run/ در ربات و گفتیم برا هرکدومشون چه تابعی فراخونی بشه .

و خط آخر هم که پروسه رو استارت زدیم .

 

پس از سورس میریم سراغ ساخت ربات . برای ساخت ربات های تلگرام از بات فادر (Bot Father) در تلگرام استفاده میکنیم . آموزش ساخت ربات با بات فادر خیلی سادس اگه نمیدونین با یه سرچ ساده و پنج دقیقه خوندن توی گوگل حل میشه . نهایتا بعد از اینکه ربات رو ساختین خود بات فادر توکن رباتتون رو میده به شما و باید قرارش بدین به جای کلمه ی TOKEN در سورسمون .

 

حالا وقت اجرا کردن سورس میرسه

به دلیل فیلترینگ تلگرام ، برای اجرا کردن سورس ما نیاز به تغییر آی پی داریم که میتونیم از VPN استفاده کنیم . بسته به سیستم عاملی که دارین میتونید هر VPN که میخواین و کار میده رو نصب کنید . برای مثال روی لینوکس میتونید از تور استفاده کنید یا در ویندوز از هات اسپات و ... (با بعضی VPN ها مثل سایفون کار نمیده .)

بعد از اینکه VPN رو فعال کردیم سورس رو اجرا میکنیم . پس از اجرای سورس ما میتونیم از ربات استفاده کنیم. برای تست ارتباط ابتدا یکبار دستور start/  رو در ربات میزنیم اگر کلمه ی Connect به ما برگشت داده شد یعنی سورس ما فعاله و کار میکنه . بعد از اون میتونیم با سینتکسی که در بالا معرفی کردیم هر کدی رو که خواستیم اجرا کنیم و نتیجه رو ببینید :

 

 

 

امیدوارم لذت برده باشید...

یا حق !

Telegram Channel : @mrpythonblog

  • سلام میخواستم بدونم میشه از این کد جوری استفاده کرد که درخواست های ارسال میشه توسط واسط انجام بشه که نیازی به vpn نباشه مثلا درخواست هارو بزنه به سایت httpdebuger و این سایت درخواست ها رو بفرسته برای تلگرام و برعکس

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

    عالی بود من تازه دارم پایتون یاد میگیرم خیلی خوب بود

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