Использование inet_ntoa для получения строкового представления ip адреса
printf("%s", inet_ntoa(ip->ip_src));
Я пытаюсь использовать функцию inet_ntoa, куда передаю ip->ip_src
struct ip {
u_char ip_vhl;
u_char ip_tos;
u_short ip_len;
u_short ip_id;
u_short ip_off;
#define IP_RF 0x8000
#define IP_DF 0x4000
#define IP_MF 0x2000
#define IP_OFFMASK 0x1fff
u_char ip_ttl;
u_char ip_p;
u_short ip_sum;
struct in_addr ip_src;
struct in_addr ip_dst;
};
Я пытаюсь получить из атрибута типа in_addr строковое представление адреса, но получаю ошибку
'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
Как избавиться от этой ошибки и успешно вывести адрес в консоль?
Ответы (1 шт):
Автор решения: Максим Филимонов
→ Ссылка
Нашёл выход
unsigned int src_ip_addr = ip->ip_src.S_un.S_addr;
unsigned int dst_ip_addr = ip->ip_dst.S_un.S_addr;
printf("Source IP-Address: %u.%u.%u.%u\n", src_ip_addr & 0xff, (src_ip_addr >> 8) & 0xff, (src_ip_addr >> 16) & 0xff, src_ip_addr >> 24);
printf("Destination IP-Address: %u.%u.%u.%u\n", dst_ip_addr & 0xff, (dst_ip_addr >> 8) & 0xff, (dst_ip_addr >> 16) & 0xff, dst_ip_addr >> 24);
Код берёт численное значение адреса и делит его на строку (учет только ipv4)