Parece que você está tentando "mapear" uma rede, passando do conhecimento zero do que está "lá para fora" para um conhecimento completo de todos os dispositivos que podem ser alcançados de um determinado ponto.
Os comandos do Linux como ethtool
podem dizer se as interfaces estão ou não fisicamente conectadas a outra coisa. Então isso é um bom começo. É claro que, se a coisa à qual você está conectado é um roteador ou um switch, então você tem trabalho adicional a fazer.
Este é realmente um problema profundo e complexo. Não existe um protocolo universalmente reconhecido "hey, I'm here" que não seja o ping, que é frequentemente desativado por razões de segurança.
Continuando, no entanto, a próxima coisa a trabalhar é a sua máscara de sub-rede atual. Isso deve informar o intervalo de endereços IP com os quais é possível se comunicar com essa interface. A varredura de todos os endereços IP possíveis de uma sub-rede geralmente é a maneira mais confiável de fazer isso (usando uma ferramenta comonmap
para realizá-lo). É melhor que exista um protocolo para suportar esse propósito, como ping, CDP para dispositivos Cisco ou LLTD para sistemas Windows Vista / XP.
Se você estiver em uma situação em que está lidando com vários roteadores de LAN, poderá usar rotas no FIB (o comando route
ou ip route show
) para aprender sobre outras sub-redes que devem ser indiretamente alcançáveis. Você então tem intervalos adicionais de IP acessíveis para digitalizar.
No entanto, se estamos falando de toda a Internet ou de uma grande sub-rede, isso se torna impraticável. Nesse caso, uma solução viável é geralmente confiar em serviços de "descoberta" ou "encontro", como IGMP ou Bonjour. Você está então à mercê de saber apenas sobre os dispositivos que desejam ser conhecidos. Mas isso é melhor do que tentar escanear toda a Internet.