来自getaddrinfo&的Bogus IP地址inet_ntop

时间:2009-12-27 18:44:50

标签: c++ sockets ip-address getaddrinfo

我一直在使用getaddrinfo来查找基本套接字命令的套接字地址。最近,它返回给我的地址是伪造的IP地址,我发现使用inet_ntop。我已经尝试了我的代码,以及Beej's Guide中提供的代码,它们都产生了相同的结果。这是代码:

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;

无论我使用什么地址,它总是给我一张表格的IP

16.2.x.y

其中256 * x + y等于端口号。有没有人见过这种情况,或者任何人都可以猜到它为什么会给我这个?

1 个答案:

答案 0 :(得分:6)

你不应该通过

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

inet_ntop