グローバル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自体には保存されません。

関連情報