UUID baseado no endereço MAC global

2

Eu usei o comando uuid do pacote uuid-1.6.2-8.fc17.x86_64 para gerar UUIDs da versão 1. A man page disse que o padrão é usar o endereço MAC real do host, mas quando eu decodifiquei o UUID gerado, ele está usando o endereço multicast local. uuid v 1 mostra:

5fc2d464-e1f8-11e1-9c3d-ff8beec65651

A decodificação com uuid -d 5fc2d464-e1f8-11e1-9c3d-ff8beec65651 mostra:

encode: STR:     c7ee12de-e1f7-11e1-99f1-53d638ec6296
        SIV:     265752520555487307909286258714002350742
decode: variant: DCE 1.1, ISO/IEC 11578:1996
        version: 1 (time and node based)
        content: time:  2012-08-09 07:56:52.526563.0 UTC
                 clock: 6641 (usually random)
                 node:  53:d6:38:ec:62:96 (local multicast)

Como posso usar meu endereço MAC real e meu fuso horário ( Asia/Tehran , não UTC)?

    
por Majid Azimi 10.08.2012 / 10:05

1 resposta

5

O motivo pelo qual não está usando seu endereço MAC real é porque o código está mal escrito. A função mac_address em uuid_mac.c tem este bloco de código:

    if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
        return FALSE;
    sprintf(ifr.ifr_name, "eth0");
    if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) {
        close(s);
        return FALSE;
    }

Ele está procurando o endereço MAC da interface eth0 e, silenciosamente, retornando a um endereço multicast local gerado aleatoriamente caso não consiga encontrá-lo. Se sua interface de rede for chamada eth1 ou wlan0 ou qualquer outra coisa, ela não conseguirá encontrá-la.

Eu consideraria isso um bug no software. Ele deve usar o endereço MAC da interface de hardware correspondente à rota padrão atual e permitir que o usuário especifique uma interface alternativa, se desejado. Eu recomendaria reportar isso upstream.

Em relação ao fuso horário: o UUID não armazena o fuso horário. As informações de hora no UUID são armazenadas como hora UTC, e é assim que uuid -d a exibe. Um aprimoramento no programa uuid pode ser fornecer uma opção para exibir os horários de acordo com o fuso horário local durante a decodificação - mas de qualquer forma, essas informações não são armazenadas dentro do próprio UUID.

    
por 10.08.2012 / 18:47