Como alterar o endereço MAC de uma interface de rede

O objetivo deste texto é mostrar como alterar o endereço de hardware MAC de uma interface de rede ethernet ou WLAN através de alguns exemplos.
Há alguns casos em que esta alteração pode ser útil. Ao final do artigo, vou abordar alguns erros que podem decorrer desta operação e como resolvê-los.
Se você está interessado em alterar o endereço de um dispositivo Android, leia também este artigo.
land-trees

Em que casos devemos alterar o endereço MAC da nossa interface de rede?

Raramente é necessário fazer a alteração do endereço MAC da sua interface de conexão à rede.
Se você não sabe o que está fazendo, é recomendável não seguir em frente — o seu sistema pode ficar sem acesso à rede, o que irá dificultar a encontrar uma forma de desfazer as coisas.
Diferente dos endereços IP, não há a menor necessidade de um endereçamento de hardware refletir a topologia da rede — ou seja, qualquer que seja o endereço que você tenha aí, ele será o suficiente para fazer a conexão.
Outras soluções devem sempre ser consideradas, antes desta, caso você não esteja conseguindo se conectar.
Por outro lado, há algumas circunstâncias que requerem o uso de endereços específicos ou escolhidos aleatoriamente:

  1. Fazer uso de um serviço que tenha sido bloqueado para um determinado endereço de hardware.
  2. Participar de um esquema de balanceamento de carga ou failover que requeira o uso do mesmo endereço MAC em múltiplas interfaces.
  3. Fazer uso anônimo de uma rede em que os endereços MAC estejam sob monitoramento.

Antes de prosseguir, tenha em mente que a possibilidade de trocar o endereço de hardware MAC de uma interface de rede depende de ela ter suporte a este recurso, através de drivers — o que é o caso da maioria.

Como alterar o endereço MAC com um método não persistente

O método descrito neste tópico é não persistente, ou seja, a alteração será desfeita ao reiniciar seu sistema.
Vamos supor a configuração da interface eth0 no seu sistema para passar a usar o endereço 02:5d:6c:e8:8d:b2
No Linux (e no Android), você pode usar o comando ifconfig para verificar e alterar o seu endereço de hardware.
No caso do Android, será necessário ter um aparelho rooteado para poder usar o ifconfig. Leia mais sobre como alterar o endereço MAC no Android, para obter informações mais específicas para esta plataforma.
Para verificar o endereço MAC das suas interfaces de rede, use o ifconfig:


ifconfig

ou combine-o com o comando grep.


ifconfig | grep HW

eth0      Link encap:Ethernet  Endereço de HW b0:b7:c3:04:da:48  
wlan0     Link encap:Ethernet  Endereço de HW 04:85:08:a5:0a:aa

Note que a lista contém 2 interfaces de redes, que podem ser configuradas: ‘eth0’ e ‘wlan0’ — a primeira é a rede com fio (a cabo) e a segunda a rede sem fio (WiFi)..
O comando ifconfig pode ser invocado, também, para alterar o endereço de hardware MAC de uma interface. Escolha a que será alterada e execute o seguinte:


sudo ifconfig eth0 hw ether 02:5d:6c:e8:8d:b2

Só para lembrar, se algo der errado, você pode reiniciar o seu computador neste momento, para desfazer as alterações.
Se, ao invés de clonar ou copiar um endereço MAC já existente, você quiser criar um novo, faz bem saber que dois dos bits constantes da string do endereço de hardware têm significados especiais:

  • O bit mais insignificante, do primeiro byte, é ajustado para zero quando se tratar de endereços unicast ou um para quando se tratar de endereços multicast.
  • O segundo bit é ajustado para zero para endereços globais únicos (que tipicamente seriam atribuídos por fabricantes dispositivos conectáveis) ou um para endereços administráveis localmente.

Um endereço multicast é um identificador lógico para um grupo de hosts em uma rede de computadores.
Endereçamento multicast pode ser usado por várias camadas de links (Link Layers): Ehternet multicast, Internet layer para IPv4 ou IPv6.
A transmissão unicast é o processo de enviar mensagens a uma única rede, identificada por um único endereço.
(Wikipedia).

No caso de um endereço unicast administrado localmente estes bits deveriam ser ajustados para zero e um, respectivamente. Além disto, o primeiro byte de um endereço deveria terminar com um 2, 6, A ou E, quando expresso em notação hexadecimal.
network-switches

Como testar a configuração

Você pode verificar a sua nova configuração com o próprio comando ifconfig, em relação à interface que você alterou — ‘eth0’ ou ‘wlan0’:


ifconfig eth0
eth0      Link encap:Ethernet  Endereço de HW 02:5d:6c:e8:8d:b2  
          UP BROADCAST MULTICAST  MTU:1500  Métrica:1
          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000 
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Veja como o resultado sai na primeira linha, após o título “Endereço de HW”.

Como inspecionar o tráfego de entrada e de saída

Você pode checar se a interface recém configurada está usando o endereço MAC que deveria, gerando algum tráfego de entrada/saída através dela.
Experimente o tcpdump:


tcpdump -i eth0 -e -n "icmp and host 192.168.0.1"

O comando acima, faz o seguinte:

  • -i eth0 — especifica o nome da interface a ser testada.
  • -e — habilita a exibição de cabeçalhos link-layer.
  • -n "icmp and host 192.168.0.1" — opção para exibir o endereço “numérico” do endereço.

O filtro restringe a exibição do tráfego ICMP que tenha sido endereçada “a partir da” ou “para a” máquina local.
Agora, gere algum tráfego ICMP, usando o comando ping.


ping 192.168.0.1

Não se esqueça de adequar os valores usados nos meus exemplos à sua realidade.
Há várias outras formas de inspecionar se sua interface funciona adequadamente ou não. Se você consegue navegar na Internet ou enxergar outros dispositivos na rede, obviamente ela está.

Possíveis erros ao alterar o endereço de hardware MAC de uma interface de rede

Não vou cobrir todos os possíveis erros, mas apenas os mais comuns com os quais você pode se deparar ao fazer esta alteração.

Operation not supported

O erro : Operation not supported pode indicar que o endereço de hardware não pode ser alterado para aquela interface específica.
Isto pode ocorrer em função de a interface não ter um endereço de hardware ou porque o recurso de troca de endereço não foi implementado no driver do dispositvo, conforme já comentamos.
Uma outra possibilidade (muito comum) é que você simplesmente não tenha permissão suficiente para realizar a operação. Você precisa ter privilégios administrativos para realizar esta alteração.

Cannot assign requested address

O erro SIOCSIFHWADDR: Cannot assign requested address provavelmente indica que o endereço de hardware MAC requisitado não é um endereço unicast. Para ser qualificado como endereço unicast o primeiro byte precisa ser par.

Device or resource busy

O erro SIOCSIFHWADDR: Device or resource busy – you may need to down the interface provavelmente indica que o driver do dispositivo não permite mudanças no endereço MAC enquanto a interface estiver ativa ‘up’.
Você pode desligar a interface com o ifconfig:


sudo ifconfig eth0 down

Referências

Para obter informações específicas sobre como alterar o endereço MAC em dispositivos Android, leia o artigo: como alterar o endereço MAC no Android
Wikipedia: http://pt.wikipedia.org/wiki/Unicast
MicroHowTo: http://www.microhowto.info/howto/change_the_mac_address_of_an_ethernet_interface.html

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), desenvolvedor web e geek, nos mais diversos assuntos. Entusiasta de software livre e hacker de LEGO, acredito em repassar meu conhecimento e ajudar as pessoas sempre que for possível.

11 comentários sobre “Como alterar o endereço MAC de uma interface de rede”

  1. Olá amigo, meu Android está com endereço mac 02:00:00:00:00:00 e eu não consigo trocar de nenhuma maneira, VC pode me ajudar ?

  2. Boa noite, eu fiz todo o procedimento de ter root e tudo mais, porém na hora do terminal eu uso a configuração “su” e muda pra # como deve, mas logo em seguida quando uso o “busybox iplink show wlan0” ele me responde (tmp-mksh: busybox :not found)
    O que está acontecendo e como posso resolver isso? preciso mudar meu ip e não entendi o porque de não reconhecer o comando.
    Obrigado e boa noite.

    1. Se o busybox estiver instalado, é possível que ele (ou o diretório em que ele se encontra) não esteja inscrito na variável de ambiente PATH.
      É um comportamento normal da segurança no Android.
      Para conseguir executar o busybox, nestas condições você vai ter que indicar o caminho completo dele: /usr/bin/busybox, /bin/busybox ou /sbin/busybox. Um deles deve funcionar.

      1. Eu tenho um celular root mas mesmo assim aparece o erro : operation not suportted, como posso resolver isso?

      2. Olá poderia me ajudar?
        Quero colocar um MAC de IPhone em meu Android, segue:
        4c:b1:99:f2:c5:7a

        Na parte que você diz para colocar:
        sudo ifconfig eth0 hw ether 4c:b1:99:f2:c5:7a

        Aparece:
        tmp-mksh: sudo: not found.

        E o emulador está desta forma, tudo normal, fiz uma transcrição para cá:

        u0_a68@: / $ su
        root@: / # ifconfig I grep HW
        dummy0 Link encap:Ethernet HWaddr 4E:64:9E:A1:CC:FD
        wlan0 Link encap:Ethernet HWaddr 20:55 31:76:70:B2
        p2p0 Link en cap:Ethernet HWaddr 60: BE B5 23 F1:68
        root@: / # sudo ifconfig wlan0 hw ether 4c:b1:99:f2:c5:7a
        tmp-mksh: sudo: not found
        127 root@: / #

      3. Olá Elias, obrigado por me responder tão rapidamente!

        Olha, executei o emulador como aconselhado, retirei o “sudo” dos comandos e executei os demais.
        Deu certo! Meu MAC foi modificado, porem, ele só aparece na interface do emulador.
        Reiniciei o telefone, e ele continua aparecendo somente na interface do emulador.

        Caso eu vá verificar em “WiFi – Avançados – Endereço de Mac”, estará o MAC padrão(o MAC antes de eu configurar o emulador), do dispositivo.
        Caso eu verifique em “Configurações – Sobre – Status do Telefone”, também continua o MAC padrão.

        Estranho! Ele é descrito como alterado no emulador, mesmo depois do reboot, mas nas Configurações do aparelho, não.

        Ah! E o meu dispositivo aceita a troca de MAC, pois antes de eu das um upgrade no Android(semana passada era 5.1, agora é 6.0), eu alterei o MAC que veio de fábrica, por um novo(o que está nas configurações atualmente).

        Outro fator curioso:
        # Baixei vários aplicativos para monitoramento de rede e endereço de MAC.

        Alguns descrevem meu MAC padrão(o que eu usei para alterar antes do upgrade no Android).
        Outros, descrevem meu MAC com um MAC que veio junto dessa firmware e sistema(Android 6.0 modificado).

        Entende?
        Um aplicativo descreve meu MAC na rede como o que eu usei no Android 5.1 para alterar o de fábrica(20:55:31:76:70:b2 o alterado/novo/atual), outros descreveram meu MAC como uma MAC “enraizado” que veio no upgrade do 5.1 para o 6.0( MAC estranho por sinal, 02:00:00:00:00:00).

        Eu quero mudar o MAC definitivamente, vi em outro post seu um tutorial, mas é para computadores Linux.
        Pode me mostrar um de Android ou me informar aonde fica o arquivo para que eu possa editá-lo?
        Grato!

      4. Desculpe-me Elias, eu errei em um detalhe ai em cima.
        Depois que eu dei reboot no celular, o emulador realmente volta as Configurações normais, ou seja, o MAC que foi substituído, volta para o estado original.

        O que eu quis dizer é que, caso eu realize esses comandos no emulador, dá certo, o MAC é substituído.
        Mas ao mesmo tempo se eu for nas configurações de WIFI para ver o MAC, ele continua inalterado, só aparece a alteração no emulador.

        Mas depois de das reboot, tudo volta ao normal no emulador, MAC idêntico ao das configurações[Corrigindo].

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *