河野真治 @ 琉球大学情報工学です。

In article <dms3p3$iks$1@caraway.media.kyoto-u.ac.jp>, Masanori HATA <hata@iname.com> writes
> 題名の通り、質問なのですが、perl プログラムから、そのプログラムが実行さ
> れているマシンのホスト(名|アドレス)を知る「汎用的な(プラットホームに
> 依存しない)」方法はあるでしょうか?

それはTCP/IPには依存するわけだけど、それはいいわけね...

> 例えば、Linux(少なくとも自分が利用している ISP のサーバの環境の場合)だ
> と、環境変数として取得できるようなので、$ENV{'HOSTNAME'} を利用すればよ
> かったりするのですが、Windows 2000 ではこの手法は使えません。

Linux でも、それは一般的ではないです。たぶん、shell か login script
で、export HOSTNAME=`hostname` とかしているんじゃないかな。

さらに、

> ちなみに、何をしたくてこんなことをしているのかというと、メールの
> Message-ID ヘッダ(RFC 2822 3.6.4 参照)を作成するプログラムを書こうと
> 思っています。そこで id-right の文字列としてホストアドレスを自動で使える
> ようにしたいわけです。

このような用途では hostname を一般的には信用するわけにはいきません...
NAT の中にあるホストかも知れませんよね。

ISPのサーバのような場合で、大域アドレスを持っているホストだ
と保証できるなら、

    use Sys::Hostname;
    $host = hostname;

ってのが使えるようです。

というと、それを喜んで使うのが目に見えますが、config ファイ
ルなどで、ユーザに指定させてしまうのが簡単で確実だと思います。
postfix/sendmail などの設定でも、hostname で取って来れないなら
そうするようになってます。そうすれば、NAT環境でも使えます。

あと、Message-ID は smtp server が自動的に割り振ってくれます。
それに任せると言う手もあります。なんだが、自分が出した Message-ID
がわからなくなるのが欠点だな。smtp で接続したときに、取って来る
プロトコルとかあったっけ?

---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科