2011-10-11 109 views
4

我試圖使用getaddrinfo()來解析URL的IP地址,但它總是返回錯誤的IP地址,我嘗試了幾個URL並且結果相同。任何幫助將不勝感激。getaddrinfo()函數返回錯誤的IP地址

程序returnes IP地址:209.85.175.99 insted的迴歸真正的IP是74.125.39.147

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netdb.h> 

int 
main() 
{ 
char *hostname = "www.google.lk"; 
struct addrinfo hints, *res; 
struct in_addr addr; 
int err; 

memset(&hints, 0, sizeof(hints)); 
hints.ai_socktype = SOCK_STREAM; 
hints.ai_family = AF_INET; 

if ((err = getaddrinfo(hostname, NULL, &hints, &res)) != 0) { 
printf("error %d\n", err); 
return 1; 
} 

addr.s_addr = ((struct sockaddr_in *)(res->ai_addr))->sin_addr.s_addr; 

printf("ip address : %s\n", inet_ntoa(addr)); 

freeaddrinfo(res); 

return 0; 
} 
+0

你是否支持某種代理?或者你的etc/hosts中有什麼錯誤? – phoet

+0

你確定你弄錯了嗎? > NSLOOKUP www.google.lk 服務器:DIR-320 地址:192.168.0.1 非權威的答案: 名稱:www.l.google.com 地址:209.85.148.147 209.85.148.99 209.85 .148.103 209.85.148.104 209.85.148.105 209.85.148.106 別名:www.google.lk www.google.com –

+3

也許你應該有一個更straightofrward分辨率比谷歌服務器的多個層的名稱重別名和循環解析。 'stackoverflow.com'如何? (Google服務器名稱的解析甚至取決於解決問題的位置) –

回答

6

google.com可以解析到不同的IP地址根據你自己的位置。這是一種負載平衡技巧。