VÀike tahavaateaken Flaskil vÔi kuidas hallata arvutit kohalikus vÔrgus

Tere, Habr!

Hiljuti vaatasin alla laaditud versiooni programmeerimise otseĂŒlekandest "Kuidas luua oma veebirakendus Flaskis". Otsustasin oma teadmisi kinnistada mĂ”nes projektis. Pikka aega ei teadnud ma, mida kirjutada, kuni tuli idee: "Aga miks mitte teha Flaskis mini-tagauks?".

MÔtetesse tulid koheselt esimesed erinevad rakendused ja vÔimalused tagaukse jaoks. Otsustasin aga kohe koostada nimekirja tagaukse vÔimetest:

  1. Oskus avada veebisaite
  2. Olla juurdepÀÀs kÀsureale
  3. Oskus avada programme, fotosid, videoid

Nii et esimest punkti on ÀÀrmiselt lihtne teostada mooduli webbrowser abil. Teise punkti otsustasin ellu viia mooduli os abil. Ja kolmandat – samuti mooduli os abil, kuid kasutan "linke" (sellest hiljem).

Kirjutamine serverile

Nii et, *trummipaus*, kogu serveri kood:

flask'i impordime Flaski, request'i
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Àsklusi...'
    if json_string['command'] == 'openweb':
        webbrowser.open(url='https://www.' + json_string['data'], new=0)
        return 'Ava sait ' + json_string['data'] + '...'
    if json_string['command'] == 'shell':
        os.system(json_string['data'])
        return 'KÀsku tÀidetakse ' + 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Ă€ivita ' + link.split('>')[1]
if __name__ == '__main__':
    app.run(host='0.0.0.0')

Ma olen juba kogu koodi vÀljakannud, aeg on seletada tuuma.

Kogu kood kÀivitatakse kohalikul arvutil sadamal 5000. Et suhelda serveriga peame saatma JSON POST-pÀringu.

JSON pÀringu struktuur:

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

Noh, on loogiline, et ‘command’ on kĂ€sk, mida soovime tĂ€ita. Ja ‘data’ on kĂ€skluse argumendid.

JSON pÀringute kirjutamine ja saatmine serveriga suhtlemiseks (aidake end requests'i abil). VÔi vÔite kirjutada konsooli kliendi.

Kliendi kirjutamine

Kood:

import requests

logo = ['nn',
        '******      ********',
        '*******     *********',
        '**    **    **     **',
        '**    **    **     **      Kirjutatud Pythonis',
        '*******     **     **',
        '********    **     **',
        '**     **   **     **      Autor: 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('KĂ€sk ei sisalda argumente!')
    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('KĂ€sk ei sisalda argumente!')
    if a[0] == 'set':
        if a[1] == 'host':
            ip = a[2] + ':5000'
    if command == 'quit':
        break

Selgitus:

Esmalt imporditakse requests moodul (serveriga suhtlemiseks). Edasi on kirjas funktsioonid start ja test. Siis on tsĂŒkkel, kus toimub imetegemine. Kas lugesite koodi? Siis on teile arusaadav tsĂŒklis toimuva ime mĂ”te. Sisestage kĂ€sk – see tĂ€idetakse. Shell – kĂ€skude esitamine kĂ€sureal (loogika tĂ”useb lakke).

Test – kontroll, kas server (tagaukse) töötab.
Link – „lĂŒhendi” kasutamine.
Openweb – veebisaiti avamine.
Quit – kliendist vĂ€ljumine.
Set – teie arvuti IP-aadressi mÀÀramine kohalikus vĂ”rgus.

NĂŒĂŒd rÀÀgime linkist lĂ€hemalt.

Serveri kÔrval asub fail link.txt. Seal on lingid (tÀielik tee) failidele (videod, fotod, programmid).

Struktuur on jÀrgmine:

tÀielik_tee>Description
tÀielik_tee>Description

KokkuvÔte

Meil on tagaukse server kohaliku vÔrgu arvuti haldamiseks (wi-fi vÔrgu sees). Tehniliselt vÔime kliendi kÀivitada mistahes seadmes, millel on pythoni tÔlgendaja.

P.S. Set kÀsk lisati selleks, et kui kohalikule vÔrgule mÀÀratakse arvutile uus IP-aadress, oleks vÔimalik see kliendis otse muuta.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster