Estoy tratando de resolver un nombre de host desde una dirección IP. He intentado usar gethostbyaddr()
y getnameinfo()
pero en muchos casos el nombre de host no se resuelve en absoluto. ¿Hay una mejor manera de convertir una dirección IP en un nombre de host válido?Resolver ip al nombre de host
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";
}
No todas las direcciones IP tienen un nombre de host inverso. ¿Qué te hace pensar que las direcciones IP que no devuelven un nombre de host deberían tener una? – Bruno
@Bruno - En algunos casos, cuando no obtengo un nombre de host, he intentado ejecutar 'nslookup
' desde el terminal y el comando devuelve un nombre de host. Entonces pensé que tal vez haya una forma más precisa de hacer este tipo de cosas. – CyclonecodeSé que esto no es una respuesta PERO debe seguir con getaddrinfo y getnameinfo porque son útiles en ambos casos para las direcciones de red Ipv4 e Ipv6. – excanoe