ifconfig - quem decidiu que o endereço MAC deve estar em minúsculas?

3

Em alguns computadores Linux, ifconfig exibe os dígitos hexadecimais do endereço MAC ("HWaddr") em letras maiúsculas. Em outros computadores Linux, os dígitos [a-f] são minúsculos.

Por que a diferença? Existem duas versões concorrentes do programa? Existe uma opção em algum lugar para controlá-lo?

    
por OJW 06.02.2013 / 22:09

1 resposta

5

Existem várias razões possíveis.

Diferentes tipos de interface

Uma possibilidade: ifconfig delega a impressão do endereço de hardware para a implementação da interface. A impressão real é executada por uma função na estrutura interface da interface específica em net-tools-1.60 (de aqui ), chamado por lib/interface.c , linha 678:

printf(_("HWaddr %s  "), hw->print(ptr->hwaddr));

Consulte o código-fonte para nettools-1.60 in lib/hw.c para obter uma lista de tipos de interface suportados: Existem implementações separadas para ethernet, fibra, token ring, etc.

Agora para a função de impressão real: Exemplo: lib/ether.c :

/* Display an Ethernet address in readable format. */
static char *pr_ether(unsigned char *ptr)
{
    static char buff[64];

    snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X",
         (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
         (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
    );
    return (buff);
}

Os diferentes tipos de interfaces de rede podem ser implementados para exibir o mesmo tipo de informação de forma diferente usando x s minúsculas na string de formatação (ou seja, %02x em vez de %02X ). Por exemplo, a interface IrDA usa dígitos hexadecimais minúsculos ( lib/irda.c ):

/*
 * Function irda_print (ptr)
 *
 *    Print hardware address of interface
 *
 */
static char *irda_print(unsigned char *ptr)
{
    static char buff[8];

    sprintf(&buff[strlen(buff)], "%02x:%02x:%02x:%02x", ptr[3], ptr[2], 
        ptr[1], ptr[0]);

    return (buff);
}

Patches para ifconfig

Outra possibilidade e provavelmente a razão aqui: As distribuições geralmente alteram os pacotes de software. O trecho de código acima é do original net-tools-1.60 , vamos olhar para o Debian, ou melhor, seu patch net-tools-1.60-23.diff (de aqui ):

+--- net-tools.orig/lib/ether.c
++++ net-tools/lib/ether.c
[...]
+@@ -39,7 +39,7 @@ static char *pr_ether(unsigned char *ptr
+ {
+     static char buff[64];
+ 
+-    snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X",
++    snprintf(buff, sizeof(buff), "%02x:%02x:%02x:%02x:%02x:%02x",
+        (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
+        (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
+   );

Então o Debian fez o patch do código-fonte para ifconfig para sua distribuição, que também pode ser escolhida pelo Ubuntu ( Wikipedia : " pacotes do Ubuntu são baseados em pacotes do ramo instável do Debian ").

    
por 07.02.2013 / 09:54

Tags