2009-12-27 156 views
3

我一直在使用getaddrinfo查找基本套接字命令的套接字地址。然而,最近返回給我的地址是我使用inet_ntop發現的虛假IP地址。我試過我的代碼,以及Beej's Guide中提供的代碼,它們都產生相同的結果。下面的代碼:來自getaddrinfo的虛假IP地址&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; 

不管我用什麼地址,它總是給我的形式

16.2.x.y

,其中256 * X + Y等於端口號的IP。有沒有人見過這種事,或者有誰能猜到爲什麼它給了我這個?

回答

6

你不是應該通過

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

inet_ntop

+1

是的,這可能會有所幫助。 :P謝謝!它實際上是&((const sockaddr_in *)info-> ai_addr) - > sin_addr – Xymostech