Drws cefn bach ar Fflasg neu sut i reoli cyfrifiadur ar rwydwaith lleol

Hei Habr!

Yn ddiweddar, gwyliais fersiwn wedi'i lawrlwytho o'r ffrwd raglennu “Sut i greu eich cymhwysiad gwe eich hun yn Fflasg.” A phenderfynais atgyfnerthu fy ngwybodaeth mewn rhyw brosiect. Am amser hir doeddwn i ddim yn gwybod beth i'w ysgrifennu a daeth y syniad ataf: “Beth am wneud drws cefn bach yn Fflasg?”

Ymddangosodd yr opsiynau cyntaf ar gyfer gweithrediadau a galluoedd y drws cefn yn fy mhen ar unwaith. Ond penderfynais wneud rhestr o alluoedd drws cefn ar unwaith:

  1. Gwybod sut i agor gwefannau
  2. Cael mynediad llinell orchymyn
  3. Gallu agor rhaglenni, lluniau, fideos

Felly, mae'r pwynt cyntaf yn hynod o hawdd i'w weithredu gan ddefnyddio'r modiwl porwr gwe. Penderfynais weithredu'r ail bwynt gan ddefnyddio'r modiwl OS. Ac mae'r trydydd un hefyd trwy'r modiwl OS, ond byddaf yn defnyddio “dolenni” (mwy am hynny yn nes ymlaen).

Ysgrifennu gweinydd

Felly, *drumroll* holl god y gweinydd:

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')

Rwyf wedi dympio'r holl god yn barod, mae'n bryd egluro'r hanfod.

Mae'r holl god yn rhedeg ar y cyfrifiadur lleol ar borth 5000. I ryngweithio â'r gweinydd, rhaid i ni anfon cais JSON POST.

Strwythur cais JSON:

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

Wel, mae'n gwneud synnwyr mai 'gorchymyn' yw'r gorchymyn yr ydym am ei weithredu. A 'data' yw'r dadleuon gorchymyn.

Gallwch ysgrifennu ac anfon ceisiadau JSON i ryngweithio â'r gweinydd â llaw (bydd ceisiadau yn eich helpu). Neu gallwch ysgrifennu cleient consol.

Ysgrifennu cleient

Côd:

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

Esboniadau:

Yn gyntaf oll, mae'r modiwl ceisiadau yn cael ei fewnforio (ar gyfer rhyngweithio â'r gweinydd). Isod mae disgrifiadau o'r swyddogaethau cychwyn a phrofi. Ac yna y cylch y mae'r hud yn digwydd ynddo. Ydych chi wedi darllen y cod? Felly rydych chi'n deall ystyr yr hud sy'n digwydd yn y cylch. Rhowch y gorchymyn - mae'n cael ei weithredu. Cragen - gorchmynion ar gyfer y llinell orchymyn (mae'r rhesymeg oddi ar y raddfa).

Prawf - gwiriwch a yw'r gweinydd yn rhedeg (drws cefn)
Dolen – defnyddio “llwybr byr”
Openweb – agor gwefan
Rhoi'r gorau iddi - gadael y cleient
Gosod - gosod ip eich cyfrifiadur ar y rhwydwaith lleol

A nawr mwy am ddolen.

Mae ffeil link.txt wrth ymyl y gweinydd. Mae'n cynnwys dolenni (llwybr llawn) i ffeiliau (fideos, lluniau, rhaglenni).

Mae'r strwythur fel hyn:

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

Cyfanswm

Mae gennym weinydd drws cefn ar gyfer rheoli cyfrifiadur ar rwydwaith lleol (o fewn rhwydwaith wi-fi). Yn dechnegol, gallwn redeg y cleient o unrhyw ddyfais sydd â dehonglydd python.

PS Ychwanegais y gorchymyn gosod fel, os rhoddir IP gwahanol i gyfrifiadur ar y rhwydwaith lleol, gellir ei newid yn uniongyrchol yn y cleient.

Ffynhonnell: hab.com

Ychwanegu sylw