import socket import psutil import subprocess base_ip = "192.168.1.10" def descobrir_nic_para_rover() -> str | None: """ Descobre qual placa de rede (NIC) o sistema usaria para alcançar o rover. Funciona mesmo se o nome da interface mudar de PC pra PC. """ try: # Abre socket UDP só para descobrir o IP local usado na rota s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((base_ip, 80)) # porta não importa local_ip = s.getsockname()[0] s.close() except Exception as e: print("Erro ao descobrir IP local da rota:", e) return None # Agora, com o local_ip, encontrar qual NIC possui esse IP addrs = psutil.net_if_addrs() for nic_name, addr_list in addrs.items(): for addr in addr_list: if addr.family == socket.AF_INET and addr.address == local_ip: return nic_name return None def _ping_once() -> float | None: """ Retorna RTT em ms se ok, ou None se timeout. Aqui exemplo pra Windows usando 'ping -n 1'. Ajuste pro teu ambiente se precisar. """ try: # timeout de 1000 ms proc = subprocess.run( ["ping", "-n", "1", "-w", "1000", base_ip], capture_output=True, text=True ) if proc.returncode != 0: return None # Procura 'Tempo=XXms' for line in proc.stdout.splitlines(): line = line.lower() if ("tempo" in line or "time" in line) and "ms" in line: # procura algo tipo 'tempo=34ms' parts = line.replace("=", " ").replace("ms", " ").split() for p in parts: if p.isdigit(): return float(p) return None except Exception: return None ping = _ping_once() print(ping) nic = descobrir_nic_para_rover() print("NIC encontrada:", nic)