我使用包中的uuid
命令uuid-1.6.2-8.fc17.x86_64
生成版本 1 UUID。手册页说默认是使用主机的真实MAC地址,但是当我解码生成的UUID时,它使用的是本地多播地址。uuid v 1
显示:
5fc2d464-e1f8-11e1-9c3d-ff8beec65651
Run Code Online (Sandbox Code Playgroud)
用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)
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它使用我的实际 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;
}
Run Code Online (Sandbox Code Playgroud)
它正在寻找eth0
接口的 MAC 地址,如果找不到,则默默地回退到随机生成的本地多播地址。如果您的网络接口被调用eth1
或wlan0
其他任何东西,它无法找到它。
我认为这是软件中的错误。它应该使用与当前默认路由对应的硬件接口的 MAC 地址,并让用户根据需要指定备用接口。我建议向上游报告。
关于时区:UUID 不存储时区。UUID 中的时间信息存储为 UTC 时间,这就是uuid -d
它的显示方式。该uuid
程序的一个增强功能可能是在解码时提供根据本地时区显示时间的选项——但无论哪种方式,该信息都不会存储在 UUID 本身中。