Próbuję rozwiązać nazwę hosta z adresu IP. Próbowałem używać gethostbyaddr()
i getnameinfo()
, ale w wielu przypadkach nazwa hosta w ogóle nie jest rozwiązana. Czy istnieje lepszy sposób na przekształcenie adresu IP w prawidłową nazwę hosta?Resolve ip na nazwę hosta
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";
}
Nie wszystkie adresy IP mają odwrotną nazwę hosta. Co sprawia, że myślisz, że adresy IP, które nie zwracają nazwy hosta, powinny je mieć? – Bruno
@Bruno - W niektórych przypadkach, gdy nie mam nazwy hosta, próbowałem uruchomić 'nslookup
' z terminala, a polecenie zwraca nazwę hosta. Pomyślałem więc, że być może istnieje dokładniejszy sposób robienia tego rodzaju rzeczy. – CyclonecodeWiem, że to nie jest odpowiedź, ALE powinieneś trzymać się getaddrinfo i getnameinfo, ponieważ są one użyteczne w obu przypadkach dla adresów sieci IPv4 i IPv6. – excanoe