import requests, json, urllib3
try:
    import msgpack
except ImportError:
    print("pip3 install msgpack")
    exit()
urllib3.disable_warnings()

# Celujemy w Twój port 2137, który odpowiedział statusem 200!
URLS = [
    "http://45.134.108.204:2137/mtr/api/map/updates",
    "http://45.134.108.204:2137/mtr/api/data/vehicles"
]

def main():
    print("=== OPERACJA: INFILTRACJA PORTU 2137 ===")
    for url in URLS:
        print(f"\n[*] Skanowanie: {url}")
        try:
            # Używamy zwykłego GET, bo serwer odrzucił WebSocket i zwrócił HTTP 200
            r = requests.get(url, verify=False, timeout=5)
            print(f"[+] Status: {r.status_code}, Rozmiar: {len(r.content)} bajtów")
            
            if len(r.content) > 100:
                print("[*] Próba dekodowania MessagePack...")
                # Używamy Unpackera, bo wiemy że MTR wysyła "extra data"
                unpacker = msgpack.Unpacker(raw=False)
                unpacker.feed(r.content)
                
                for obj in unpacker:
                    if isinstance(obj, dict):
                        # Szukamy wszystkiego, co może być pociągiem
                        for key in ['vehicles', 'trains', 'v', 'data']:
                            if key in obj and obj[key]:
                                print(f"✅ BINGO NA PORCIE 2137! Klucz: {key}")
                                print(json.dumps(obj[key][0], indent=4, ensure_ascii=False))
                                return
                    elif isinstance(obj, list) and len(obj) > 0:
                        print("✅ ZNALEZIONO LISTĘ DANYCH!")
                        print(json.dumps(obj[0], indent=4, ensure_ascii=False))
                        return
                
                print("[-] Dane zdekodowane, ale brak struktury pociągów.")
                print("Podgląd:", str(msgpack.unpackb(r.content[:100], raw=False)) if len(r.content) > 0 else "Pusto")
            else:
                print(f"[-] Zbyt mała paczka danych: {r.content}")

        except Exception as e:
            print(f"[-] Błąd na {url}: {e}")

if __name__ == "__main__":
    main()
