Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Java の IPV6_V6ONLY サポート

50 views
Skip to first unread message

Yasushi Shinjo

unread,
May 24, 2012, 4:16:02 AM5/24/12
to
新城@筑波大学です。こんにちは。

Java で IPv6 専用のサーバを書こうすると、かなり面倒だというこ
とがわかりました。普通に IPv6 any (::) で bind すると、IPv4
への要求も受け付けてしまいます。

C 言語、というか、普通の Socket API なら、こんな感じで、IPv6
専用にできます。

s = socket( PF_INET6, SOCK_STREAM, 0 );
on = 1;
setsockopt( s,IPPROTO_IPV6, IPV6_V6ONLY,&on,sizeof(on) );

Java のドキュメントを見ると、将来サポートするというのが出てきました。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/net/ipv6_guide/index.html#special
http://docs.oracle.com/javase/1.5.0/docs/guide/net/ipv6_guide/index.html#special

------------------------------------------------------------
特殊な IPv6 アドレス型
未指定アドレス (:: IPv4 の 0.0.0.0 に対応)
...
:: にバインドされているとき、メソッド ServerSocket.accept は、
IPv6 ホストと IPv4 ホストの両方からの接続を受け入れます。現在
の Java プラットフォーム API では、IPv6 ホストからの接続だけ
を受け入れるように指定する方法はありません。
...

注: このあと説明するオプションは、
Draft-ietf-ipngwg-rfc2553bis-03.txt で導入されています。それ
が標準規格になった時点で、そのオプションが Java 2 プラット
フォームでサポートされる予定です。
...
プリケーションによっては、AF_INET6 ソケットの使用を IPv6 通信
だけに限定したい場合があります。そのようなアプリケーションで
は、IPV6_V6ONLY ソケットオプションを定義します。このオプショ
ンをオンに設定すると、IPv6 パケットだけを送受信するためにその
ソケットを使用できます。デフォルトでは、このオプションはオフ
になっています。
------------------------------------------------------------

この Java での IPV6_V6ONLY のサポートは、どういう状況になって
いるんでしょうかね。

上のドキュメントには、
java.net.NetworkInterface.getNetworkInterfaces() して、
ifconfig -a 相当のことをしながら、自分が使えるIP アドレスを探
してなんとかしろ、みたいなことは書いてあります。でも、any
(::) で書きたいですよね。::1 の要求もあるし。それに、IPv6 の
ドレスを列挙できても、プライバシ対策の temporary なものまで全
部見つかるので、どれが普通に使えるものなのか分かりません。

困ったなあ。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 情報工学        \\
0 new messages