2026. május 27., szerda

Top Secret-password-RSA

A Python egyszerű szintaxisa és kiterjedt könyvtárai révén a hackerek, kiberbiztonsági szakemberek és a nyomozók „titkos fegyvere” is egyben. Láthatatlan folyamatok automatizálására, biztonsági tesztelésre és adatgyűjtésre használják.A Python leggyakoribb titkos és rejtett műveletei:Biztonsági rések kutatása: Behatolásteszteléssel (Penetration Testing) feltérképezhetők a helyi hálózatok vagy weboldalak gyenge pontjai.Adatbányászat és Scraping: Titkos webes adatgyűjtés nyilvános, de nehezen elérhető forrásokból, például rejtett API-k vagy automatizált böngészők segítségével.Hálózati forgalom elemzése: Csomagok elfogása és dekódolása (Packet Sniffing) hálózati anomáliák vagy adatszivárgás észlelésére.Rejtett folyamatok automatizálása: Ismétlődő, monoton feladatok láthatatlan ütemezése és végrehajtása a háttérben.Ezeket a technikákat jellemzően a kiberbiztonságban (etikus hackelés) és IT-üzemeltetésben alkalmazzák. A rendszergazdák programozási tudásukat informatikai rendszerük tesztelésére is felhasználhatják.

Ezt a programot oktatási céllal hoztam létre!




------------------------

import random
import string
from itertools import product

# ========== RSA ALAPFOGALMAK ==========
def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

def mod_inverse(e, phi):
    def extended_gcd(a, b):
        if a == 0:
            return b, 0, 1
        gcd_val, x1, y1 = extended_gcd(b % a, a)
        x = y1 - (b // a) * x1
        y = x1
        return gcd_val, x, y
    
    _, x, _ = extended_gcd(e % phi, phi)
    return (x % phi + phi) % phi

def is_prime(n):
    if n < 2:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    for i in range(3, int(n**0.5) + 1, 2):
        if n % i == 0:
            return False
    return True

def generate_prime(start=10000, end=50000):
    while True:
        num = random.randint(start, end)
        if is_prime(num):
            return num

# ========== RSA KULCSPAR GENERALASA ==========
def generate_rsa_keypair():
    p = generate_prime()
    q = generate_prime()
    while q == p:
        q = generate_prime()
    
    n = p * q
    phi = (p - 1) * (q - 1)
    
    e = 65537
    while e < phi and gcd(e, phi) != 1:
        e += 1
    
    d = mod_inverse(e, phi)
    
    return (e, n), (d, n), p, q

# ========== RSA TITKOSITAS KARAKTERENKENT ==========
def rsa_encrypt_char(public_key, char):
    """RSA titkositas egy karakterre"""
    e, n = public_key
    char_int = ord(char)
    return pow(char_int, e, n)

def rsa_encrypt(public_key, plaintext):
    """RSA titkositas minden karakterre"""
    return [rsa_encrypt_char(public_key, c) for c in plaintext]

# ========== RSA DEKODOLAS KARAKTERENKENT ==========
def rsa_decrypt_char(private_key, ciphertext_char):
    """RSA dekodolas egy karakterre"""
    d, n = private_key
    decrypted_int = pow(ciphertext_char, d, n)
    return chr(decrypted_int)

def rsa_decrypt(private_key, ciphertext_list):
    """RSA dekodolas minden karakterre"""
    return ''.join(rsa_decrypt_char(private_key, c) for c in ciphertext_list)

# ========== 5 KARAKTERES JELSZO BRUTE-FORCE ==========
def brute_force_5char(encrypted_list, private_key):
    characters = string.ascii_lowercase + string.ascii_uppercase + string.digits
    d, n = private_key
    
    total_combinations = len(characters) ** 5
    print("Karakterkeszlet:", len(characters), "karakter")
    print("Osszes kombinacio:", total_combinations)
    print("Kereses kezdese...\n")
    
    # Dekodoljuk az eredeti jelszot
    true_password = rsa_decrypt(private_key, encrypted_list)
    print("Cel jelszo (dekodolva):", true_password)
    print()
    
    max_attempts = 10000
    attempts = 0
    
    for combination in product(characters, repeat=5):
        attempts += 1
        guess = ''.join(combination)
        
        if attempts % 5000 == 0:
            print("Proba:", attempts, "- Aktuális:", guess)
        
        if attempts >= max_attempts:
            print("\nMegallitas", max_attempts, "probalkozas utan")
            break
        
        if guess == true_password:
            print("\nMEGLELVE:", guess, "(", attempts, "probalkozas)")
            return guess, attempts
    
    print("\nJelszo nem talalhato az elso", min(attempts, max_attempts), "probalkozasban")
    return None, attempts

# ========== TELJES PÉDA ==========
if __name__ == "__main__":
    print("=" * 60)
    print("RSA TITKOSITAS es 5 KARAKTERES JELSZO BRUTE-FORCE")
    print("=" * 60)
    
    print("\n[1] RSA kulcspár generálasa...")
    public_key, private_key, p, q = generate_rsa_keypair()
    e, n = public_key
    d, n = private_key
    print("    Publikus kulcs (e, n):", e, ",", n)
    print("    Privát kulcs (d, n):", d, ",", n)
    print("    Prímek: p =", p, ", q =", q)
    print("    n = p * q =", p * q, "(elég nagy a 5 karaktershoz)")
    
    print("\n[2] 5 karakteres jelszó titkosítása...")
    secret_password = "ab12X"
    print("    Eredeti jelszó:", secret_password)
    
    encrypted = rsa_encrypt(public_key, secret_password)
    ---------------------
pitonimport random
import string
from itertools import product

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

def mod_inverse(e, phi):
    def extended_gcd(a, b):
        if a == 0:
            return b, 0, 1
        gcd_val, x1, y1 = extended_gcd(b % a, a)
        x = y1 - (b // a) * x1
        y = x1
        return gcd_val, x, y
    
    _, x, _ = extended_gcd(e % phi, phi)
    return (x % phi + phi) % phi

def is_prime(n):
    if n < 2:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    for i in range(3, int(n**0.5) + 1, 2):
        if n % i == 0:
            return False
    return True

def generate_prime(start=10000, end=50000):
    while True:
        num = random.randint(start, end)
        if is_prime(num):
            return num

def generate_rsa_keypair():
    p = generate_prime()
    q = generate_prime()
    while q == p:
        q = generate_prime()
    
    n = p * q
    phi = (p - 1) * (q - 1)
    
    e = 65537
    while e < phi and gcd(e, phi) != 1:
        e += 1
    
    d = mod_inverse(e, phi)
    
    return (e, n), (d, n), p, q

def rsa_encrypt_char(public_key, char):
    e, n = public_key
    m = ord(char)
    return pow(m, e, n)

def rsa_encrypt(public_key, plaintext):
    return [rsa_encrypt_char(public_key, c) for c in plaintext]

def rsa_decrypt_char(private_key, ciphertext_char):
    d, n = private_key
    decrypted_int = pow(ciphertext_char, d, n)
    return chr(decrypted_int)

def rsa_decrypt(private_key, ciphertext_list):
    return ''.join(rsa_decrypt_char(private_key, c) for c in ciphertext_list)

def brute_force_password(encrypted_list, public_key, max_attempts=100000):
    characters = string.ascii_lowercase + string.ascii_uppercase + string.digits
    
    total_combinations = len(characters) ** 5
    print("Karakterkeszlet:", len(characters), "karakter")
    print("Osszes kombinacio:", total_combinations)
    print("Keresés kezdése...\n")
    
    attempts = 0
    for combination in product(characters, repeat=5):
        attempts += 1
        guess = ''.join(combination)
        
        if attempts % 50000 == 0:
            print("Proba:", attempts, "- Aktualis:", guess)
        
        guess_encrypted = [rsa_encrypt_char(public_key, c) for c in guess]
        
        if guess_encrypted == encrypted_list:
            print("\nMEGLELVE:", guess, "(" + str(attempts) + " probalkozas)")
            return guess, attempts
        
        if attempts >= max_attempts:
            print("\nMegallitva", max_attempts, "probalkozas utan")
            break
    
    return None, attempts

if __name__ == "__main__":
    print("=" * 70)
    print("RSA JELSZO VISSZAFEJTES PROGRAM")
    print("=" * 70)
    
    print("\n[1] RSA kulcspar generalasa...")
    public_key, private_key, p, q = generate_rsa_keypair()
    e, n = public_key
    d, n = private_key
    print("    Publikus kulcs (e, n):", e, ",", n)
    print("    Privat kulcs (d, n):", d, ",", n)
    print("    Primek: p =", p, ", q =", q)
    
    print("\n[2] Jelszo titkositasa...")
    password = "ab12X"
    print("    Eredeti jelszo:", password)
    
    encrypted = rsa_encrypt(public_key, password)
    print("    Titkosított ertekek:", encrypted)
    
    print("\n[3] RSA visszafejtes (privat kulccsal)...")
    decrypted = rsa_decrypt(private_key, encrypted)
    print("    Visszafejtett jelszo:", decrypted)
    print("    Sikeres:", decrypted == password)
    
    print("\n[4] Brute-force visszafejtes (nincs privat kulcs)...")
    print("    Megjegyzes: Csak az elso 10000 probalkozast csinalom meg.\n")
    
    result, attempts = brute_force_password(encrypted, public_key, max_attempts=10000)
    
    print("\n" + "=" * 70)
    if result:
        print("SIKER: Jelszo visszafejtve:", result)
    else:
        print("INFO: Jelszo nem lett megtalalva (korlatozott probalkozas)")
    print("=" * 70)
-------------------
Packet Sniffing példa
------------------
import socket
import os
import struct

def get_protocol_name(protocol):
    protocols = {
        1: "ICMP",
        6: "TCP",
        17: "UDP",
        47: "GRE",
        50: "ESP",
        51: "AH",
        89: "OSPF",
        132: "SCTP"
    }
    return protocols.get(protocol, "ISMERETLEN")

def main():
    host = '0.0.0.0'
    
    if os.name == 'nt':
        socket_protocol = socket.IPPROTO_IP
        print("Windows rendszer felismerve")
    else:
        socket_protocol = socket.IPPROTO_ICMP
        print("Linux/Unix rendszer felismerve")
    
    sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol)
    sniffer.bind((host, 0))
    sniffer.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
    
    if os.name == 'nt':
        sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
    
    print("=" * 70)
    print("EGYSZERU PACKET SNIFFER")
    print("=" * 70)
    print("Csomagok figyelem kezdese... (Ctrl+C a leallitashoz)")
    print("=" * 70)
    
    try:
        while True:
            buffer, addr = sniffer.recvfrom(65565)
            
            ip_header = buffer[0:20]
            iph = struct.unpack('!BBHHHBBH4s4s', ip_header)
            
            version_ihl = iph[0]
            version = version_ihl >> 4
            ihl = version_ihl & 0xF
            iph_length = ihl * 4
            
            protocol = iph[6]
            s_addr = socket.inet_ntoa(iph[8])
            d_addr = socket.inet_ntoa(iph[9])
            
            protocol_name = get_protocol_name(protocol)
            
            print("\n" + "-" * 70)
            print("FORRAS IP:", s_addr)
            print("CEL IP:", d_addr)
            print("PROTOKOLL:", protocol_name, "(" + str(protocol) + ")")
            print("CSOMAP MERET:", len(buffer), "byte")
            
    except KeyboardInterrupt:
        print("\n\nPacket sniffer leallitva")
        
        if os.name == 'nt':
            sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

if __name__ == '__main__':
    main()A javítások:
•Minden ékezetes betű kivéve (pl. "VERZIÓ" → "VERZI", "KÖNYVTÁRRAL" → "KONYVTARRAL")

•Nincs semmilyen komment a kód után

•Tiszta Python kód

Másold be és futtasd!



hiba Linux/Unix rendszer felismerve
Traceback (most recent call last):
File "/home/repl912/secret.py", line 72, in <module>
main()
File "/home/repl912/secret.py", line 28, in main
sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/socket.py", line 233, in __init__
_socket.socket.__init__(self, family, type, proto, fileno)
PermissionError: [Errno 1] Operation not permitted


** Process exited - Return Code: 1 **Továbbiak megjelenítése
A hibaforrás és a hibai hozzáállás megértéseA hiba oka, hogy a RAW socket-hez root (sudo) jogosultság kell. Mivel a Pyodide/jelenvő környezetben ez nem lehetséges, itt egy alternatív Packet Sniffer, ami nem igényel RAW socketet:

pythonimport socket
import struct
import time

class PassivePacketMonitor:
    """Egyszeru passziv csomag monitor - nem kell sudo"""
    
    def __init__(self):
        self.packet_count = 0
        self.tcp_count = 0
        self.udp_count = 0
        self.icmp_count = 0
    
    def get_local_ip(self):
        """Local IP cimer kimasolasa"""
        try:
            with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
                s.connect(("8.8.8.8", 80))
                return s.getsockname()[0]
        except:
            return "127.0.0.1"
    
    def analyze_connection(self):
        """Aktiv kapcsolatok elemzese (netstat helyett)"""
        print("=" * 70)
        print("PASSZIV CSOMAG MONITOR")
        print("=" * 70)
        print("Local IP:", self.get_local_ip())
        print("Figyeld a halozati aktivast...")
        print("Ctrl+C a leallitashoz")
        print("=" * 70)
    
    def create_test_connection(self, host="8.8.8.8", port=53):
        """Teszt kapcsolodas keszitese"""
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            sock.settimeout(2)
            sock.sendto(b"test", (host, port))
            self.packet_count += 1
            sock.close()
            return True
        except:
            return False
    
    def monitor_network_activity(self):
        """Halozati aktivas monitorozasa"""
        start_time = time.time()
        
        try:
            while True:
                # Verver interval
                time.sleep(1)
                
                # Teszt csomag kuldes
                if self.create_test_connection():
                    self.udp_count += 1
                    self.packet_count += 1
                
                elapsed = time.time() - start_time
                
                print("\n[" + str(int(elapsed)) + "s] Total packets:", self.packet_count)
                print("  UDP:", self.udp_count)
                print("  TCP:", self.tcp_count)
                print("  ICMP:", self.icmp_count)
                
        except KeyboardInterrupt:
            print("\n\nMonitor leallitva")
            print("Total packets captured:", self.packet_count)

def simple_port_scanner():
    """Egyszeru port scanner (aktivan kutat)"""
    target = input("\nTarget IP cimer (pl. 192.168.1.1): ").strip()
    
    if not target:
        target = "127.0.0.1"
    
    print("=" * 70)
    print("EGYSZERU PORT SCANNER")
    print("=" * 70)
    print("Target:", target)
    print("Portok szurkese...")
    print("=" * 70)
    
    open_ports = []
    
    for port in range(1, 1025):
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(0.1)
            result = sock.connect_ex((target, port))
            
            if result == 0:
                print("Port", port, "NYITOTT")
                open_ports.append(port)
            
            sock.close()
        except:
            pass
    
    print("\n" + "=" * 70)
    print("NYITOTT PORTOK:", len(open_ports))
    if open_ports:
        print(open_ports)
    print("=" * 70)

def network_info():
    """Halozati informaciok"""
    print("=" * 70)
    print("HALOZATI INFORMACIOK")
    print("=" * 70)
    
    hostname = socket.gethostname()
    local_ip = socket.gethostbyname(hostname)
    
    print("Hostname:", hostname)
    print("Local IP:", local_ip)
    
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
            s.connect(("8.8.8.8", 80))
            gateway_ip = s.getsockname()[0]
            print("Gateway IP:", gateway_ip)
    except:
        pass
    
    print("=" * 70)

def main():
    print("=" * 70)
    print("HALOZATI ES PACKET MONITOR ESZKOCZ")
    print("=" * 70)
    print("\nMenu:")
    print("1. Passziv csomag monitor (nem kell sudo)")
    print("2. Port scanner")
    print("3. Halozati informaciok")
    print("4. Kilepas")
    
    choice = input("\nVazlas (1-4): ").strip()
    
    if choice == "1":
        monitor = PassivePacketMonitor()
        monitor.analyze_connection()
        monitor.monitor_network_activity()
    
    elif choice == "2":
        simple_port_scanner()
    
    elif choice == "3":
        network_info()
    
    elif choice == "4":
        print("Kilepas...")
    
    else:
        print("Hibas valasztas!")

if __name__ == '__main__':
    main()
------------------------------
import socket
import os
import struct

def get_protocol_name(protocol):
    protocols = {
        1: "ICMP",
        6: "TCP",
        17: "UDP",
        47: "GRE",
        50: "ESP",
        51: "AH",
        89: "OSPF",
        132: "SCTP"
    }
    return protocols.get(protocol, "ISMERETLEN")

def main():
    host = '0.0.0.0'
    
    if os.name == 'nt':
        socket_protocol = socket.IPPROTO_IP
        print("Windows rendszer felismerve")
    else:
        socket_protocol = socket.IPPROTO_ICMP
        print("Linux/Unix rendszer felismerve")
    
    sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol)
    sniffer.bind((host, 0))
    sniffer.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
    
    if os.name == 'nt':
        sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
    
    print("=" * 70)
    print("EGYSZERU PACKET SNIFFER")
    print("=" * 70)
    print("Csomagok figyelem kezdese... (Ctrl+C a leallitashoz)")
    print("=" * 70)
    
    try:
        while True:
            buffer, addr = sniffer.recvfrom(65565)
            
            ip_header = buffer[0:20]
            iph = struct.unpack('!BBHHHBBH4s4s', ip_header)
            
            version_ihl = iph[0]
            version = version_ihl >> 4
            ihl = version_ihl & 0xF
            iph_length = ihl * 4
            
            protocol = iph[6]
            s_addr = socket.inet_ntoa(iph[8])
            d_addr = socket.inet_ntoa(iph[9])
            
            protocol_name = get_protocol_name(protocol)
            
            print("\n" + "-" * 70)
            print("FORRAS IP:", s_addr)
            print("CEL IP:", d_addr)
            print("PROTOKOLL:", protocol_name, "(" + str(protocol) + ")")
            print("CSOMAP MERET:", len(buffer), "byte")
            
    except KeyboardInterrupt:
        print("\n\nPacket sniffer leallitva")
        
        if os.name == 'nt':
            sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

if __name__ == '__main__':
    main()
------------------------------
import socket
import os
import struct

def main():
    # Host cím (Linuxon üres string = minden interface)
    host = '0.0.0.0'
    
    if os.name == 'nt':
        socket_protocol = socket.IPPROTO_IP
        print("Windows rendszer felismerve")
    else:
        socket_protocol = socket.IPPROTO_ICMP
        print("Linux/Unix rendszer felismerve")
    
    # RAW socket létrehozása
    sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol)
    sniffer.bind((host, 0))
    
    # IP fejléc beolvasása
    sniffer.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
    
    if os.name == 'nt':
        sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
    
    print("=" * 70)
    print("EGYSZERU PACKET SNIFFER")
    print("=" * 70)
    print("Csomagok catchesése kezdese... (Ctrl+C a leallitashoz)")
    print("=" * 70)
    
    try:
        while True:
            # Csomag fogadása (max 65565 byte)
            buffer, addr = sniffer.recvfrom(65565)
            
            # IP fejléc dekódolása (első 20 byte)
            ip_header = buffer[0:20]
            iph = struct.unpack('!BBHHHBBH4s4s', ip_header)
            
            version_ihl = iph[0]
            version = version_ihl >> 4
            ihl = version_ihl & 0xF
            iph_length = ihl * 4
            
            protocol = iph[6]
            s_addr = socket.inet_ntoa(iph[8])
            d_addr = socket.inet_ntoa(iph[9])
            
            # Protokoll neve
            protocol_name = get_protocol_name(protocol)
            
            print("\n" + "-" * 70)
            print("FORRAS IP:", s_addr)
            print("CÉL IP:", d_addr)
            print("PROTOKOLL:", protocol_name, "(" + str(protocol) + ")")
            print("CSOMAG HELY:", len(buffer), "byte")
            
    except KeyboardInterrupt:
        print("\n\nPacket sniffer leallitva")
        
        if os.name == 'nt':
            sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

def get_protocol_name(protocol):
    """Protokoll szám neve"""
    protocols = {
        1: "ICMP",
        6: "TCP",
        17: "UDP",
        47: "GRE",
        50: "ESP",
        51: "AH",
        89: "OSPF",
        132: "SCTP"
    }
    return protocols.get(protocol, "ISMERETLEN")

if __name__ == '__main__':
    main()2. VERZIÓ: Fejlett Packet Sniffer (scapy könyvtárral, TÖBB PROTOKOLL)
először telepíteni kell a scapy-t:
bashpip install scapyA fejlett Packet Sniffer kód:
pitonfrom scapy.all import *
import socket
import datetime

def get_local_ip():
    """Local IP cím kimasolasa"""
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        s.connect(("8.8.8.8", 80))
        return s.getsockname()[0]

def packet_callback(pkt):
    """Minden csomag feldolgozasa"""
    
    # Timestamp
    timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    # TCP csomagok
    if pkt.haslayer(TCP) and pkt.haslayer(IP):
        direction = "IN" if pkt[IP].dst == local_ip else "OUT"
        print("[%s] TCP-%s | SRC: %s:%d -> DST: %s:%d | LEN: %d bytes" % (
            timestamp, direction,
            pkt[IP].src, pkt.sport,
            pkt[IP].dst, pkt.dport,
            len(pkt[TCP])
        ))
    
    # UDP csomagok
    elif pkt.haslayer(UDP) and pkt.haslayer(IP):
        direction = "IN" if pkt[IP].dst == local_ip else "OUT"
        print("[%s] UDP-%s | SRC: %s:%d -> DST: %s:%d | LEN: %d bytes" % (
            timestamp, direction,
            pkt[IP].src, pkt.sport,
            pkt[IP].dst, pkt.dport,
            len(pkt[UDP])
        ))
    
    # ICMP csomagok (ping)
    elif pkt.haslayer(ICMP) and pkt.haslayer(IP):
        direction = "IN" if pkt[IP].dst == local_ip else "OUT"
        print("[%s] ICMP-%s | SRC: %s -> DST: %s | TYPE: %d" % (
            timestamp, direction,
            pkt[IP].src, pkt[IP].dst,
            pkt[ICMP].type
        ))

def main():
    local_ip = get_local_ip()
    
    print("=" * 80)
    print("FEJLETT PACKET SNIFFER (SCAPY)")
    print("=" * 80)
    print("Local IP cimer:", local_ip)
    print("Hallgat protokollok: TCP, UDP, ICMP")
    print("Csomagok catchesése kezdese... (Ctrl+C a leallitashoz)")
    print("=" * 80)
    
    try:
        # Csomagok hallgatas
        sniff(prn=packet_callback, store=0)
    except KeyboardInterrupt:
        print("\n\nPacket sniffer leallitva")

if __name__ == '__main__':
    main()Futtatás:
bash# 1. verzió (nincs telepítés):
sudo python packet_sniffer_simple.py

# 2. verzió (scapy):
sudo pip install scapy
sudo python packet_sniffer_scapy.py
------------------------------------
Tanulásra és nem büncselekményre készültek a mintaprogramok! A Python programok írása már megkívánja a megfelelő strukturáltságot és a szoftvertervezési alapelvek betartását. A fenntarthatóság, az olvashatóság és a skálázhatóság érdekében a következő bevált gyakorlatokat érdemes alkalmazni. Éremes logikai egységekre, különálló .py fájlokba (pl. adatbázis kezelő, felhasználói felület, üzleti és logika), amelyeket aztán importálsz. Objektumorientált programozás (OOP): Használj osztályokat és objektumokat az adatok és a rajtuk végzett műveletek egységbe zárásához. A csomagcsomagolás révén a nagyobb projekteket rendezd package-ekbe (könyvtárakba), amelyek tartalmaznak egy __init__.py fájlt is az áttekinthetőség érdekében. Virtuális környezetek: Az env vagy venv segítségével izolálhatod a projekt függőségeit, így elkerülheted a verzióütközéseket a különböző rendszerek között.Dependency Management: A pip mellett használj pipenv-et vagy poetry-t a csomagok és verziók stabil kezelésére.Verziókezelés: Minden komplex projekt alapja a Git használata, a kód tárolására pedig a GitHub vagy a GitLab a legideálisabb.Tesztelés: Elengedhetetlen a hibák korai kiszűrésére. A beépített unittest vagy a pytest használatával automatizálhatod a kód tesztelését.Dokumentáció: A kód karbantarthatóságát nagyban segíti, ha a függvényeket és osztályokat elláthatod docstringekkel, vagy használhatod a Sphinx generátort. MVC (Model-View-Controller) minta: Különítheted el az adatokat (Model), a megjelenítést (View) és a felhasználói interakciókat (Controller), ami különösen hasznos asztali vagy webes alkalmazásoknál.Aszinkron programozás: Az asyncio könyvtár használatával hatékonyan kezelheted a párhuzamos feladatokat, például I/O műveleteket vagy webes lekérdezéseket a blokkoló várakozások elkerülésére. 

Rendezésre példa 

lista = [5, 3, 9, 1, 7]

for i in range(len(lista)-1):
    for j in range(i+1, len(lista)):
        print(i, j, lista, end='')
        if lista[i] > lista [j]:
            lista[i], lista[j] = lista[j], lista[i]
            print('!', lista[i], lista[j])
            print('   ', lista)
        else:
            print('')
---------------------------

import matplotlib.pyplot as plt
import numpy as np

# Generate data
x = np.linspace(110, 10, 900)
y1 = np.sin(x) * np.exp(-0.1 * x)
y2 = np.cos(x) * np.exp(-0.1 * x)

# Create figure
fig, ax = plt.subplots(figsize=(8, 5))

ax.plot(x, y1, color='#2563eb', linewidth=2, label='Damped Sine')
ax.plot(x, y2, color='#f59e0b', linewidth=2, label='Damped Cosine')
ax.fill_between(x, y1, y2, alpha=0.1, color='#8b5cf6')

ax.set_title('Damped Oscillations', fontsize=16, fontweight='bold', pad=12)
ax.set_xlabel('Time (s)', fontsize=12)
ax.set_ylabel('Amplitude', fontsize=12)
ax.legend(fontsize=11, loc='upper right')
ax.grid(True, alpha=0.3)
ax.set_facecolor('#fafafa')
fig.tight_layout()

plt.show()

Ez a kód egy Python program, amely matplotlib és numpy könyvtárakat használ egy grafikon létrehozására.

Mit csinál lépésenként:

- numpy segítségével létrehoz egy 900 pontból álló x értéksorozatot 110-től 10-ig.
- Kiszámol két függvényt: egy csillapított szinusz hullámot (y1) és egy csillapított koszinusz hullámot (y2). Ezek mindkettő az x értékek függvényében csökkenő amplitúdójú hullámok.
- matplotlib segítségével készít egy ábrát és egy koordináta-rendszert.
- Megjeleníti a két hullámot különböző színekkel vonalakkal.
- Kitölti az y1 és y2 közötti területet áttetsző színnel.
- Beállítja a címét, az x és y tengely feliratait.
- Megjeleníti a jelmagyarázatot (legendát), bekapcsolja a rácsvonalat, és beállítja az ábra alapszínét.
- Végül megjeleníti az ábrát.
Ez egy szép példája csillapított rezgések vizualizációjának. 
---------------------
h = (tf - t0) / N:
 Kiszámítja a lépésközt az intervallum hossza és a kívánt lépésszám alapján.np.zeros(N + 1): 
Létrehoz egy üres listát (tömböt), ahová lépésről lépésre elmentjük a kiszámított $S$ értékeket.A for ciklus: Ez végzi a "lényegi" munkát. 
Minden lépésben veszi az aktuális $S[j]$ értéket, kiszámítja hozzá a meredekséget a megadott $F$ függvénnyel, megszorozza a $h$ lépésközzel, és ebből kapja meg a következő $S[j+1]$ értéket.Tipp: 
Ha futtatod a kódot, érdemes játszani az N (lépésszám) értékével.
 Ha az N-et megnöveled (például 100-ra), a lépésköz ($h$) kisebb lesz, és az Euler-módszer kék szaggatott vonala szinte tökéletesen rá fog simulni a fekete elméleti görbére!

import matplotlib.pyplot as plt
import numpy as np


def euler_method(F, t0, tf, S0, N):
    """Az Euler-módszer implementációja elsőrendű ODE megoldására.

    Paraméterek:
    F  : függvény - F(t, S) ami a deriváltat (dS/dt) adja vissza
    t0 : float    - kezdeti időpont
    tf : float    - végidőpont
    S0 : float    - kezdeti állapot (S(t0) értéke)
    N  : int      - a lépések száma
    """
    # Lépésköz (h) kiszámítása
    h = (tf - t0) / N

    # Időrács és az állapotok tömbjének előkészítése
    t = np.linspace(t0, tf, N + 1)
    S = np.zeros(N + 1)

    # Kezdeti feltétel beállítása
    S[0] = S0

    # Iteráció az Euler-képlet alapján
    for j in range(N):
        S[j + 1] = S[j] + h * F(t[j], S[j])

    return t, S


# --- TESZTELÉS ÉS VIZUALIZÁCIÓ ---

if __name__ == "__main__":
    # Teszteljük a módszert egy ismert differenciálegyenleten:
    # dS/dt = cos(t), aminek az analitikus megoldása S(t) = sin(t) + C
    # Legyen a kezdeti feltétel S(0) = 0, ekkor S(t) = sin(t)

    def F(t, S):
        return np.cos(t)

    # Paraméterek beállítása
    t0 = 0
    tf = 2 * np.pi  # Egy teljes periódus (0-tól ~6.28-ig)
    S0 = 0  # S(0) = 0
    N = 20  # Lépésszám (próbáld ki 10-zel vagy 100-zal is!)

    # Futtatás
    t_num, S_num = euler_method(F, t0, tf, S0, N)

    # Elméleti (pontos) megoldás a viszonyításhoz
    t_exact = np.linspace(t0, tf, 200)
    S_exact = np.sin(t_exact)

    # Grafikus ábrázolás
    plt.figure(figsize=(10, 6))
    plt.plot(
        t_exact, S_exact, label="Pontos (analitikus) megoldás", color="black"
    )
    plt.plot(
        t_num,
        S_num,
        "bo--",
        label=f"Euler-módszer közelítése (N = {N})",
        alpha=0.7,
    )

    plt.title("Az Euler-módszer működése vs. Pontos megoldás")
    plt.xlabel("t (idő)")
    plt.ylabel("S(t) (állapot)")
    plt.grid(True)
    plt.legend()
    plt.show()



Jelszó generátor készítése, itt egy egyszerű és biztonságos, kifejezetten 38 karakteres jelszót generáló Python program. A beépített secrets modult használja, ami kriptográfiailag biztonságos véletlenszerűséget garantál (így sokkal védettebb jelszavakat generál, mint a sima random!

import secrets
import string


def jelszo_generator(hossz=38):
    # Karakterkészlet: kisbetűk, nagybetűk, számok és írásjelek
    karakterek = string.ascii_letters + string.digits + string.punctuation

    # Biztonságos generálás a megadott hosszúságban
    jelszo = "".join(secrets.choice(karakterek) for _ in range(hossz))

    return jelszo


# Jelszó létrehozása és kiíratása
uj_jelszo = jelszo_generator()
print(f"A generált 38 karakteres jelszó:\n{uj_jelszo}")
print(f"\nHossz ellenőrzése: {len(uj_jelszo)} karakter.")
-------------------------
import numpy as np

# 1. A differenciálegyenlet definíciója: df(t)/dt = F(t, f) = e^(-t)
# Mivel a derivált most nem függ közvetlenül f-től, az f paramétert nem használjuk a képletben.
def F(t, f):
    return np.exp(-t)

# A pontos (analitikus) megoldás a hiba ellenőrzéséhez
def pontos_megoldas(t):
    return -np.exp(-t)

# 2. Paraméterek beállítása a feladat alapján
t0 = 0.0          # Kezdeti időpont
tf = 1.0          # Végpont
h = 0.1           # Lépésköz
f0 = -1.0         # Kezdeti állapotérték: f(0) = -1

# Numerikus rács (időlépések) létrehozása: [0.0, 0.1, 0.2, ..., 1.0]
# A tf + h/2 trükk biztosítja, hogy a lebegőpontos kerekítés miatt a tf is belekerüljön
t = np.arange(t0, tf + h/2, h)
N = len(t) - 1    # Lépések száma

# 3. Tömb előkészítése az S (itt f_num) állapotok tárolására
f_num = np.zeros(len(t))
f_num[0] = f0     # Bolt S0 = S(t0) a tömbben

# 4. Iteratív integrálás az Euler-formula alapján
for j in range(N):
    # Kiszámítás és tárolás a tömbben lépésről lépésre:
    # S(t_{j+1}) = S(t_j) + h * F(t_j, S(t_j))
    f_num[j + 1] = f_num[j] + h * F(t[j], f_num[j])

# --- EREDMÉNYEK MEGJELENÍTÉSE ---

print(f"{'t_j':<6} | {'Euler közelítés':<16} | {'Pontos érték':<14} | {'Abszolút hiba':<14}")
print("-" * 60)

for j in range(len(t)):
    pontos = pontos_megoldas(t[j])
    hiba = abs(f_num[j] - pontos)
    print(f"{t[j]:.1f}   | {f_num[j]:.6f}         | {pontos:.6f}     | {hiba:.6f}")
--------------------
Eredmény;
t_j    | Euler közelités  | Pontos érték   | Abszolut hiba 
------------------------------------------------------------
0.0   | -1.000000         | -1.000000     | 0.000000
0.1   | -0.900000         | -0.904837     | 0.004837
0.2   | -0.809516         | -0.818731     | 0.009214
0.3   | -0.727643         | -0.740818     | 0.013175
0.4   | -0.653561         | -0.670320     | 0.016759
0.5   | -0.586529         | -0.606531     | 0.020001
0.6   | -0.525876         | -0.548812     | 0.022935
0.7   | -0.470995         | -0.496585     | 0.025590
0.8   | -0.421337         | -0.449329     | 0.027992
0.9   | -0.376404         | -0.406570     | 0.030166
1.0   | -0.335747         | -0.367879     | 0.032133


** Process exited - Return Code: 0 **
-------------------------
Magyarázat;
Tegyük fel, hogy adott egy függvény.F(t,S(t))
amely kiszámítjadS(t)dt
, egy numerikus rács,t
, az intervallumból,[t0,tf]
, és egy kezdeti állapotértékS0=S(t0)
Ki tudjuk számolniS(tj)
mindenérttj
bant
a következő lépések segítségével.

BoltS0=S(t0)
egy tömbben,S
SzámításS(t1)=S0+hF(t0,S0)
BoltS1=S(t1)
banS
SzámításS(t2)=S1+hF(t1,S1)
BoltS2=S(t1)
banS
számításS(tf)=Sf−1+hF(tf−1,Sf−1)
.BoltSf=S(tf)
banS
a kezdetiérték-probléma megoldásának egy közelítése. Amikor egy ilyen struktúrájú metódust használunk, azt mondjuk, hogy a metódus integrálja az ODE megoldását.
A differenciálegyenletdf(t)dt=e−t
kezdeti feltétellelf0=−1
rendelkezik a pontos megoldássalf(t)=−e−t
Közelítse a kezdetiérték-feladat megoldását 0 és 1 között 0,1-es lépésekben az explicit Euler-formula segítségével. 

Röviditett változat;

import numpy as np

t = np.arange(0, 1.1, 0.1)
f = [-1.0]

# Euler-módszer generálása egy tömör ciklusban
for tj in t[:-1]:
    f.append(f[-1] + 0.1 * np.exp(-tj))

# Fejléc és adatok kiíratása
print("t_j | Euler    | Pontos   | Hiba")
for tj, fj in zip(t, f):
    p = -np.exp(-tj)
    print(f"{tj:.1f} | {fj:.6f} | {p:.6f} | {abs(fj-p):.6f}")
----------------------------

Skandi metrikus modellezés grafikus formában



import numpy as np
import matplotlib.pyplot as plt
from collections import Counter
from scipy import stats
import math
import random
import os

class SkandinavLottoElemzo:
    def __init__(self, huzasok_adat):
        """
        Initializes the analyzer with provided draw data
        

        Args:
            huzasok_adat: List of lists containing the draw numbers
        """
        self.huzasok = huzasok_adat
        self.huzasok_szama = len(huzasok_adat)
        self.szamok_darabja_huzasnak = len(huzasok_adat[0])
        self.osszes_szam_hatar = 35  # Skandináv lottó: 35-ből
        
        # Összes szám kinyerése
        self.osszes_szamok = []
        for huzas in huzasok_adat:
            self.osszes_szamok.extend(huzas)
        
        self.osszes_szamok_darab = len(self.osszes_szamok)
        
    def szam_gyakorisag(self):
        """Calculates frequency of each number"""
        gyakorisag = Counter(self.osszes_szamok)
        # Teljes lista 1-35-ig
        teljes_gyakorisag = {i: gyakorisag.get(i, 0) for i in range(1, self.osszes_szam_hatar + 1)}
        return teljes_gyakorisag
    
    def leggyakrabban_huzott(self, darab=10):
        """Returns most frequently drawn numbers"""
        gyakorisag = self.szam_gyakorisag()
        rendezett = sorted(gyakorisag.items(), key=lambda x: x[1], reverse=True)
        return rendezett[:darab]
    
    def legritkabban_huzott(self, darab=10):
        """Returns least frequently drawn numbers"""
        gyakorisag = self.szam_gyakorisag()
        rendezett = sorted(gyakorisag.items(), key=lambda x: x[1])
        return rendezett[:darab]
    
    def statisztikai_mutatok(self):
        """Calculates statistical measures"""
        gyakorisag = self.szam_gyakorisag()
        values = list(gyakorisag.values())
        
        # Filter out zeros (numbers never drawn)
        values_nonzero = [v for v in values if v > 0]
        

        return {
            'átlag': np.mean(values_nonzero),
            'szórás': np.std(values_nonzero),
            'minimum': np.min(values_nonzero),
            'maximum': np.max(values_nonzero),
            'medián': np.median(values_nonzero),
            'szóródási együttható': np.std(values_nonzero) / np.mean(values_nonzero) if np.mean(values_nonzero) > 0 else 0,
            'darab': len(values_nonzero)
        }
    
    def parity_arany(self):
        """Calculates even/odd ratio"""
        paros = 0
        paratlan = 0
        
        for szam in self.osszes_szamok:
            if szam % 2 == 0:
                paros += 1
            else:
                paratlan += 1
        
        osszes = paros + paratlan
        return {
            'paros': paros,
            'paratlan': paratlan,
            'paros_szazalek': paros / osszes * 100,
            'paratlan_szazalek': paratlan / osszes * 100
        }
    
    def osszeg_eloszlas(self):
        """Analyzes distribution of sum totals"""
        osszegek = [sum(huzas) for huzas in self.huzasok]
        
        return {
            'összegek': osszegek,
            'átlag': np.mean(osszegek),
            'szórás': np.std(összegek),
            'minimum': np.min(osszegek),
            'maximum': np.max(osszegek),
            'medián': np.median(osszegek)
        }
    
    def normal_eloszlas_teszt(self):
        """Tests if data follows normal distribution"""
        gyakorisag = self.szam_gyakorisag()
        values = [v for v in gyakorisag.values() if v > 0]
        
        if len(values) < 3:
            return {'lehetetest': False, 'hiba': 'Túl kevés adat'}
        
        try:
            # Shapiro-Wilk test
            shapiro_stat, shapiro_p = stats.shapiro(values)
            
            # Kolmogorov-Smirnov test
            ks_stat, ks_p = stats.kstest(values, 'norm', 
                                        args=(np.mean(values), np.std(values)))
            
            return {
                'shapiro_stat': shapiro_stat,
                'shapiro_p_érték': shapiro_p,
                'ks_stat': ks_stat,
                'ks_p_érték': ks_p,
                'normalis_eloszlas': shapiro_p > 0.05
            }
        except Exception as e:
            return {'lehetetest': False, 'hiba': str(e)}
    
    def szimulalj_huzast(self, darab=5, szam_random=True):
        """Simulates new draws"""
        if szam_random:
            random.seed()
            np.random.seed()
        else:
            random.seed(42)
            np.random.seed(42)
        
        eredmenyek = []
        for _ in range(darab):
            huzas = sorted(random.sample(range(1, self.osszes_szam_hatar + 1), 
                                        self.szamok_darabja_huzasnak))
            eredmenyek.append(huzas)
        
        return eredmenyek
    
    def szamitott_eselyek(self):
        """Calculates mathematical probabilities"""
        # Combination: C(n, k)
        osszes_kombinacio = math.comb(self.osszes_szam_hatar, self.szamok_darabja_huzasnak)
        
        return {
            'összes_kombinacio': osszes_kombinacio,
            'telitalalat_esely': f"1:{osszes_kombinacio:,}",
            'valozhezetesseg': 1/osszes_kombinacio * 100,
            'varhato_ertek': (1 + self.osszes_szam_hatar) / 2 * self.szamok_darabja_huzasnak
        }
    
    def korelas_matrix(self):
        """Calculates correlation between numbers (appearing together)"""
        gyakorisag = self.szam_gyakorisag()
        
        # Numbers that appeared at least once
        aktiv_szamok = [szam for szam, gyak in gyakorisag.items() if gyak > 0]
        
        # Create co-occurrence matrix
        korrelacio = {}
        for szam1 in aktiv_szamok:
            korrelacio[szam1] = {}
            for szam2 in aktiv_szamok:
                if szam1 != szam2:
                    # Count how often they appear together
                    egyutt = sum(1 for huzas in self.huzasok 
                                if szam1 in huzas and szam2 in huzas)
                    korrelacio[szam1][szam2] = egyutt
        
        return korrelacio
    
    def grafikon_gyakorisag(self, elment=True):
        """Creates frequency bar chart"""
        gyakorisag = self.szam_gyakorisag()
        
        szamok = list(range(1, self.osszes_szam_hatar + 1))
        values = [gyakorisag[szam] for szam in szamok]
        
        plt.figure(figsize=(35, 7))
        plt.bar(szamok, values, color='steelblue', alpha=0.7, edgecolor='black')
        
        plt.title(f'Skandináv Lottó - Számok Gyakorisága\n({self.huzasok_szama} húzás, {self.szamok_darabja_huzasnak} szám/húzás)', 
                 fontsize=14, fontweight='bold')
        plt.xlabel('Szám', fontsize=12)
        plt.ylabel('Hányszor húzták', fontsize=12)
        plt.xticks(range(1, self.osszes_szam_hatar + 1))
        plt.grid(axis='y', alpha=0.9)
        
        átlag = np.mean([v for v in values if v > 0])
        plt.axhline(y=átlag, color='red', 


Svájci részvényelemzés

A svájci frankban (CHF) jegyzett vagy a svájci részvénypiacon elérhető részvények (mint a Nestlé, Novartis vagy a Roche) globális szinten a legbiztonságosabbak közé tartoznak, árfolyamuk a stabil gazdasági környezet és a nemzeti valuta miatt védelmet nyújt a piaci turbulenciák ellen.A legfontosabb svájci részvények és piacokA svájci tőzsde (SIX Swiss Exchange) legjelentősebb vállalatai az SMI (Swiss Market Index) részét képezik, amely a 20 legnagyobb és leglikvidabb svájci "blue chip" vállalatot tömöríti. A főbb szektorok és a legismertebb cégek:Egészségügy és Gyógyszeripar: Novartis, Roche, Lonza Group.Élelmiszeripar: Nestlé.Pénzügyi szektor: UBS Group, Zurich Insurance.Ipar és Technológia: ABB, Holcim, Geberit.Hogyan érhetők el a CHF részvények?A svájci részvények közvetlenül vagy befektetési alapokon/ETF-eken keresztül vásárolhatók meg. A program a Sharpe-szám alapján javasol, ami a legelfogadottabb mutató a kockázatos befektetések összehasonlítására – figyelembe veszi mind a hozamot, mind a kockázatot .http://slpython.blogspot.com/2016/09/10-modulok-csomagok.html  https://www.agt.bme.hu/gis/python/python3_oktato.pdf

Mit csinál a program:

Funkció Leírás

Adatlekérdezés Letölti az elmúlt 1 év napi záróárfolyamát a 3 részvényről
📈 Hozamszámítás Számolja a teljes hozamot, átlagos napi hozamot
📉 Volatilitás Mértéke a kockázatot (árfolyamingadozást)
📊 Sharpe-szám Kockázat-kihozatali arány (minél magasabb, annál jobb)
🏆 Javaslat A legmagasabb Sharpe-számú részvényt ajánlja
📊 Grafikon Létrehoz vizualizációt a teljesítményről
----------------
pip install yfinance pandas numpy matplotlib
--------------
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
# Define the tickers for the companies (US markets)
tickers = {
"Nestlé": "NSRGY", # Nestlé OTC
"Novartis": "NVS", # Novartis NYSE
"Roche": "RHHBY" # Roche OTC
}
# Get data for the past year
end_date = datetime.now()
start_date = end_date - timedelta(days=365)
print("=== Letöltöm a részvényadatokat az elmúlt évből... ===\n")
# Download historical data
data = {}
for name, ticker in tickers.items():
try:
df = yf.download(ticker, start=start_date, end=end_date, progress=False)
if not df.empty:
# Handle multi-level columns if present
if isinstance(df.columns, pd.MultiIndex):
df = df[('Close', '')]
data[name] = df
print(f"✓ {name} ({ticker}) adatok letöltve")
else:
print(f"✗ Nincs adat {name} számára ({ticker})")
except Exception as e:
print(f"✗ Hiba {name} lekérésekor: {e}")
if not data:
print("\nNincs elérhető részvényadat. Nem folytatható az elemzés.")
else:
# Create a combined DataFrame
df_combined = pd.DataFrame(data)
# Calculate daily returns
daily_returns = df_combined.pct_change().dropna()
# Calculate key metrics
metrics = pd.DataFrame({
'Átlagos Napi hozam (%)': (daily_returns.mean() * 252 * 100).round(2), # Annualized
'Volatilitás (%)': (daily_returns.std() * np.sqrt(252) * 100).round(2), # Annualized volatility
'Teljes Hozam (%)': ((df_combined.iloc[-1] / df_combined.iloc[0]) - 1) * 100,
'Maximális Visszahúzás (%)': pd.DataFrame({
name: ((df_combined[name] - df_combined[name].cummax()) / df_combined[name].cummax() * 100).min()
for name in df_combined.columns
})['Maximális Visszahúzás (%)'].round(2)
})
# Calculate Sharpe Ratio (assuming risk-free rate of 4% annually)
risk_free_rate = 0.04
metrics['Sharpe-Szám'] = (metrics['Átlagos Napi hozam (%)'] / 100 - risk_free_rate) / (metrics['Volatilitás (%)'] / 100)
metrics['Sharpe-Szám'] = metrics['Sharpe-Szám'].round(2)
# Make a recommendation based on Sharpe Ratio
best_sharpe_ticker = metrics['Sharpe-Szám'].idxmax()
best_sharpe_value = metrics.loc[best_sharpe_ticker, 'Sharpe-Szám']
# Print results
print("\n" + "="*70)

print("=== RÉSZVÉNYHOZAM ÖSSZEHASONLÍTÁS (Elmúlt 1 év) ===")
print("="*70)
print(metrics.to_string())
print("\n" + "="*70)
print("AJÁNLÁS:")
print("="*70)
print(f"🏆 {best_sharpe_ticker} érdemesebb megvenni!")
print(f" Indoklás: Legmagasabb Sharpe-szám ({best_sharpe_value}), ami a legjobb")
print(f" kockázat-kihozatali arányt jelenti az elmúlt évben.")
print("\n📊 Részletes magyarázat:")
print(f" • {best_sharpe_ticker} hozama: {metrics.loc[best_sharpe_ticker, 'Teljes Hozam (%)']:.2f}%")
print(f" • Volatilitása: {metrics.loc[best_sharpe_ticker, 'Volatilitás (%)']:.2f}%")
print(f" • Maximális veszteség: {metrics.loc[best_sharpe_ticker, 'Maximális Visszahúzás (%)']:.2f}%")
# Create visualization
plt.style.use('seaborn-v0_8')
fig, axes = plt.subplots(2, 1, figsize=(14, 10))
# Plot 1: Normalized price performance
normalized_prices = (df_combined / df_combined.iloc[0]) * 100
for name in normalized_prices.columns:
axes[0].plot(normalized_prices.index, normalized_prices[name],
label=name, linewidth=2.5, alpha=0.8)
axes[0].set_title('Részvényárak teljesítménye (Normálva, kezdőérték: 100)', fontsize=14, fontweight='bold')
axes[0].set_xlabel('Dátum', fontsize=12)
axes[0].set_ylabel('Normált ár', fontsize=12)
axes[0].legend(loc='best', fontsize=10)
axes[0].grid(True, alpha=0.3)
axes[0].axhline(y=100, color='gray', linestyle='--', alpha=0.5)
# Plot 2: Metrics comparison
metrics_to_plot = metrics[['Teljes Hozam (%)', 'Volatilitás (%)']].T
metrics_to_plot.columns = tickers.keys()
x = np.arange(len(metrics_to_plot.index))
width = 0.35
for i, (name, ticker) in enumerate(tickers.items()):
axes[1].bar(x + i*width, [metrics.loc[name, 'Teljes Hozam (%)')],
width, label=f"{name} Hozam", alpha=0.8)
axes[1].set_title('Összehasonlítás: Hozam vs Volatilitás', fontsize=14, fontweight='bold')
axes[1].set_xlabel('Részvény', fontsize=12)
axes[1].set_ylabel('Százalék (%)', fontsize=12)
axes[1].set_xticks(x + width)
axes[1].set_xticklabels(metrics_to_plot.index, rotation=45)
axes[1].legend(loc='best', fontsize=9)
axes[1].grid(True, alpha=0.3, axis='y')
plt.tight_layout()
plt.savefig('output/részvény_összehasonlítás.png', dpi=150, bbox_inches='tight')
plt.close()
print("\n✅ Az elemzés és grafikon mentve: 'output/részvény_összehasonlítás.png'")
---------------


Python modulok;

Tőzsdei elemzés

Írtam neked egy programot, ami elemzi a tőzsdei részvények árfolyam-ingadozását és javaslatot tesz a vásárlásra! Sok szerencsét!
--------------

import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings('ignore')

def analyze_stock(symbol, days=60):
    """
    Egyetlen részvény elemzése
    """
    print(f"\n{'='*60}")
    print(f"Elemzés: {symbol}")
    print(f"{'='*60}")
    
    try:
        # Adatok letöltése
        stock = yf.Ticker(symbol)
        df = stock.history(period=f"{days}d")
        
        if len(df) == 0:
            print(f"? Nincs adat {symbol} számára")
            return None
        
        # Alapvető mutatók
        current_price = df['Close'].iloc[-1]
        prev_close = df['Close'].iloc[-2]
        change = ((current_price - prev_close) / prev_close) * 100
        
        # Mozgóátlagok
        ma_5 = df['Close'].rolling(window=5).mean().iloc[-1]
        ma_20 = df['Close'].rolling(window=20).mean().iloc[-1]
        ma_50 = df['Close'].rolling(window=50).mean().iloc[-1] if len(df) >= 50 else ma_20
        ma_200 = df['Close'].rolling(window=200).mean().iloc[-1] if len(df) >= 200 else ma_50
        
        # RSI (Relative Strength Index)
        delta = df['Close'].diff()
        gain = delta.where(delta > 0, 0).rolling(window=14).mean().iloc[-1]
        loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean().iloc[-1]
        rs = gain / loss if loss != 0 else 0
        rsi = 100 - (100 / (1 + rs))
        
        # Volatilitás
        volatility = df['Close'].pct_change().std() * np.sqrt(252) * 100
        
        # Volume
        volume = df['Volume'].iloc[-1]
        avg_volume = df['Volume'].rolling(window=20).mean().iloc[-1]
        volume_ratio = volume / avg_volume if avg_volume > 0 else 1
        
        # Pontszám számítása
        score = 0
        reasons_buy = []
        reasons_sell = []
        
        # Ár változás
        if change > 2:
            score += 15
            reasons_buy.append(f"Pozitív árfolyam-változás: +{change:.2f}%")
        elif change < -2:
            score -= 10
            reasons_sell.append(f"Negatív árfolyam-változás: {change:.2f}%")
        else:
            score += 5
        
        # RSI értékelés
        if rsi < 30:
            score += 25
            reasons_buy.append(f"Túladott (RSI: {rsi:.1f}) - olcsó")
        elif rsi > 70:
            score -= 20
            reasons_sell.append(f"Túlvetett (RSI: {rsi:.1f}) - drága")
        else:
            score += 10
            reasons_buy.append(f"RSI normál tartományban: {rsi:.1f}")
        
        # Mozgóátlagok
        if current_price > ma_5:
            score += 10
            reasons_buy.append("Ár > 5 napos MA (rövid távú emelkedés)")
        else:
            score -= 5
            reasons_sell.append("Ár < 5 napos MA")
        
        if current_price > ma_20:
            score += 15
            reasons_buy.append("Ár > 20 napos MA (közép távú emelkedés)")
        else:
            score -= 10
            reasons_sell.append("Ár < 20 napos MA")
        
        if current_price > ma_50:
            score += 15
            reasons_buy.append("Ár > 50 napos MA (hosszú távú emelkedés)")
        else:
            score -= 10
            reasons_sell.append("Ár < 50 napos MA")
        
        # Volume
        if volume_ratio > 1.5:
            score += 10
            reasons_buy.append(f"Növekedett volume ({volume_ratio:.1f}x az átlag)")
        
        # Volatilitás
        if volatility < 20:
            score += 10
            reasons_buy.append(f"Alacsony volatilitás: {volatility:.1f}%")
        elif volatility > 35:
            score -= 5
            reasons_sell.append(f"Magas volatilitás: {volatility:.1f}%")
        
        return {
            'symbol': symbol,
            'price': current_price,
            'change': change,
            'ma_5': ma_5,
            'ma_20': ma_20,
            'ma_50': ma_50,
            'rsi': rsi,
            'volatility': volatility,
            'volume_ratio': volume_ratio,
            'score': score,
            'reasons_buy': reasons_buy,
            'reasons_sell': reasons_sell
        }
    
    except Exception as e:
        print(f"Hiba {symbol} elemzésekor: {e}")
        return None


def analyze_portfolio(stocks, days=60):
    """
    Több részvény elemzése és összehasonlítása
    """
    print("=" * 60)
    print("TŐZSDEI RÉSZVÉNY ELEMZŐ PROGRAM")
    print("=" * 60)
    print(f"Dátum: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
    print(f"Elemzett részvények: {', '.join(stocks)}")
    
    results = []
    
    for symbol in stocks:
        result = analyze_stock(symbol, days)
        if result:
            results.append(result)
    
    # Rangsorolás
    results.sort(key=lambda x: x['score'], reverse=True)
    
    return results


def print_recommendations(results):
    """
    Ajánlások kiírása
    """
    print("\n" + "=" * 60)
    print("?? ELEMZÉSI EREDMÉNYEK")
    print("=" * 60)
    
    for i, r in enumerate(results, 1):
        print(f"\n{i}. {r['symbol']} - ${r['price']:.2f} ({r['change']:+.2f}%)")
        print(f"   RSI: {r['rsi']:.1f} | Volatilitás: {r['volatility']:.1f}%")
        print(f"   Pontszám: {r['score']}/100")
        
        if r['reasons_buy']:
            print("   ?? VÁSÁRLÁS ÉRVEI:")
            for reason in r['reasons_buy'][:3]:
                print(f"      ? {reason}")
        
        if r['reasons_sell']:
            print("   ? ELADÁS ÉRVEI:")
            for reason in r['reasons_sell'][:2]:
                print(f"      ? {reason}")
    
    print("\n" + "=" * 60)
    print("?? AJÁNLÁS")
    print("=" * 60)
    
    if not results:
        print("? Nincs elemzésre alkalmas adat")
        return
    
    best = results[0]
    
    if best['score'] >= 50:
        recommendation = "VÁSÁRLÁS"
        emoji = "??"
    elif best['score'] >= 20:
        recommendation = "FIGYELMES VÁRAKOZÁS"
        emoji = "??"
    else:
        recommendation = "ELKERÜLÉS"
        emoji = "??"
    
    print(f"\n{emoji} JAVASOLT RÉSZVÉNY: {best['symbol']}")
    print(f"   Ár: ${best['price']:.2f}")
    print(f"   Pontszám: {best['score']}/100")
    print(f"   Döntés: {recommendation}")
    
    print(f"\n   MIÉRT ÉRDEMES {recommendation.lower()}?")
    for reason in best['reasons_buy']:
        print(f"      ? {reason}")
    
    if best['reasons_sell']:
        print(f"\n   KOCKÁZATOK:")
        for reason in best['reasons_sell']:
            print(f"      ??  {reason}")


def main():
    """
    Fő program
    """
    # Példa részvények (változtathatod)
    # Amerikai részvények: AAPL, GOOGL, MSFT, TSLA, NVDA, AMZN, META, NFLX
    # Magyar részvények: MOLBN, OPUSBN, RICHBVN (BÉT)
    stocks_to_analyze = ['AAPL', 'GOOGL', 'MSFT', 'TSLA', 'NVDA']
    
    # Elemzés
    results = analyze_portfolio(stocks_to_analyze, days=60)
    
    # Ajánlások
    print_recommendations(results)
    
    print("\n" + "=" * 60)
    print("??  FONTOS FIGYELMEZTETÉS")
    print("=" * 60)
    
if __name__ == "__main__":
    # Telepítés szükséges: pip install yfinance pandas numpy
    main()
---------------------