>Затрудняюсь, в каком разделе создавать топик, создам здесь, так как он связан
>с кодингом.
>При поступлении сетевого пакета в ОС Linux он сохраняется в каком-то буфере
>в ядре до обработки фаерволлом. Вопрос: можем ли мы получить доступ
>к этому буферу и пакетам в нем? Каким функциями это можно
>сделать? И вообще, где можно про это почитать?
>Пол-инета облазил, нашел пару более менее путных статей, но там мало... 1) Если я правильно понял вопрос, то существует ровно 2 способа
из ядра - зарегистрировать свою packet_type структуру с нужным proto id - мы будем получать пакет в коллбеке
Выглядит это примерно так:
...
int my_rcv_callback(struct sk_buff *skb, /* это наш пакет */, struct net_device *dev, struct packet_type *pt)
{
...что нибудь сделать с пакетом...
return 1/0; - мы не/приняли пакет
}
....
struct packet_type my_packet_type =
{ __constant_htons(НУЖНЫЙ_ПРОТО_ИД),
NULL,
my_rcv_callback,
NULL,
NULL
};
...
int module_init() {
....dev_add_pack(&my_packet_type);
...
} ну и т п.
2) способ - из userspace - использовать PF_PACKET сокеты с ETH_P_ALL. Если ядро умеет - их можно отмапить. Вообще чума будет.