huijio commited on
Commit
bbf11f7
·
verified ·
1 Parent(s): 7d3f3c0

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +96 -0
app.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, jsonify
2
+ import base64
3
+ from urllib.parse import urlparse, urlunparse, parse_qs, urlencode
4
+ from concurrent.futures import ThreadPoolExecutor
5
+
6
+ app = Flask(__name__)
7
+
8
+ # Hardcoded list of 19 IP addresses
9
+ HARDCODED_IPS = [
10
+ "108.181.33.119",
11
+ "108.181.34.151",
12
+ "108.181.34.157",
13
+ "108.181.90.163",
14
+ "108.181.34.177",
15
+ "208.87.241.1",
16
+ "208.87.241.149",
17
+ "208.87.242.125",
18
+ "208.87.242.233",
19
+ "108.181.11.171",
20
+ "108.181.6.9",
21
+ "108.181.33.135",
22
+ "108.181.9.39",
23
+ "108.181.11.193",
24
+ "108.181.21.229",
25
+ "108.181.5.31",
26
+ "108.181.3.54",
27
+ "108.181.5.51",
28
+ "108.181.11.173"
29
+ ]
30
+
31
+ def base64_url_decode(s):
32
+ s = s.replace('_', '/').replace('-', '+')
33
+ pad = len(s) % 4
34
+ if pad:
35
+ s += '=' * (4 - pad)
36
+ return base64.b64decode(s).decode('utf-8')
37
+
38
+ def base64_url_encode(s):
39
+ return base64.b64encode(s.encode('utf-8')).decode('utf-8').replace('/', '_').replace('+', '-').rstrip('=')
40
+
41
+ def replace_ip_in_url(original_url, new_ip):
42
+ try:
43
+ parsed = urlparse(original_url)
44
+ netloc = new_ip + (':' + str(parsed.port) if parsed.port else '')
45
+
46
+ query_params = parse_qs(parsed.query, keep_blank_values=True)
47
+
48
+ if 'r' in query_params:
49
+ r_value = query_params['r'][0]
50
+ try:
51
+ decoded_r = base64_url_decode(r_value)
52
+ parsed_r = urlparse(decoded_r)
53
+ netloc_r = new_ip + (':' + str(parsed_r.port) if parsed_r.port else '')
54
+ modified_r_url = urlunparse((
55
+ parsed_r.scheme,
56
+ netloc_r,
57
+ parsed_r.path,
58
+ parsed_r.params,
59
+ parsed_r.query,
60
+ parsed_r.fragment
61
+ ))
62
+ new_r_value = base64_url_encode(mod_r_r)
63
+ query_params['r'] = [new_r_value]
64
+ except Exception:
65
+ pass
66
+
67
+ new_query = urlencode(query_params, doseq=True)
68
+
69
+ return urlunparse((
70
+ parsed.scheme,
71
+ netloc,
72
+ parsed.path,
73
+ parsed.params,
74
+ new_query,
75
+ parsed.fragment
76
+ ))
77
+
78
+ except Exception as e:
79
+ return f"Error: {str(e)}"
80
+
81
+ @app.route('/generate', methods=['POST'])
82
+ def generate_urls():
83
+ data = request.get_json()
84
+
85
+ if not data or 'template_url' not in data:
86
+ return jsonify({"error": "template_url is required"}), 400
87
+
88
+ template_url = data['template_url']
89
+
90
+ with ThreadPoolExecutor() as executor:
91
+ results = list(executor.map(lambda ip: replace_ip_in_url(template_url, ip), HARDCODED_IPS))
92
+
93
+ return jsonify({"generated_urls": results})
94
+
95
+ if __name__ == '__main__':
96
+ app.run(host='0.0.0.0', port=7860, threaded=True)