Поддельный 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
?