Использование 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)

→ Ссылка