更新
(2016年8月3日):(私はこの自分自身に答えるの必要性に実際だから)この質問の過去数ヶ月のためにオンとオフを検索した後。私はWindows中心の答えを見つけたと信じています。私はこれをWindows 10でしかテストしていないので、古いバージョンについてはわかりません。しかし、誰かが私のためにそれを確認したい場合、このAPIは変更してはいけません:-)
すべて_IP_ADAPTER_UNICAST_ADDRESS構造体には、アドレス接頭辞と接尾辞の列挙があります。私は今それらを見るのに気を使いましたが、彼らはこの問題を解決する鍵です!
一時的なIPv6アドレスとは....それはRANDOM SUFFIXのアドレスです!したがって、IP_ADAPTER_UNICAST_ADDRESS内のすべてのIPv6アドレスがIP_SUFFIX_ORIGINの場合は、IpSuffixOriginRandomかどうかを確認してください。それでおしまい。
私は本当にこの話題がオンラインでどのくらい少ないのかにはまだショックを受けています。ネットワークアプリケーション開発者にとっては、この問題をサーバーサイドアプリケーション
あなたはここで最初に答えを聞いた!
(オリジナル回答):私もクロスプラットフォームアプリケーションのために、この正確なトピックを見てきました。私は、WindowsでIPv6仮アドレスをフィルタリングする方法を見つけたと思います。基本的にはRFC 4941の請求一時アドレスは、次の条件を満たす必要があります。
- は
- はC++のための
だから、「公開」住所未満優先寿命が「公開」住所未満有効寿命を有しGetAdaptersAddressesのような関数を使うと、PIP_ADAPTER_ADDRESSES構造体の_IP_ADAPTER_UNICAST_ADDRESS構造体を調べ、ValidLifetimeとPreferredLifetimeのメンバを評価することができます。アドレスタイプをフィルタリングした後(ローカルリンクとパブリックを知る必要がある場合)、最大の有効期間の実行記録を保持できます。アダプターあたりの最大寿命は、パブリックアドレスにする必要があります。あなたは、すべての一時的なアドレスがデフォルトしSLAAC寿命よりもはるかに小さい見ることができるnetshインターフェイスのIPv6アドレス表示
:すぐにWindowsのターミナルコマンドを実行してアドレス寿命情報を表示するには
。
私は、テストが別の方法で証明されるまで、今はこの仮定を使って作業しています。すべての一時的なアドレスは一般に基づいているので、それを生かすことはできません。
希望します。
この回答を見つけましたか?私は自分自身好奇心が強いです... – theory
いいえ、それは少し複雑で、それを実装しないことに決めました。 –
Bummer。あなたは少なくとも、OS X上でこのトリックを行う「octl」の使い方を示すコードを持っていますか? – theory