# 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() | |