Модуль ядра Linux - PullRequest
       16

Модуль ядра Linux

0 голосов
/ 27 марта 2012

Можно ли использовать netfilter для перехвата всех пакетов Ethernet?

Я могу просто получить пакет из ipv4 или ipv6.

РЕДАКТИРОВАТЬ:

Приведенный выше код является моим ядроммодуль.Я хочу, чтобы все пакеты, поступающие на один интерфейс Ethernet, перенаправлялись на другой интерфейс. Этот модуль просто печатал имя устройства, куда поступил пакет (только для тестирования).С помощью этого хука я просто получаю пакеты с типом ipv4, но я хочу получить все типы.

Я искал в сети, но не нашел, как настроить мой хук, чтобы получить все пакеты, которые обходят Ethernetинтерфейс.

С наилучшими пожеланиями

статическая структура nf_hook_ops nfho;

int hook_func (struct sk_buff * skb)

{struct ethhdr * eth;

printk ("Устройство:% s \ n, skb-> dev-> name);

} ​​

int init_module () {
printk (" HookМодуль в сети! \ N ");

nfho.hook = (nf_hookfn *) hook_func;

nfho.hooknum = NF_IP_PRE_ROUTING;
nfho.pf = PF_INET; nfho.priority = NFIRIP = PRF;

nf_register_hook (& nfho);

return 0;}

/ * Процедура очистки * / void cleanup_module () {

printk ("За иOut! \ N "); nf_unregister_hook (& nfho);}

1 Ответ

0 голосов
/ 09 апреля 2017

конечно, если я все понимаю, вы просто готовы принять все проверенные пакеты Ether и передать их другому интерфейсу.В этом случае просто включите файл ядра:

#include <linux/if_ether.h>

, вы получите заголовок:

struct ethhdr *hdr = eth_hdr(skb);
// *skb is a ptr !!

и убедитесь, что эфир действителен, проверив некоторые значения из ethhdrструктура.затем просто отправьте его на локальный хост или измените адреса, если вы хотите, чтобы другой интерфейс принимал его, как если бы это были его пакеты.

...