Habari Habr!
Hivi majuzi nilitazama toleo lililopakuliwa la mtiririko wa programu "Jinsi ya kuunda programu yako ya wavuti kwenye Flask." Na niliamua kujumuisha maarifa yangu katika mradi fulani. Kwa muda mrefu sikujua cha kuandika na wazo lilinijia: "Kwa nini usifanye mlango mdogo wa nyuma kwenye Flask?"
Chaguzi za kwanza za utekelezaji na uwezo wa mlango wa nyuma mara moja zilionekana kichwani mwangu. Lakini niliamua mara moja kutengeneza orodha ya uwezo wa nyuma:
- Jua jinsi ya kufungua tovuti
- Pata ufikiaji wa mstari wa amri
- Kuwa na uwezo wa kufungua programu, picha, video
Kwa hivyo, hatua ya kwanza ni rahisi sana kutekeleza kwa kutumia moduli ya kivinjari. Niliamua kutekeleza hoja ya pili kwa kutumia moduli ya os. Na ya tatu pia ni kupitia moduli ya os, lakini nitatumia "viungo" (zaidi juu ya hilo baadaye).
Kuandika seva
Kwa hivyo, *drumroll* nambari zote za seva:
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')
Tayari nimetupa nambari zote, ni wakati wa kuelezea kiini.
Nambari zote zinaendeshwa kwenye kompyuta ya ndani kwenye bandari 5000. Ili kuingiliana na seva, lazima tutume ombi la JSON POST.
Muundo wa ombi la JSON:
{βcommandβ: βcomecommandβ, βdataβ: βsomedataβ}
Kweli, inaeleweka kuwa 'amri' ndio amri tunayotaka kutekeleza. Na 'data' ni hoja za amri.
Unaweza kuandika na kutuma maombi ya JSON ili kuingiliana na seva mwenyewe (maombi yatakusaidia). Au unaweza kuandika mteja wa console.
Kuandika mteja
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
Maelezo:
Kwanza kabisa, moduli ya maombi inaingizwa (kwa kuingiliana na seva). Hapo chini kuna maelezo ya kazi za kuanza na za majaribio. Na kisha mzunguko ambao uchawi hutokea. Je, umesoma kanuni? Kwa hivyo unaelewa maana ya uchawi unaotokea katika mzunguko. Ingiza amri - inatekelezwa. Shell - amri kwa mstari wa amri (mantiki iko mbali na kiwango).
Jaribu - angalia ikiwa seva inaendesha (nyuma ya nyuma)
Kiungo - matumizi ya "njia ya mkato"
Openweb - kufungua tovuti
Acha - toka kwa mteja
Weka - kuweka ip ya kompyuta yako kwenye mtandao wa ndani
Na sasa zaidi kuhusu kiungo.
Kuna faili ya link.txt karibu na seva. Ina viungo (njia kamili) kwa faili (video, picha, programu).
Muundo ni kama hii:
ΠΏΠΎΠ»Π½ΡΠΉ_ΠΏΡΡΡ>ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΠΏΠΎΠ»Π½ΡΠΉ_ΠΏΡΡΡ>ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
Jumla ya
Tuna seva ya nyuma ya kudhibiti kompyuta kwenye mtandao wa ndani (ndani ya mtandao wa wi-fi). Kitaalam, tunaweza kuendesha mteja kutoka kwa kifaa chochote ambacho kina mkalimani wa python.
PS Niliongeza amri iliyowekwa ili ikiwa kompyuta kwenye mtandao wa ndani imepewa IP tofauti, inaweza kubadilishwa moja kwa moja kwa mteja.
Chanzo: mapenzi.com