HttpServletRequest#getRemoteAddr()とIPv6 (その2)

artonさんに言及頂いた。

Kazzzさんが恐ろしいエントリーを上げているけど、どの場合にそうなるんだろうか?
そこにあるIPv6 - L'eclat des jours

私の環境でも

InetAddress.getByName("localhost");

このコードは"localhost/127.0.0.1"を返すのは変わらない。念のため、サーバ(Tomcat, localhost:8080)を起動して、直接接続するコードも書いてみたが

new Socket("localhost", 8080).getLocalAddress().getHostAddress();

このコードもループバック"127.0.0.1"しか返さない。

もう一度私のケースを再現してみる。単純であり、javax.servlet.http.HttpServlet#doPostメソッドでrequestからリモートアドレスを取得しているだけである。

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
    resp.getWriter().print(req.getRemoteAddr());
}

このサーブレットIE7から"http://localhost:8080/コンテキスト名/"のURLでアクセスすると、ログに出力されるアドレスはやはり"0:0:0:0:0:0:0:1"である。

まだ全て見切れていないのだが、TomcatのHTTPコネクタから生成されるソケットのアドレスが既にこのアドレスを持っていることまでは解ったので、どうもこの辺(サーブレットコンテナ上のソケットの生成〜accept辺り)ではないかと見当をつけている。