Mac-Address

基於全域 MAC 地址的 UUID

  • August 10, 2012

我使用包中的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/Tehran不是 UTC)?

它沒有使用您的實際 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;
   }

它正在尋找eth0介面的 MAC 地址,如果找不到,它會默默地退回到隨機生成的本地多播地址。如果您的網路介面被呼叫eth1wlan0其他任何東西,它無法找到它。

我認為這是軟體中的錯誤。它應該使用與目前預設路由對應的硬體介面的 MAC 地址,並讓使用者在需要時指定備用介面。我建議向上游報告。

關於時區:UUID 不儲存時區。UUID 中的時間資訊儲存為 UTC 時間,因此它是這樣uuid -d顯示的。該程序的增強功能uuid可能是提供一個選項,以在解碼時根據本地時區顯示時間——但無論哪種方式,該資訊都不會儲存在 UUID 本身內。

引用自:https://unix.stackexchange.com/questions/45198