STCPがその名前をどうやって知っているのか不思議に思ったことはありませんか?system>stcpディレクトリの中にhostというファイルがあります。このファイルにはモジュールの名前が1行含まれています。このファイルを直接編集したり表示したりすることができますが、私はhostnameコマンドを使うことをお勧めします。引数を指定しないとhostファイルの内容を表示してくれます。
ホスト名 アテナブス 用意ができました 13:46:51 |
図 1 - hostname コマンドによるホスト名の表示 |
引数を指定すると、ホストファイルの内容がその引数の値に設定され、それがSTCPホスト名になります。
ホスト名 これはテストだ 準備ができました 13:47:00 ホスト名 これはテストだ 用意ができました 13:47:03 |
図2 - hostnameコマンドによるホスト名の変更 |
コマンドの他に、ホスト名を返すプログラミング関数があります。
#include <stdio.h> #include <errno.h> #include <netdb.h> int errno; void exit (int); main () { char name [32]; if (gethostname (name, 32) < 0) { perror ("ex_gethostname: Error getting hostname"); exit (errno); } else printf ("hostname is %sn", name); |
図 3 - gethostname 関数を使用したプログラム |
多くのサブシステムは、モジュールを識別するためにホスト名に依存しています。これらのサブシステムは名前を取得し、名前を文字列として使用するか、名前を IP アドレスに解決します。名前がない場合、間違っている場合、間違った IP アドレスに解決する場合、または解決できない場合、アプリケーションは失敗したり、正しく機能しないことがあります。
例えば、Radius サーバ経由で外部認証を行う場合、ホスト名から解決されたモジュールの IP アドレスが Radius リクエストパケットの NAS-IP-ADDRESS フィールドに送信されます。IP アドレスが期待しているものと異なる場合や、提供されたユーザ ID がその IP アドレスに関連付けられていない場合、Radius サーバは要求を拒否するかもしれません。
hostname コマンドは module_start_up コマンドマクロの一部です。名前は起動時に持続するので、システムが起動するたびに名前を設定する必要はありませんが、問題はありません。重要なのは、名前が正しい IP アドレスに解決するものに設定されていることを確認することです。間違った名前や間違った IP アドレス解決を持つと、Radius, SSH, Samba のようなサブシステムが使えなくなるかもしれません。