| # agents/tools/diagnose.py | |
| import socket | |
| import requests | |
| def get_internal_ips(): | |
| ips = set() | |
| hostname = socket.gethostname() | |
| try: | |
| ip = socket.gethostbyname(hostname) | |
| ips.add(ip) | |
| except: | |
| pass | |
| try: | |
| for info in socket.getaddrinfo(hostname, None): | |
| addr = info[4][0] | |
| if ':' not in addr: # фильтрация IPv6 для простоты | |
| ips.add(addr) | |
| except: | |
| pass | |
| return list(ips) | |
| def get_external_ip(): | |
| try: | |
| ip4 = requests.get("https://api.ipify.org").text | |
| except: | |
| ip4 = None | |
| try: | |
| ip6 = requests.get("https://api64.ipify.org").text | |
| except: | |
| ip6 = None | |
| return ip4, ip6 | |
| def check_port_open(port): | |
| sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
| sock.settimeout(1) | |
| try: | |
| result = sock.connect_ex(("0.0.0.0", port)) | |
| return result == 0 | |
| finally: | |
| sock.close() | |
| def run_diagnose(port=22555): | |
| print("🔍 Диагностика HMP-агента\n") | |
| print("📡 Внутренние IP-адреса:") | |
| for ip in get_internal_ips(): | |
| print(f" - {ip}") | |
| ip4, ip6 = get_external_ip() | |
| print("\n🌍 Внешние IP:") | |
| print(f" - IPv4: {ip4 or '❌'}") | |
| print(f" - IPv6: {ip6 or '❌'}") | |
| print(f"\n🔌 Проверка порта DHT ({port}): {'🟢 открыт' if check_port_open(port) else '🔴 закрыт'}") | |
| if __name__ == "__main__": | |
| run_diagnose() | |