Поддельный IP-адрес от getaddrinfo & inet_ntop

Я использовал 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;

Независимо от того, какой адрес я использую, он всегда дает мне IP вида

16.2.x.y

где 256*x + y равно номеру порта. Кто-нибудь когда-нибудь видел, чтобы это случилось, или кто-нибудь может догадаться, почему он дает мне это?

1 ответ

Решение

Вы не должны проходить мимо

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

в inet_ntop?

Другие вопросы по тегам