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

Sillafu 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 borthladd 5000. I ryngweithio Γ’ 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

Prynu gwesteio dibynadwy ar gyfer gwefannau sydd Γ’ diogelwch DDoS, gweinyddwyr VPS VDS πŸ”₯ Prynu cynnal gwefannau dibynadwy gyda diogelwch DDoS, gweinyddion VPS VDS | ProHoster