No Red Hat Enterprise Linux (RHEL) 8, se alguém fizer isso ifconfig eth0 hw ether abcd12341234
,
tudo que sei é ifconfig
eip -a
,
então existe uma maneira de obter com segurança o endereço MAC real dessa interface eth0 e, em caso afirmativo, como? ... além de, por exemplo, reiniciar em um live CD do Linux vindo de uma fonte confiável para ter certeza de que o endereço MAC da interface não foi alterado.
Esta resposta é sobre Linux.
ifconfig
está obsoleto e não tem acesso a uma API do kernel capaz de fornecer essas informações.Esta informação pode ser recuperada há muito tempo com o
ethtool --show-permaddr
. Exemplo (redigido):Algumas combinações de placa/firmware/driver podem não ter um endereço permanente e o resultado pode ser assim:
Um /kernel suficientemente recente
ip link
fornecerá (possivelmente através de outra API) o endereço permanente sempre que o endereço atual for diferente de um endereço permanente existente, se estiver definido. Por exemplo (redigido):Aqui
permaddr 10:1f:74:32:10:fe
representa o endereço MAC original. É fornecido somente quando o endereço MAC atual difere do endereço MAC permanente. Tal mudança também poderia ter acontecido temporariamente, por exemplo, quando uma interface é definida como escravo do vínculo e (dependendo do seu modo) herda o endereço MAC do vínculo.Para recuperá-lo programaticamente, mesmo quando não foi alterado, é melhor usar a saída JSON e
jq
, por exemplo assim:que recupera o endereço MAC permanente ou, se não for fornecido, o endereço MAC (o que significa que é o endereço MAC permanente inalterado... a menos que não haja nenhum, caso em que é o atual).
Se isso for importante, primeiro é preciso ter certeza de que existe um endereço permanente, porque, ao contrário
ethtool
disso, não parece permitir saber que não existe um endereço permanente conhecido definido para a combinação placa/firmware/driver.Esta resposta é sobre NICs em geral.
Nada nesse endereço MAC é "irreal". Em geral, nada garante que qualquer placa de rede possua alguma ROM que contenha um endereço MAC exclusivo. Na verdade, você encontrará isso com bastante frequência, especialmente em SoCs, que todo o dispositivo é definido por software e que existe apenas o endereço MAC definido pelo software.
Então não. Em geral, não existe um endereço MAC "real", e se o seu sistema decidiu mudar o de uma interface, mesmo que fosse real antes, pelo que o seu computador pode saber, esse é o endereço MAC "real".
PS: Muitas grandes empresas de software tentaram, na década de 1990, vincular suas licenças de software (muitas vezes para software multi-k€!) a endereços NIC, com resultados hilariantes. A Xilinx fez isso até a década de 2010 e foi uma delícia para quem precisava da licença flutuante, mas só tinha licença para um único assento.
Identificar um computador através de sua interface de rede é um conceito morto, especialmente se você está tentando se defender contra alguém que tem root na máquina: o que os impediria de apenas modificar um driver de kernel para dizer o que você deseja ouvir?
Se você precisar conseguir isso, existem TPMs. Na verdade, eles são "criptograficamente seguros", pois você não pode programar seu TPM para se comportar como o TPM de outra pessoa, porque para isso você precisaria acessar a memória dentro do TPM dessa outra pessoa que é ilegível externamente. E você não pede seu ID ao TPM (novamente, isso seria falsificado por um driver de kernel), mas pede que ele prove criptograficamente que possui o segredo interno correto, descriptografando algo.
Esta resposta é específica do FreeBSD.
Os endereços MAC das NICs que foram identificados durante a inicialização mais recente são registrados em
/var/run/dmesg.boot
: