2016-03-22 19 views
1

golangでライセンス名として使用されている現在のホストの一意の識別子を取得したいとします。どうやってするか ?たとえば、C:golangで現在のホストの一意の識別子を取得する方法は?

gethostid() //can get the host id 
+1

gethostid(3)ちょうど/ etc/hostidを読みます(利用できない場合、いくつかのジャンボがあります)。/etc/hostidを読んでください。 – Volker

+0

自分で解決策を見つけましたか?私は今まで運がなかった同じことを実装しようとしています。 –

+0

私はipアドレスを使ってhostidを変換します。例えば、 'ip:192.168.3.120 - > hostid:a8c07803' – LEo

答えて

1

のようにgethostid(3)はUNIX/BSD固有のlibc関数です。/etc/hostidからの読み取りは、UNIX以外のシステムでは機能せず、プラットフォームに依存しません。 Goはgethostidのようなものを提供していないので、

()なぜ、ここでは答えないJAVAのような他のプラットフォームに依存しない言語のようにそれを実装していない: How to get a unique computer identifier in Java (like disk id or motherboard id)

1

あなたはおそらくマシンIDをしたいです。

http://man7.org/linux/man-pages/man5/machine-id.5.htmlは言う:

マシンIDは、通常 システムのインストール時にランダムなソースから生成され、それ以降のすべてのブーツのために一定に保たれます。 オプションで、ステートレスシステムの場合、実行時に earlyブートで生成されます。空であれば起動します。

ローカルまたはネットワーク の設定、またはハードウェアが交換された場合、マシンIDは変更されません。これとその の長さが長いため、POSIXで指定されているgethostid(3) 呼び出しの代用として、より有効です。

あなたはと(最近の)Linuxシステムのmachine-idを取得することができます:

cat /etc/machine-id 
# or 
cat /var/lib/dbus/machine-id 

ほとんどの主要なOSには、固有のホスト識別子を持っています。それでも、一意ではないホストID(イメージング/複製/バックアップ/リストアによって引き起こされる)が存在する可能性があります。

私のgolangパッケージmachineidの実装の詳細については、BSD、Linux、OS X、Windowsで動作し、管理者権限を必要としないことも確認できます。

関連する問題