2013-07-24 16 views
5

アドレスが一時的なipv6アドレスであるかどうかを検出したいが、私はgetifaddrsを使ってアドレスのリストを取得するが、そこからその情報を取得する方法はわからない。そして、可能であれば、それはlinux、osx、solaris、windowsのために働きたい。一時的なipv6アドレスのクロスプラットフォームを検出する

私はLinuxのIFA_F_TEMPORARYがinet6_ifaddr-> ifa_flagsに設定されているようですが、getifaddrsから返されたifaddrsからどうやって得ることができるかはわかりません。

OSXではSIOCSIFINFO_FLAGSでoctlが必要だと思われます.SolarisやWindowsについては全く分かりません。

には、それを実行できるサンプルコードがあります。

+0

この回答を見つけましたか?私は自分自身好奇心が強いです... – theory

+0

いいえ、それは少し複雑で、それを実装しないことに決めました。 –

+0

Bummer。あなたは少なくとも、OS X上でこのトリックを行う「octl」の使い方を示すコードを持っていますか? – theory

答えて

2
更新

(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の請求一時アドレスは、次の条件を満たす必要があります。

  1. はC++のための

だから、「公開」住所未満優先寿命が「公開」住所未満有効寿命を有しGetAdaptersAddressesのような関数を使うと、PIP_ADAPTER_ADDRESSES構造体の_IP_ADAPTER_UNICAST_ADDRESS構造体を調べ、ValidLifetimeとPreferredLifetimeのメンバを評価することができます。アドレスタイプをフィルタリングした後(ローカルリンクとパブリックを知る必要がある場合)、最大の有効期間の実行記録を保持できます。アダプターあたりの最大寿命は、パブリックアドレスにする必要があります。あなたは、すべての一時的なアドレスがデフォルトしSLAAC寿命よりもはるかに小さい見ることができるnetshインターフェイスのIPv6アドレス表示

:すぐにWindowsのターミナルコマンドを実行してアドレス寿命情報を表示するには

私は、テストが別の方法で証明されるまで、今はこの仮定を使って作業しています。すべての一時的なアドレスは一般に基づいているので、それを生かすことはできません。

希望します。

+0

これは私のマシンでは動作しません。私の一時的なIPアドレスと通常のIPアドレスの両方が同じ生涯で表示されます: AddrタイプDAD州有効な生活Pref。生命の住所 --------- ----------- ---------- ---------- ------- ----------------- 公開優先1h58m15s 16m36s xxxx:xx:xxxx:2000:71e7:xxxx:xxxx:f4 5b 一時優先1h58m15s 16m36s xxxx:xx:xxxx: 2000:8479:xxxx:xxxx:a7 0a その他の無限無限fe80 :: 71e7:xxxx:xxxx:f45b%19 – Philipp

+0

これについては、RFC 4941のセクション3.3.4を参照してください。私がWindows 8.1とWindows 10の下でVerizonとComcastの両方からIPv6 DHCPを使ってテストで再現できたものだから、あなたが投稿したものについて話すことはできません。それが実際に真実ならば、正しく適合しないエッジケースがある。うまくいけば、誰か他の人がより良い方法を見つけたといいでしょう – Josh

関連する問題