Пишу сниффер на libpcap, нужно сделать фильтр broadcast/mutsicast. Те задача сводится к сравнению первого байта адреса получения на равенство 255 (броадкаст) и диапазон 224-239. Мой код на мой взгляд жутко неоптимален, хотя и работает. char destIP[4];
int destIPint;
ipq_packet_msg_t *packet = ipq_get_packet(buf);
ip_header = (struct iphdr*)(packet->payload);
strncpy(destIP, inet_ntoa(ip_header->daddr), 3);
destIPint = atoi(destIP);
if ((destIPint >= 224 && destIPint <= 239) || destIPint == 255)
printf("Multi");
else
printf("Uni");
По идее это можно сделать гораздо проще если обршаться напрямую к значению байта. IP адресс в заголовке находится по смешению в 16 байт. Те первый байт адреса можно получить как ip_header[16]. Но почему-то когда я делаю вот так
printf("%x", ip_header[16]);
На экране появляется какая-то чушь вместо 16ричного значения.
Помогите, плиз.