1

IPv6アドレスを引数としてドメイン名を返す関数を探しています。

明確にするために、2a00:1450:8006::68はipv6.google.comを返します。

(目的は、このドメイン名をgetaddrinfo関数に与えることです。)

ありがとう :-)

edit1:試しましたがgetaddrinfo("2a00:1450:8006::68", "http", NULL, &result);、「ホスト名のアドレスファミリがサポートされていません」をgetaddrinfo("ipv6.google.com", "http", NULL, &result);返し、「ホットネームにアドレスが関連付けられていません」というエラーを返します。

EDIT2:私はあなたに同意します、私はIPV6システムに問題があります、私はhttp://test-ipv6.com/を試しました、そして私はIPV6アドレスを持っていないようですが、ifconfigそれで戻ってきます:

adr inet6: fe80::15b:fcff:fe65:d516/64 Scope:Lien
4

2 に答える 2

3

有効なIPv6構成がないと思います。getaddrinfo()到達可能なIPv6回答のみが返されるため、システムにグローバルスコープのIPv6アドレスと解決されたアドレスへのルートがない場合、結果は結果セットから削除されます。

基本的な考え方は、一度呼び出しgetaddrinfoて接続するアドレスのリストを取得することです。そのリストに到達不能なアドレスが含まれている場合、プログラムは別のアドレスを試す前に最初にタイムアウトになる必要があります。

「ホスト名のアドレスファミリはサポートされていません」とは、そのアドレスがDNS経由で解決する必要のないIPv6アドレスであることを認識したため、許可されたアドレスファミリのリストと照合しようとして失敗し、エラーを返すことを意味します。

ホスト名を解決すると、ホスト名の「A」レコードを取得しようとします。これは、ローカルでサポートされている唯一のアドレスファミリに適しているためです。そのようなレコードは存在しないため、レコードが存在しないという情報を返します。IPv6アドレスを要求することはなかったので(それは無意味だったでしょう)、ここではアドレスファミリの不一致について文句を言いません。

于 2011-05-12T23:27:52.647 に答える
2

最初のステップとして使用するのは正しいですがgetaddrinfo、逆引きDNSルックアップを実行することはできません。getaddrinfoを使用して、アドレスの文字列形式をに変換する必要がありますsockaddr。これをに渡してgetnameinfo、逆引き参照を実行できます。

そうは言っても、カールのコメントも関連していると思います。システムがIPv6をサポートしないように構成されているようです...

于 2011-05-12T23:28:23.263 に答える