फ्लास्क पर एक छोटा पिछला दरवाजा या स्थानीय नेटवर्क पर कंप्यूटर को कैसे नियंत्रित किया जाए

हे हबर!

मैंने हाल ही में प्रोग्रामिंग स्ट्रीम का एक डाउनलोड किया हुआ संस्करण देखा "फ्लास्क में अपना खुद का वेब एप्लिकेशन कैसे बनाएं।" और मैंने किसी परियोजना में अपने ज्ञान को समेकित करने का निर्णय लिया। काफी समय तक मुझे नहीं पता था कि क्या लिखूं और मेरे मन में यह विचार आया: "क्यों न फ्लास्क में एक मिनी-बैकडोर बनाया जाए?"

पिछले दरवाजे के कार्यान्वयन और क्षमताओं के लिए पहला विकल्प तुरंत मेरे दिमाग में आया। लेकिन मैंने तुरंत पिछले दरवाजे की क्षमताओं की एक सूची बनाने का फैसला किया:

  1. जानिए वेबसाइट कैसे खोलें
  2. कमांड लाइन पहुंच हो
  3. प्रोग्राम, फ़ोटो, वीडियो खोलने में सक्षम हों

इसलिए, पहला बिंदु वेबब्रोसर मॉड्यूल का उपयोग करके लागू करना बेहद आसान है। मैंने ओएस मॉड्यूल का उपयोग करके दूसरे बिंदु को लागू करने का निर्णय लिया। और तीसरा भी ओएस मॉड्यूल के माध्यम से है, लेकिन मैं "लिंक" का उपयोग करूंगा (उस पर बाद में और अधिक)।

एक सर्वर लिखना

तो, *ड्रमरोल* सभी सर्वर कोड:

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

स्पष्टीकरण:

सबसे पहले, अनुरोध मॉड्यूल आयात किया जाता है (सर्वर के साथ बातचीत के लिए)। नीचे प्रारंभ और परीक्षण कार्यों का विवरण दिया गया है। और फिर वह चक्र जिसमें जादू घटित होता है। क्या आपने कोड पढ़ा है? तो चक्र में जो जादू होता है उसका अर्थ भी तुम समझ गये हो। आदेश दर्ज करें - इसे निष्पादित किया जाता है। शेल - कमांड लाइन के लिए कमांड (तर्क ऑफ स्केल है)।

परीक्षण - जांचें कि क्या सर्वर चल रहा है (पिछले दरवाजे से)
लिंक - "शॉर्टकट" का उपयोग
ओपनवेब - एक वेबसाइट खोलना
छोड़ें - ग्राहक से बाहर निकलें
सेट - अपने कंप्यूटर का आईपी स्थानीय नेटवर्क पर सेट करना

और अब लिंक के बारे में और अधिक जानकारी।

सर्वर के बगल में एक link.txt फ़ाइल है। इसमें फ़ाइलों (वीडियो, फ़ोटो, प्रोग्राम) के लिंक (पूर्ण पथ) शामिल हैं।

संरचना इस प्रकार है:

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

संपूर्ण

हमारे पास स्थानीय नेटवर्क (वाई-फाई नेटवर्क के भीतर) पर कंप्यूटर को नियंत्रित करने के लिए एक बैकडोर सर्वर है। तकनीकी रूप से, हम क्लाइंट को किसी भी डिवाइस से चला सकते हैं जिसमें पायथन इंटरप्रेटर है।

PS मैंने सेट कमांड जोड़ा ताकि यदि स्थानीय नेटवर्क पर किसी कंप्यूटर को एक अलग आईपी सौंपा गया हो, तो इसे सीधे क्लाइंट में बदला जा सके।

स्रोत: www.habr.com

एक टिप्पणी जोड़ें