IPアドレスからホスト名を解決しようとしています。私はgethostbyaddr()
とgetnameinfo()
を使ってみましたが、多くの場合、ホスト名はまったく解決されません。 IPアドレスを有効なホスト名にするより良い方法はありますか?ipをホスト名に解決する
char* ip = argv[1];
// using gethostbyaddr()
hostent * phe = gethostbyaddr(ip, strlen(ip), AF_INET);
if(phe) {
cout << phe->h_name << "\n";
}
// using getnameinfo()
char hostname[260];
char service[260];
sockaddr_in address;
memset(&address, 0, sizeof(address));
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr(ip);
int response = getnameinfo((sockaddr*)&address,
sizeof(address),
hostname,
260,
service,
260,
0);
if(response == 0) {
cout << hostname << "\n";
}
すべてのIPアドレスに逆のホスト名があるわけではありません。ホスト名を返さないIPアドレスには、1つのIPアドレスが必要だと思いますか? – Bruno
@Bruno - ホスト名が得られない場合がありますが、ターミナルから 'nslookup
'を実行しようとしましたが、コマンドはホスト名を返します。だから私はおそらく、このようなことをするより正確な方法があると考えていました。 – Cyclonecodeこれは答えではありませんが、getaddrinfoとgetnameinfoはIpv4とIpv6の両方のネットワークアドレスの両方の場合に便利なので、固執すべきです。 – excanoe