فلاسڪ تي هڪ ننڍڙو پوئين دروازو يا مقامي نيٽ ورڪ تي ڪمپيوٽر کي ڪيئن ڪنٽرول ڪجي

اي حبر!

مون تازو ئي پروگرامنگ اسٽريم جو هڪ ڊائون لوڊ ٿيل ورزن ڏٺو آهي ”فلاسڪ ۾ پنهنجي ويب ايپليڪيشن ڪيئن ٺاهيو“. ۽ مون فيصلو ڪيو ته منهنجي ڄاڻ کي ڪجهه پروجيڪٽ ۾ مضبوط ڪيو وڃي. گهڻي وقت تائين مون کي خبر نه هئي ته ڇا لکان ۽ خيال آيو: ”ڇو نه فلاسڪ ۾ ميني پٺاڻ دروازو ٺاهيو وڃي؟

پوئين دروازي جي عملن ۽ صلاحيتن لاء پهريون اختيار فوري طور تي منهنجي سر ۾ ظاهر ٿيو. پر مون فوري طور تي پٺتي پيل صلاحيتن جي هڪ فهرست ٺاهڻ جو فيصلو ڪيو:

  1. ڄاڻو ته ويب سائيٽون ڪيئن کولجن
  2. ڪمانڊ لائن تائين رسائي حاصل ڪريو
  3. پروگرام کولڻ جي قابل ٿي، فوٽوز، وڊيوز

تنهن ڪري، پهريون نقطو ويب برائوزر ماڊل استعمال ڪندي لاڳو ڪرڻ بلڪل آسان آهي. مون او ايس ماڊل استعمال ڪندي سيڪنڊ پوائنٽ کي لاڳو ڪرڻ جو فيصلو ڪيو. ۽ ٽيون ھڪڙو پڻ او ايس ماڊل ذريعي آھي، پر مان استعمال ڪندس "لنڪس" (وڌيڪ بعد ۾).

سرور لکڻ

تنهن ڪري، * 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 پوسٽ جي درخواست موڪلڻ گهرجي.

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

وضاحتون:

سڀ کان پهريان، درخواستن جو ماڊل درآمد ڪيو ويو آهي (سرور سان رابطي لاء). هيٺ ڏنل تفصيلن جي شروعات ۽ آزمائشي افعال جا تفصيل آهن. ۽ پوءِ اهو چڪر جنهن ۾ جادو ٿئي ٿو. ڇا توهان ڪوڊ پڙهيو آهي؟ تنهنڪري توهان جادوءَ جو مطلب سمجهو ٿا جيڪو چڪر ۾ ٿئي ٿو. حڪم داخل ڪريو - اهو عمل ڪيو ويو آهي. شيل - ڪمانڊ لائن لاءِ حڪم (منطق آف اسڪيل آھي).

ٽيسٽ - چيڪ ڪريو ته سرور هلائي رهيو آهي (پٺاڻ)
لنڪ - هڪ "شارٽ کٽ" جو استعمال
Openweb - هڪ ويب سائيٽ کولڻ
ڇڏڻ - ڪلائنٽ مان نڪرڻ
سيٽ ڪريو - مقامي نيٽ ورڪ تي توهان جي ڪمپيوٽر جي آئي پي کي ترتيب ڏيو

۽ هاڻي لنڪ بابت وڌيڪ.

سرور جي اڳيان هڪ link.txt فائل آهي. ان ۾ فائلون (وڊيو، فوٽو، پروگرام) جون لنڪس (مڪمل رستو) شامل آهن.

ساخت هن طرح آهي:

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

نتيجو

اسان وٽ ڪمپيوٽر کي ڪنٽرول ڪرڻ لاءِ هڪ پسمانده سرور آهي مقامي نيٽ ورڪ تي (وائي فائي نيٽ ورڪ اندر). ٽيڪنيڪل طور تي، اسان ڪلائنٽ کي ڪنهن به ڊوائيس تان هلائي سگھون ٿا جنهن وٽ پٿون مترجم آهي.

PS مون سيٽ ڪمانڊ شامل ڪيو ته جيئن مقامي نيٽ ورڪ تي ڪمپيوٽر کي مختلف IP لڳايو ويو آهي، اهو سڌو سنئون ڪلائنٽ ۾ تبديل ٿي سگهي ٿو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو