LINUX.ORG.RU

Проблема с отправкой sk_buff->data в netlink пользователю

 ,


0

2

Возникла проблема. Пытаюсь написать модуль ядра, который отлавливал бы нужные сетевые пакеты (посредством netfilter) и передавал их содержимое в пользовательское приложение. Организовал передачу через netlink.

Проблема в том, что после прихода данных в user space, никак не удается их правильно распаковать. Не накладывается структура tcphdr, а если наложить sockaddr_in то данные получаются кривые (что в принципе логично). Если же отправляю просто любой текст («Hello World») вместо sk_buff->data все доходит успешно. Код приложил ниже в сообщении, надеюсь на помощь. Спасибо.



Последнее исправление: aleksey_melikov (всего исправлений: 8)

Выражусь поконкретнее. Пытаюсь передать структуру sk_buff в разделе данных в netlink сообщении. Записываю так (в модуле ядра)

memcpy (nlmsg_data(nlh), skb->data, 256);

Само netlink сообщение отправляю так

size_s = nlmsg_unicast(netlink_sock, skb_nl, cl_mass);

И соответственно накладываю структуру iphdr в пользовательском приложении на NLMSG_DATA(от netlink сообщения). Так

ip_hdr =  (struct iphdr *)NLMSG_DATA(nlhdr_send);

Или так

sockaddr_pck = (struct sockaddr_in *)NLMSG_DATA(nlhdr_send);

Проблема в том, что я видимо что то не до понимаю, т.к. при компиляции пользовательского приложения выскакивает ошибка " dereferencing pointer to incomplete type" на ip_hdr->saddr в строчке

printf ("\nReceive: (saddr) %d [%d byte]\n\n", ip_hdr->saddr ,size_r);

Если отправлять из модуля не skb->dataб, а какой-либо простой текст, все читается (у клиента) отлично. Поэтому видимо проблема именно в том как правильно наложить структуру iphdr на NLMSG_DATA(от netlink сообщения) в клиентском приложении.

aleksey_melikov
() автор топика
Ответ на: комментарий от aleksey_melikov

Заговок IP находится не в самом начале, нужно его накладывать после стуруры ether_header (если зыбыть про VLAN).

ip_hdr =  (struct iphdr *) ((uint8_t *) NLMSG_DATA(nlhdr_send) + sizeof(struct ether_header));
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.