ethtool obter endereço MAC permanente retorna todos os 0's

4

Eu preciso ler o endereço MAC permanente (queimado) do adaptador de rede. Como o endereço MAC pode ser facilmente falsificado, preciso ler o que está escrito na EEPROM. Eu preciso fazer isso usando C ++ no Linux.

Eu tentei usar o ethtool que é muito bom e funciona bem. No entanto, em alguns sistemas, não funciona como desejado.

ethtool -P eth0

retorna isso:

Permanent address: 00:00:00:00:00:00

e

ethtool -e eth0

retorna isso:

Cannot get EEPROM data: Operation not supported

O adaptador de rede tem as seguintes informações:

  • driver: ucc_geth
  • versão: 1.1
  • versão do firmware: N / A
  • bus-info: QUICC ENGINE

A versão do kernel Linux é: 2.6.32.13

A pergunta é: Posso corrigir esse problema com qualquer atualização (driver, kernel etc)?

Além disso, faço as mesmas chamadas ethtool com a função ioctl em C ++. Existe alguma maneira de corrigir isso dentro do código? Ou existe alguma outra maneira de obter o endereço MAC permanente da EEPROM?

    
por Kerim Oguzcan Yenidunya 05.09.2013 / 15:13

2 respostas

6

Se você acredita que a máquina local não está sendo falsificada, ifconfig e ip addr fornecerão o endereço MAC do hardware.

Se você não confiar na máquina local, nem o ethtool, o ifconfig nem o ip fornecerão as informações necessárias. Como há razões muito legítimas para falsificação de MAC (por exemplo, hot-fail em ethercards), todos os drivers informam apenas o endereço MAC "virtual" porque, se você precisar falsificar o endereço, ele não funcionará bem com algumas das ferramentas para relatar o endereço do firmware e outros para relatar o endereço flexível. Nenhum ioctl pode ou deve dar-lhe o endereço físico.

Para obter o endereço físico, é necessário ler os registros do dispositivo diretamente e, portanto, é totalmente específico do dispositivo.

Uma rápida olhada no ucc_geth.c O driver parece mostrar que a redesignação do endereço MAC é suportada pelo próprio chip (o que faz sentido, já que ele precisa ser capaz de arrancar os pacotes enviados para o seu endereço fora do ether). Isso significa que você precisa ser muito deliberado para garantir que esteja obtendo o endereço físico para o qual o motorista diz:

/* For more details see the hardware spec.  */
    
por 05.09.2013 / 15:18
4

Se você confiar no administrador do sistema, o endereço MAC de ifconfig não será falsificado, porque, por definição, você confia no administrador do sistema para não falsificá-lo.

Se você não confiar no administrador do sistema, não terá como saber o endereço MAC da máquina. A máquina pode ser virtual. Não poderia ter interface de rede. Você não tem como saber. Mesmo se você encontrar uma chamada de sistema que supostamente faz o que você quer, o administrador do sistema pode optar por executar seu programa de tal forma que esta chamada de sistema retorne um resultado diferente.

    
por 06.09.2013 / 03:15