>>Затрудняюсь, в каком разделе создавать топик, создам здесь, так как он связан >>с кодингом. >>При поступлении сетевого пакета в ОС 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. Если >ядро умеет - их можно отмапить. Вообще чума будет. Все, с первым способом я фактически разобрался. Если найду способ в своей функции-обработчике убивать пакеты, чтобы онм не шли дальше, то это будет именно то, что мне нужно))
|