Я пытаюсь разрешить имя хоста из 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