ఫ్లాస్క్‌లో చిన్న బ్యాక్‌డోర్ లేదా స్థానిక నెట్‌వర్క్‌లో కంప్యూటర్‌ను ఎలా నియంత్రించాలి

హే హబ్ర్!

"ఫ్లాస్క్‌లో మీ స్వంత వెబ్ అప్లికేషన్‌ను ఎలా సృష్టించాలి" అనే ప్రోగ్రామింగ్ స్ట్రీమ్ యొక్క డౌన్‌లోడ్ చేసిన సంస్కరణను నేను ఇటీవల చూశాను. మరియు నేను ఏదో ఒక ప్రాజెక్ట్‌లో నా జ్ఞానాన్ని ఏకీకృతం చేయాలని నిర్ణయించుకున్నాను. చాలా కాలంగా ఏమి వ్రాయాలో నాకు తెలియదు మరియు నాకు ఆలోచన వచ్చింది: "ఫ్లాస్క్‌లో మినీ-బ్యాక్‌డోర్ ఎందుకు చేయకూడదు?"

బ్యాక్‌డోర్ యొక్క అమలులు మరియు సామర్థ్యాల కోసం మొదటి ఎంపికలు వెంటనే నా తలపై కనిపించాయి. కానీ నేను వెంటనే బ్యాక్‌డోర్ సామర్థ్యాల జాబితాను రూపొందించాలని నిర్ణయించుకున్నాను:

  1. వెబ్‌సైట్‌లను ఎలా తెరవాలో తెలుసుకోండి
  2. కమాండ్ లైన్ యాక్సెస్ కలిగి ఉండండి
  3. ప్రోగ్రామ్‌లు, ఫోటోలు, వీడియోలను తెరవగలగాలి

కాబట్టి, మొదటి పాయింట్ వెబ్ బ్రౌజర్ మాడ్యూల్ ఉపయోగించి అమలు చేయడం చాలా సులభం. నేను os మాడ్యూల్ ఉపయోగించి రెండవ పాయింట్‌ను అమలు చేయాలని నిర్ణయించుకున్నాను. మరియు మూడవది కూడా os మాడ్యూల్ ద్వారా, కానీ నేను “లింక్‌లు” ఉపయోగిస్తాను (తర్వాత మరింత).

సర్వర్ రాయడం

కాబట్టి, *డ్రమ్‌రోల్* అన్ని సర్వర్ కోడ్:

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 POST అభ్యర్థనను పంపాలి.

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

వివరణలు:

అన్నింటిలో మొదటిది, అభ్యర్థనల మాడ్యూల్ దిగుమతి చేయబడింది (సర్వర్‌తో పరస్పర చర్య చేయడానికి). ప్రారంభ మరియు పరీక్ష ఫంక్షన్ల వివరణలు క్రింద ఉన్నాయి. ఆపై మాయాజాలం జరిగే చక్రం. మీరు కోడ్ చదివారా? కాబట్టి మీరు చక్రంలో జరిగే మాయాజాలం యొక్క అర్థం అర్థం చేసుకుంటారు. ఆదేశాన్ని నమోదు చేయండి - ఇది అమలు చేయబడుతుంది. షెల్ - కమాండ్ లైన్ కోసం ఆదేశాలు (లాజిక్ ఆఫ్ స్కేల్).

పరీక్ష - సర్వర్ నడుస్తోందో లేదో తనిఖీ చేయండి (బ్యాక్‌డోర్)
లింక్ - "సత్వరమార్గం" ఉపయోగం
ఓపెన్‌వెబ్ - వెబ్‌సైట్‌ను తెరవడం
నిష్క్రమించు - క్లయింట్ నుండి నిష్క్రమించు
సెట్ చేయండి - స్థానిక నెట్‌వర్క్‌లో మీ కంప్యూటర్ యొక్క ఐపిని సెట్ చేయండి

మరియు ఇప్పుడు లింక్ గురించి మరింత.

సర్వర్ పక్కన లింక్.txt ఫైల్ ఉంది. ఇది ఫైల్‌లకు (వీడియోలు, ఫోటోలు, ప్రోగ్రామ్‌లు) లింక్‌లను (పూర్తి మార్గం) కలిగి ఉంటుంది.

నిర్మాణం ఇలా ఉంటుంది:

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

ఫలితం

స్థానిక నెట్‌వర్క్‌లో (వై-ఫై నెట్‌వర్క్‌లో) కంప్యూటర్‌ను నియంత్రించడానికి మాకు బ్యాక్‌డోర్ సర్వర్ ఉంది. సాంకేతికంగా, పైథాన్ ఇంటర్‌ప్రెటర్‌ని కలిగి ఉన్న ఏదైనా పరికరం నుండి మేము క్లయింట్‌ను అమలు చేయవచ్చు.

PS I సెట్ కమాండ్‌ను జోడించింది, తద్వారా స్థానిక నెట్‌వర్క్‌లోని కంప్యూటర్ వేరే IPని కేటాయించినట్లయితే, అది నేరుగా క్లయింట్‌లో మార్చబడుతుంది.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి