Obter o endereço MAC de um dispositivo Ethernet conectado, não rotulado, não configurado e não configurável?

Obter o endereço MAC de um dispositivo Ethernet conectado, não rotulado, não configurado e não configurável?

Suponha que você tenha alguma placa incorporada com Ethernet conectada à porta Ethernet do seu laptop. Você não sabe nada sobre a configuração da rede (ainda). Você sabe que ele inicializa, mas não tem cabeça e só possui uma porta Ethernet. Ele NÃO possui um endereço IP (ainda).

Como você descobre o endereço MAC do dispositivo?

Eu olhei para arp, arping, arp-scan, arpwatch. A única coisa que descobri foi usar o tshark e vasculhar o vômito manualmente.

Responder1

A execução simples tsharkou tcpdumpproduz resultados confusos, porque todo o tráfego originado de sua máquina também é registrado.

Tentar

tcpdump -i eth0 -lenq 'ether src not <your_mac>'
  • -ecaptura o quadro Ethernet também
  • -llibera o buffer stdout imediatamente.
  • -nnão resolva nomes de host
  • -qfique mais quieto.
  • substitua <your_mac>pelo endereço MAC da sua interface local, conforme encontrado, por exemplo ip addr show, .
  • obviamente substitua eth0pela interface correta. Se você estiver no Windows, use tshark -Dpara listar todas as interfaces.
  • (Editar)No Linux você pode usar tcpdumpem vez de instalar tsharko que requer a instalação de todo o wiresharkpacote. tcpdumpdeve estar pré-instalado no Ubuntu (está no meta-pacote ubuntu-standard).

Alternativa:Se você deseja endereços MAC de origem apenas como saída, faça (inspirado e descaradamente adaptado pelo comentário dos OPs abaixo)

ETH=eth0;MAC=$(cat /sys/class/net/$ETH/address); tcpdump -lenq -i $ETH "ether src not $MAC" | awk '{print $2}'

Melhor iniciar a captura sem link e depois conectar o cabo.

Não acho que haja uma maneira de evitar farejar o tráfego. A razão pela qual o ARP falha é que o dispositivo não possui endereço IP e não responde às solicitações ARP.

Outra solução possível seria conectar o dispositivo a um switch gerenciado e ler a tabela de endereços MAC, mas acho que essa não é uma opção para você.

Em qualquer caso, para ser detectável, o dispositivo precisa enviaralgunstipo de tráfego Ethernet. Se você tiver sorte, ele enviará uma descoberta DHCP/Bootp que você poderá detectar.

(Editar)Por que o host não mantém uma tabela MAC como um switch? Bem, não é necessário, porque não é uma opção. Ao contrário de um switch, a decisão sobre qual interface envia um quadro Ethernet é feita antecipadamente de acordo com a tabela de roteamento. O pacote IP é empacotado em um quadro apropriado após a pesquisa ARP.

Claro, você pode transformar sua máquina em um switch L2 adequado. Você pode criar uma ponte entre múltiplas interfaces físicas. Eu brinquei um pouco com isso e descobri que você pode conseguir uma bela mesa MAC dessa maneira!

  1. Instale bridge-utilsa partir do repositório.

  2. Crie uma nova ponte Ethernet em/etc/network/interfaces

     auto br0
     iface br0 inet static # dhcp goes as well
      address ...
      network ...
      bridge_ports eth0
      up /sbin/brctl setageing br0 300
      up /sbin/brctl stp br0 0
    

Isso define uma "ponte" (na verdade não há ponte - apenas uma interface) sem spanning-tree stp br0 off. Os endereços envelhecerão após 300 anos. Defina ao seu gosto, mas não muito baixo.

  1. Levante a ponte:ifup br0

  2. Verifique se está tudo certo brctl showe visualize a tabela MAC:

     brctl showmacs br0
    
  3. Lucro (?)

Responder2

Você pode usar o wireshark para capturar todo o tráfego e filtrá-lo por bootp ou usar -ea opção para imprimir informações da camada de link e filtro de bootp com tcpdump:

http://www.tcpdump.org/tcpdump_man.html

sudo tcpdump -i any port bootps -e

informação relacionada