Väike tagauks Flaskis või kuidas hallata arvutit kohalikes võrkudes

Tere, Habr!

Hiljuti vaatasin alla laaditud versiooni programmeerimisvoost "Kuidas luua oma veebirakendust Flaskis". Otsustasin oma teadmisi kinnistada mingis projektis. Pikka aega ei osanud ma kirjutada, kuni tuli mõte: "Miks mitte teha väike tagauks Flaskis?".

Minu peas tekkisid kohe esimesed rakenduse variandid ja tagaukse võimalused. Otsustasin aga kohe koostada tagaukse võimaluste loetelu:

  1. Saada avada veebilehti
  2. Omada juurdepääsu käsureale
  3. Saada avada programme, fotosid, videoid

Nii et esimene punkt on äärmiselt lihtne ellu viia, kasutades moodulit webbrowser. Teise punkti ellu viin ma mooduli os abil. Ja kolmas - samuti mooduli os abil, kuid kasutan "linke" (sellest räägin hiljem).

Kirjutamine serverilt

Nii et *trummipõrin* kogu serveri kood:

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 'Server töötab ja ootab käske...'
    if json_string['command'] == 'openweb':
        webbrowser.open(url='https://www.'+json_string['data'], new=0)
        return 'Veebilehe avamine ' + json_string['data'] + '...'
    if json_string['command'] == 'shell':
        os.system(json_string['data'])
        return 'Käskluse täitmine ' + 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 'Käivitamine ' + link.split('>')[1]
if __name__ == '__main__':
    app.run(host='0.0.0.0')

Olen juba kogu koodi välja ladunud, on aeg põhjus selgeks teha.

Kogu kood töötab kohaliku arvuti 5000. porti peal. Suhtlemiseks serverilt peame saatma JSON POST päringu.

JSON päringu struktuur:

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

Noh, mõistlik on, et 'command' on käsk, mida me soovime täita. Ja 'data' on käsu argumendid.

Saate käsitsi kirjutada ja saata JSON päringuid serveriga suhtlemiseks (teie abiks on requests). Võite ka kirjutada konsoliklient.

Kliendi kirjutamine

Kood:

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

Selgitused:

Esiteks imporditakse requests moodul (serveriga suhtlemiseks). Edasi on kirjeldatud funktsioonid start ja test. Ja siis toimub tsükkel, kus juhtub jõud. Kas olete koodi lugenud? Siis on teile selge, mis selles tsüklis toimub. Sisestage käsk – see täidetakse. Shell - käskude jaoks käsurealt (loogika on kõrge).

Test – kontrollib, kas server (tagakülg) töötab.
Link – 'kiiruuringu' kasutamine.
Openweb – veebilehe avamine.
Quit – kliendist väljumine.
Set – teie arvuti IP-aadressi määramine kohalikus võrgus.

Nüüd lähemalt linkist.

Serveri kõrval on fail link.txt. See sisaldab linke (täielikke teid) failidele (videod, fotod, programmid).

Struktuur on järgmine:

täielik_teekond>kirjeldus
täielik_teekond>kirjeldus

Kokkuvõte

Meil on server-tagakülg, et hallata arvutit kohalikus võrgus (wi-fi võrgus). Tehniliselt saame kliendi käivitada mis tahes seadmes, kus on python tõlgendaja.

P.S. Lisasin käskluse set, et kui kohalikule võrgule määratakse teine IP, saaks seda vahetada otse kliendist.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster