2009-12-27 10 views
3

J'ai utilisé getaddrinfo pour rechercher des adresses de socket pour les commandes de socket de base. Récemment, cependant, les adresses qu'il me renvoie sont pour les adresses IP fausses, que j'ai trouvé en utilisant inet_ntop. J'ai essayé mon code, ainsi que celui fourni dans Beej's Guide, et ils produisent tous deux les mêmes résultats. Voici le code:Bogus adresse IP de getaddrinfo & inet_ntop

struct addrinfo hints, *info; 
int status; 

memset(&hints, 0, sizeof hints); 

hints.ai_family = AF_INET; 
hints.ai_socktype = SOCK_STREAM; 

if(status = getaddrinfo(address, port, &hints, &info)) { 
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status)); 
} 

char ip4[INET_ADDRSTRLEN]; 
inet_ntop(AF_INET, info->ai_addr, ip4, INET_ADDRSTRLEN); 

std::cout<<ip4<<std::endl; 

Peu importe quelle adresse je l'utilise, il me donne toujours une adresse IP de la forme

16.2.x.y

où 256 * x + y est égal au numéro de port. Est-ce que quelqu'un a déjà vu cela se produire, ou quelqu'un peut-il deviner pourquoi il me donne ça?

Répondre

6

Si vous ne serais très

((sockaddr_in const *)info->ai_addr)->sin_addr 

à inet_ntop?

+1

Oui, cela pourrait aider un peu. : P Merci! Et c'est en fait & ((const sockaddr_in *) info-> ai_addr) -> sin_addr – Xymostech