File size: 4,830 Bytes
dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 bbf11f7 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 dfd6e11 ebcff55 d414707 dfd6e11 d414707 dfd6e11 ebcff55 dfd6e11 d414707 dfd6e11 d414707 dfd6e11 bbf11f7 ebcff55 bbf11f7 ebcff55 bbf11f7 dfd6e11 ebcff55 | 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 129 130 131 132 133 134 135 136 137 138 139 140 | from flask import Flask, request, jsonify
import base64
import re
from urllib.parse import urlparse, urlunparse, parse_qs, urlencode
from concurrent.futures import ThreadPoolExecutor
app = Flask(__name__)
# Exact same IP list from your script
HARDCODED_IPS = [
"108.181.33.119",
"108.181.34.151",
"108.181.34.157",
"108.181.90.163",
"108.181.34.177",
"208.87.241.1",
"208.87.241.149",
"208.87.242.125",
"208.87.242.233",
"108.181.11.171",
"108.181.6.9",
"108.181.33.135",
"108.181.9.39",
"108.181.11.193",
"108.181.21.229",
"108.181.5.31",
"108.181.3.54",
"108.181.5.51",
"108.181.11.173"
]
# EXACT REPLICA of the swap_ip_in_url function from your script
def swap_ip_in_url(template_url, new_ip):
if not template_url or not new_ip:
return None
try:
# Split URL into base and query string (exact logic)
base_url = template_url.split('?')[0]
query_string = template_url.split('?')[1] if '?' in template_url else ""
# Extract old IP using regex (same as script)
old_ip_match = re.search(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', base_url)
if not old_ip_match:
return None
old_ip = old_ip_match.group(0)
# Replace IP in base URL
new_base_url = base_url.replace(old_ip, new_ip)
if not query_string:
return new_base_url
# Process query parameters (EXACT same logic)
new_query_string = ""
params = query_string.split('&')
for param in params:
if '=' in param:
key, value = param.split('=', 1)
if key == "r":
# URL decode the value (exact same replacements)
url_decoded_value = value
replacements = [
('%2F', '/'), ('%3D', '='), ('%3F', '?'), ('%5F', '_'),
('%20', ' '), ('%26', '&'), ('%25', '%'), ('%2B', '+')
]
for old_char, new_char in replacements:
url_decoded_value = url_decoded_value.replace(old_char, new_char)
# Make it base64 safe (exact same logic)
safe_value = url_decoded_value.replace('_', '/').replace('-', '+')
try:
# Base64 decode
decoded_r = base64.b64decode(safe_value).decode('utf-8')
if decoded_r:
# Replace IP in decoded URL
new_decoded_r = decoded_r.replace(old_ip, new_ip)
# Base64 encode (exact same logic)
new_encoded = base64.b64encode(new_decoded_r.encode('utf-8')).decode('utf-8')
# Make URL safe
new_value = new_encoded.replace('/', '_').replace('+', '-').replace('=', '')
new_query_string += f"&{key}={new_value}"
else:
new_query_string += f"&{key}={value}"
except:
new_query_string += f"&{key}={value}"
else:
new_query_string += f"&{key}={value}"
else:
new_query_string += f"&{param}"
# Remove leading '&'
new_query_string = new_query_string[1:] if new_query_string.startswith('&') else new_query_string
return f"{new_base_url}?{new_query_string}"
except Exception as e:
print(f"Error processing URL: {str(e)}")
return None
@app.route('/')
def home():
return "IP Swapper API is running. Use POST /generate with JSON payload containing 'template_url'."
@app.route('/generate', methods=['POST'])
def generate_urls():
data = request.get_json()
if not data or 'template_url' not in data:
return jsonify({"error": "template_url is required"}), 400
template_url = data['template_url'].strip()
# Generate URLs using the exact same method as your script
results = []
for ip in HARDCODED_IPS:
new_url = swap_ip_in_url(template_url, ip)
if new_url:
results.append(new_url)
return jsonify({
"generated_urls": results,
"count": len(results)
})
@app.route('/health', methods=['GET'])
def health():
return jsonify({"status": "healthy", "ip_count": len(HARDCODED_IPS)})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=True, threaded=True)
|