HttpServletRequest#getRemoteAddr()とIPv6 その3
このサーブレットでIE7から"http://localhost:8080/コンテキスト名/"のURLでアクセスすると、ログに出力されるアドレスはやはり"0:0:0:0:0:0:0:1"である。
Tomcatのソースを追ってみたところ、以下のように推移している
PoolTcpEndpoint.acceptSocket() 行: 407 ↓ DefaultServerSocketFactory.acceptSocket(ServerSocket) 行: 60 ↓ ServerSocket.accept() 行: 421 ↓ ServerSocket.implAccept(Socket) 行: 450 ↓ SocksSocketImpl(PlainSocketImpl).accept(SocketImpl) 行: 384 ↓ PlainSocketImpl.socketAccept(SocketImpl) 行: 使用不可 [ネイティブ・メソッド] ↓ Inet6Address.() 行: 203 [ローカル変数は使用不可] ↓ ここで、アドレスは"0:0:0:0:0:0:0:1"になっている
socketAcceptはネイティブメソッドだ。ということはやはりVistaのWinSock絡みかな。
IPv6 Guide for Windows Sockets Applications
あと、IPv6がらみの記事であれば、ザ・ケーブルガイシリーズがお勧めだ。
The Cable Guy – 2005 年 3 月 IPv6 のトラブルシューティング
The Cable Guy - February 2006 Source and Destination Address Selection for IPv6
くそ、なんでFebruary 2006の邦訳が無いんだ。
時間が無い&明日は外出なんで続きは週末かな。