-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.py
128 lines (102 loc) · 3.14 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import re
import json
import requests
import os
import time
import socket
secret_key = "secreturl"
server_port = 8080
mode = "ipv4" #ipv4 or ipv6
from http.server import BaseHTTPRequestHandler, HTTPServer
class HTTPServerV6(HTTPServer):
if mode == "ipv6":
address_family = socket.AF_INET6
class S(BaseHTTPRequestHandler):
def _set_response(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
self._set_response()
request_path = str(self.path)
m = re.search('\/([^\/]+)\/([^\/]+)\/', request_path)
if m:
find_secret = m.group(1)
find_modem_ip = m.group(2)
if find_secret != secret_key:
self.wfile.write("Wrong secret key".encode('utf-8'))
return
if reboot_modem(find_modem_ip):
self.wfile.write(("Modem " + find_modem_ip + " has been rebooted").encode('utf-8'))
else:
self.wfile.write("Modem reboot error".encode('utf-8'))
else:
self.wfile.write("Wrong request".encode('utf-8'))
def run(server_class=HTTPServerV6, handler_class=S, port=server_port):
server = ""
if mode == "ipv6":
server = "::"
server_address = (server, port)
httpd = server_class(server_address, handler_class)
print('Starting httpd...\n')
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
print('Stopping httpd...\n')
def send_request_to_modem(modem_ip, val):
try:
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0",
'Accept': "*/*",
'Accept-Language': "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
'Connection': "keep-alive",
'X-Requested-With': "XMLHttpRequest",
}
session = requests.Session()
compose_url = 'http://' + modem_ip + '/api/webserver/token'
response = session.get(compose_url,
headers=headers,
allow_redirects=False,
timeout=10)
response_code = response.status_code
html = response.text
m = re.search('<token>([^<]+)<', html)
token = m.group(1)
xml_data = '<?xml version: "1.0" encoding="UTF-8"?><request><dataswitch>' + str(val) + '</dataswitch></request>'
headers = {
'__RequestVerificationToken': token,
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0",
'Accept': "*/*",
'Accept-Language': "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
'Connection': "keep-alive",
'Content-Type': "application/x-www-form-urlencoded; charset=UTF-8",
'X-Requested-With': "XMLHttpRequest",
}
session = requests.Session()
compose_url = 'http://' + modem_ip + '/api/dialup/mobile-dataswitch'
response = session.post(compose_url,
headers=headers,
data=xml_data,
allow_redirects=False,
timeout=10)
response_code = response.status_code
html = response.text
m = re.search('<response>([^<]+)<', html)
res = m.group(1)
if res == 'OK':
return True
return False
except:
return False
def reboot_modem(modem_ip):
result_off = send_request_to_modem(modem_ip, 0)
# time.sleep(0.1)
result_on = send_request_to_modem(modem_ip, 1)
if result_off and result_on:
return True
else:
return False
run()
#c:\Python38\python c:\modem\server.py