畑です。

Shinji KONO wrote:
>>題名の通り、質問なのですが、perl プログラムから、そのプログラムが実行さ
>>れているマシンのホスト(名|アドレス)を知る「汎用的な(プラットホームに
>>依存しない)」方法はあるでしょうか?

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

それはもちろん、構いません。:)

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

やはり環境によりけり、なんですね。

> あと、Message-ID は smtp server が自動的に割り振ってくれます。
> それに任せると言う手もあります。

はい、確かに自分の使ってる ISP のサーバでは、Message-ID を付加してくれま
す。てっきり、Sendmail の方でやってくれているのかと思ってましたけど。

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

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

なるほど、確かに、グローバルユニークである必要があるので、プライベートア
ドレスを使われても意味がないですよね。そこまでは考えが及びませんでした。
localhost とか 127.0.0.1 じゃしょうがないなとは思ってましたけど。

> ISPのサーバのような場合で、大域アドレスを持っているホストだ
> と保証できるなら、
> 
>     use Sys::Hostname;
>     $host = hostname;
> 
> ってのが使えるようです。

そういうものがあったんですね。知りませんでした。ただ、大域アドレスを持っ
てるホストだという保証がない場合はやはり使えないわけですよね。ちなみに、
自分のマシン(Windows 2000)でやってみたら、Windows ネットワークのマシン
名が表示されただけでした。X-(
つまり、自宅サーバでメールサーバを運用しているようなケースを考えると、使
えないので、僕が意図する「汎用性」には及ばないことになります。

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

そうですね。河野さんのおっしゃるように、自動設定は諦めて、ユーザに引数と
して指定させてユーザ側に委ねるのが、一番適切だと思います。

どうもありがとうございました。

-- 
Masanori HATA