فلاسک پر ایک چھوٹا سا بیک ڈور یا مقامی نیٹ ورک پر کمپیوٹر کو کیسے کنٹرول کیا جائے۔

ارے حبر!

میں نے حال ہی میں پروگرامنگ اسٹریم کا ڈاؤن لوڈ کردہ ورژن دیکھا "فلاسک میں اپنی ویب ایپلیکیشن کیسے بنائیں۔" اور میں نے اپنے علم کو کسی پروجیکٹ میں مضبوط کرنے کا فیصلہ کیا۔ کافی دیر تک مجھے نہیں معلوم تھا کہ کیا لکھوں اور مجھے خیال آیا: "کیوں نہ فلاسک میں ایک منی بیک ڈور بنایا جائے؟"

پچھلے دروازے کے نفاذ اور صلاحیتوں کے لئے پہلے اختیارات فوری طور پر میرے دماغ میں نمودار ہوئے۔ لیکن میں نے فوری طور پر بیک ڈور صلاحیتوں کی فہرست بنانے کا فیصلہ کیا:

  1. ویب سائٹس کھولنے کا طریقہ جانیں۔
  2. کمانڈ لائن تک رسائی حاصل کریں۔
  3. پروگراموں، تصاویر، ویڈیوز کو کھولنے کے قابل ہو

لہذا، پہلا نکتہ ویب براؤزر ماڈیول کا استعمال کرتے ہوئے لاگو کرنا انتہائی آسان ہے۔ میں نے os ماڈیول کا استعمال کرتے ہوئے دوسرے نکتے کو نافذ کرنے کا فیصلہ کیا۔ اور تیسرا بھی OS ماڈیول کے ذریعے ہے، لیکن میں "لنک" استعمال کروں گا (اس پر مزید بعد میں)۔

سرور لکھنا

تو، *drumroll* تمام سرور کوڈ:

from flask import Flask, request
import webbrowser
import os
import re

app = Flask(__name__)
@app.route('/mycomp', methods=['POST'])
def hell():
    json_string = request.json
    if json_string['command'] == 'test':
        return 'The server is running and waiting for commands...'
    if json_string['command'] == 'openweb':
        webbrowser.open(url='https://www.'+json_string['data'], new=0)
        return 'Site opening ' + json_string['data'] + '...'
    if json_string['command'] == 'shell':
        os.system(json_string['data'])
        return 'Command execution ' + json_string['data'] + '...'
    if json_string['command'] == 'link':
        links = open('links.txt', 'r')
        for i in range(int(json_string['data'])):
            link = links.readline()
        os.system(link.split('>')[0])
        return 'Launch ' + link.split('>')[1]
if __name__ == '__main__':
    app.run(host='0.0.0.0')

میں نے پہلے ہی تمام کوڈ کو پھینک دیا ہے، یہ جوہر کی وضاحت کرنے کا وقت ہے.

تمام کوڈ مقامی کمپیوٹر پر پورٹ 5000 پر چلتا ہے۔ سرور کے ساتھ تعامل کرنے کے لیے، ہمیں JSON POST کی درخواست بھیجنی چاہیے۔

JSON درخواست کا ڈھانچہ:

{‘command’:  ‘comecommand’, ‘data’: ‘somedata’}

ٹھیک ہے، یہ سمجھ میں آتا ہے کہ 'کمانڈ' وہ کمانڈ ہے جسے ہم عمل میں لانا چاہتے ہیں۔ اور 'ڈیٹا' کمانڈ کے دلائل ہیں۔

آپ سرور کے ساتھ دستی طور پر بات چیت کرنے کے لیے JSON درخواستیں لکھ اور بھیج سکتے ہیں (درخواستیں آپ کی مدد کریں گی)۔ یا آپ کنسول کلائنٹ لکھ سکتے ہیں۔

کلائنٹ لکھنا

کوڈ:

import requests

logo = ['nn',
        '******      ********',
        '*******     *********',
        '**    **    **     **',
        '**    **    **     **      Written on Python',
        '*******     **     **',
        '********    **     **',
        '**     **   **     **      Author: ROBOTD4',
        '**     **   **     **',
        '**     **   **     **',
        '********    *********',
        '*******     ********',
        'nn']

p = ''
iport = '192.168.1.2:5000'
host = 'http://' + iport + '/mycomp'

def test():
    dict = {'command': 'test', 'data': 0}
    r = requests.post(host, json=dict)
    if r.status_code == 200:
        print (r.content.decode('utf-8'))

def start():
    for i in logo:
        print(i)

start()
test()

while True:
    command = input('>')
    if command == '':
        continue
    a = command.split()
    if command == 'test':
        dict = {'command': 'test', 'data': 0}
        r = requests.post(host, json=dict)
        if r.status_code == 200:
            print (r.content.decode('utf-8'))
    if a[0] == 'shell':
        for i in range(1, len(a)):
            p = p + a[i] + ' '
        dict = {'command': 'shell', 'data': p}
        r = requests.post(host, json=dict)
        if r.status_code == 200:
            print (r.content.decode('utf-8'))
        p = ''
    if a[0] == 'link':
        if len(a) > 1:
            dict = {'command': 'link', 'data': int(a[1])}
            r = requests.post(host, json=dict)
            if r.status_code == 200:
                print (r.content.decode('utf-8'))
        else:
            print('Комманда не содержит аргументов!')
    if a[0] == 'openweb':
            if len(a) > 1:
                dict = {'command': 'openweb', 'data': a[1]}
                r = requests.post(host, json=dict)
                if r.status_code == 200:
                    print (r.content.decode('utf-8'))
            else:
                print('Комманда не содержит аргументов!')
    if a[0] == 'set':
        if a[1] == 'host':
            ip = a[2] + ':5000'
    if command == 'quit':
        break

وضاحتیں:

سب سے پہلے، درخواستوں کا ماڈیول درآمد کیا جاتا ہے (سرور کے ساتھ بات چیت کے لیے)۔ ذیل میں شروع اور ٹیسٹ کے افعال کی تفصیل دی گئی ہے۔ اور پھر وہ چکر جس میں جادو ہوتا ہے۔ کیا آپ نے کوڈ پڑھا ہے؟ تو آپ اس جادو کا مطلب سمجھ گئے جو چکر میں ہوتا ہے۔ کمانڈ درج کریں - اس پر عمل درآمد ہوتا ہے۔ شیل - کمانڈ لائن کے لئے کمانڈز (منطق اسکیل سے دور ہے)۔

ٹیسٹ - چیک کریں کہ آیا سرور چل رہا ہے (بیک ڈور)
لنک - ایک "شارٹ کٹ" کا استعمال
اوپن ویب - ایک ویب سائٹ کھولنا
چھوڑیں - کلائنٹ سے باہر نکلیں۔
سیٹ کریں - مقامی نیٹ ورک پر اپنے کمپیوٹر کا آئی پی سیٹ کریں۔

اور اب لنک کے بارے میں مزید۔

سرور کے ساتھ ایک link.txt فائل ہے۔ اس میں فائلوں (ویڈیوز، تصاویر، پروگراموں) کے لنکس (مکمل راستہ) شامل ہیں۔

ساخت اس طرح ہے:

полный_путь>описание
полный_путь>описание

کل

ہمارے پاس مقامی نیٹ ورک (وائی فائی نیٹ ورک کے اندر) پر کمپیوٹر کو کنٹرول کرنے کے لیے بیک ڈور سرور ہے۔ تکنیکی طور پر، ہم کلائنٹ کو کسی بھی ڈیوائس سے چلا سکتے ہیں جس میں python انٹرپریٹر ہو۔

PS میں نے سیٹ کمانڈ کو شامل کیا تاکہ اگر مقامی نیٹ ورک پر کسی کمپیوٹر کو مختلف IP تفویض کیا جائے تو اسے براہ راست کلائنٹ میں تبدیل کیا جا سکتا ہے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں