Como encontrar o endereço MAC ou IP de um dispositivo conectado à mesma ponte Ethernet?

1

Eu tenho a seguinte topologia:

DeviceX ------
              |
 DeviceX bridge with two Ethernet cards 
      (created with bridge-utils) ---------------- router 
              |                                      |
              |                                      |
DeviceY ------                                       |
                                                     |
                                     other devices on the same network 
                                       (switches, PCs, WiFi devices)

Eu tenho controle total sobre o DeviceX - ele é um PC Linux e ele tem dois adaptadores Ethernet, que são ligados com o Linux bridge-utils para fornecer acesso à LAN para DeviceX e DeviceY.

O DeviceY também é um PC Linux, mas não tenho controle sobre ele. Eu sei apenas que ele está usando o endereço IP do DHCP recebido do roteador através da minha ponte no DeviceX. O DeviceY pode ser substituído por outro dispositivo físico a qualquer momento, portanto não posso simplesmente olhar para o seu endereço MAC uma vez e mantê-lo - preciso determinar o endereço MAC toda vez que o DeviceX é inicializado ou quando ele detecta uma de suas duas conexões Ethernet foi reiniciado (cabo desconectado e conectado novamente, etc.).

Sempre é garantido que somente esses dois dispositivos serão conectados à bridge no DeviceX e a mais ninguém.

Pode haver muitos outros dispositivos conectados ao roteador, mas preciso apenas do endereço do DeviceY, que está sempre conectado diretamente a uma das duas portas Ethernet.

Pode não ser um bom negócio se eu também obtiver o endereço do próprio roteador - ele será conhecido de antemão e eu posso filtrá-lo, contanto que eu tenha endereços de apenas dois dispositivos - o roteador e o DeviceY.

Agora a pergunta: do DeviceX, como encontrar de forma confiável o endereço MAC ou IP do DeviceY?

Mais informações: Eu uso bridge-utils no DeviceX porque o DeviceY deve estar na mesma LAN que todos os outros dispositivos na LAN. O roteamento personalizado do DeviceX para o DeviceY não é uma opção porque criaria uma nova sub-rede e exigiria NAT e o que não faria o DeviceY funcionar como esperado. Bridge-utils é a solução mais simples.

    
por JustAMartin 05.02.2015 / 09:34

2 respostas

1

Uma bridge ou switch é um dispositivo que liga dois segmentos de um domínio de broadcast e segrega o tráfego unicast.

Para fazer isso, a bridge mantém uma tabela de encaminhamento que registra qual porta atinge um determinado endereço Mac. Essa tabela é preenchida sempre que um novo pacote com um novo endereço de origem de ethernet é recebido, e endereços MAC que não são vistos há algum tempo são removidos.

Quando uma bridge / switch recebe um quadro destinado a um determinado endereço MAC, se esse endereço MAC estiver em sua tabela de encaminhamento, ele será enviado somente na porta correspondente, caso contrário, para todas as portas.

A implementação do Linux não é diferente.

A tabela de encaminhamento pode ser consultada com o

 brctl showmacs <bridge-name>

E está disponível em /sys/class/net/<bridge-name>/brforward (binário).

Você pode obter um mapeamento entre o número da porta e o nome da interface com:

 grep . /sys/class/net/vmbr0/brif/*/port_no

Ou, se em um sistema com uma versão recente de iproute2 o novo conjunto de utilitários de rede para Linux, você pode obter a tabela de encaminhamento com nomes de interface com:

 bridge fdb show br <bridge-name>

Ou para saber todos os endereços MAC acessíveis através de uma determinada interface ou ponte, por exemplo eth0 :

 bridge fdb show br <bridge-name> brport <interface-name>
    
por 08.02.2015 / 21:46
0

O comando arp mostrará todos os iPs e seus MACs, já que você tem apenas dois computadores em sua rede e o roteador será fácil identificar o que não é seu IP nem o roteador, e tem um IP de sua rede.

    
por 05.02.2015 / 09:47