В общем-то я запостил это дело разработчикам (https://sourceforge.net/tracker/index.php?func=detail&aid=1557144&gro...), но может здеся тоже пособят.. Вкратце и по-русски...
Капчурится некий интерфейс, вот так выглядит кусок кода с обработчиком приходящих с оного данных...
struct data_header
{
struct ethhdr eth;
struct iphdr ip;
};
void pcap_handler(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes)
{
struct data_header *hd=(struct data_header*)bytes;
unsigned int saddr=ntohl(hd->ip.saddr);
unsigned int daddr=ntohl(hd->ip.daddr);
/*...и можно выводить в консоль сорс и дест адреса, например при помощи правого сдвига и побитового умножения...не суть важно*/
}
Эмпирически установлено, что при работе с обычными ифейсами вроде eth0 и lo структуру struct data_header треба паковать посредством __attribute__((packed)), это и понятно. Непонятно другое! Если в качестве ифейса выступает "any" (виртуальный обобщённый сетевой интерфейс), то упаковку надо убрать, иначе смещается всё.... Кто-нить сталкивался с подобным? Это что, так нужно чтоль?
Ответ на:
комментарий
от MKuznetsov
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум C++ — приведение типов (2011)
- Форум пользовательские данные,sk_buff (2013)
- Форум oops при работе модуля netfilter (2012)
- Форум PHP и (un)pack: ieee754 aka float (2019)
- Форум libpcap (2008)
- Форум un-ban (2009)
- Форум 2Bsd-un (2006)
- Форум DIVERT & libpcap (2004)
- Форум ..libpcap-0.4 (2000)
- Форум mutt un source (2020)