Thread View: fj.net.ip
1 messages
1 total messages
Started by Yasushi Shinjo
Thu, 24 May 2012 08:16
Java の IPV6_V6ONLY サポート
Author: Yasushi Shinjo
Date: Thu, 24 May 2012 08:16
Date: Thu, 24 May 2012 08:16
56 lines
3977 bytes
3977 bytes
新城@筑波大学です。こんにちは。
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 なものまで全
部見つかるので、どれが普通に使えるものなのか分かりません。
困ったなあ。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 情報工学 \\
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads