我正在嘗試從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地址應該有一個? – Bruno
@Bruno - 在某些情況下,當我沒有獲得主機名時,我嘗試從終端運行'nslookup
',並且該命令確實返回了一個主機名。所以我在想,也許有更準確的方式來做這種事情。 – Cyclonecode我知道這不是一個答案,但你應該堅持使用getaddrinfo和getnameinfo,因爲它們在Ipv4和Ipv6網絡地址的這兩種情況下都很有用。 – excanoe