글로벌 MAC 주소 기반 UUID

글로벌 MAC 주소 기반 UUID

uuid패키지 의 명령을 사용하여 uuid-1.6.2-8.fc17.x86_64버전 1 UUID를 생성합니다 . 매뉴얼 페이지에는 기본값이 호스트의 실제 MAC 주소를 사용하는 것이라고 나와 있지만 생성된 UUID를 디코딩하면 로컬 멀티캐스트 주소가 사용됩니다. uuid v 1보여주다:

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

디코딩은 uuid -d 5fc2d464-e1f8-11e1-9c3d-ff8beec65651다음을 보여줍니다.

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)

실제 MAC 주소와 시간대( Asia/TehranUTC 아님)를 사용하려면 어떻게 해야 합니까?

답변1

실제 MAC 주소를 사용하지 않는 이유는 코드가 잘못 작성되었기 때문입니다. mac_address의 함수에는 uuid_mac.c다음과 같은 코드 블록이 있습니다.

    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;
    }

인터페이스의 MAC 주소를 찾고 eth0, 찾지 못한 경우 자동으로 무작위로 생성된 로컬 멀티캐스트 주소로 대체됩니다. 네트워크 인터페이스가 호출되거나 eth1무엇이 wlan0든지 찾을 수 없습니다.

나는 이것이 소프트웨어의 버그라고 생각합니다. 현재 기본 경로에 해당하는 하드웨어 인터페이스의 MAC 주소를 사용해야 하며, 필요한 경우 사용자가 대체 인터페이스를 지정할 수 있도록 해야 합니다. 업스트림으로 보고하는 것이 좋습니다.

시간대 관련: UUID는 시간대를 저장하지 않습니다. UUID의 시간 정보는 UTC 시간으로 저장되어 uuid -d표시됩니다. 프로그램 의 개선 사항 uuid은 디코딩 시 현지 시간대에 따라 시간을 표시하는 옵션을 제공하는 것일 수 있습니다. 그러나 어느 쪽이든 이 정보는 UUID 자체에 저장되지 않습니다.

관련 정보