[英]Linux Kernel MOdule
可以使用netfilter掛接所有以太網數據包嗎?
我可以從ipv4或ipv6中獲取數據包。
編輯:
上面的代碼是我的內核模塊。 我想將到達一個以太網接口的所有數據包重定向到另一個接口。此模塊僅打印數據包到達的設備的名稱(僅用於測試)。 有了這個鈎子,我剛剛得到的數據包的類型是ipv4,但是我想獲得所有類型。
我在網上搜索,但沒有找到如何配置鈎子來獲取繞過以太網接口的所有數據包的方法。
最好的祝福
靜態結構nf_hook_ops nfho;
int hook_func(結構sk_buff * skb)
{struct ethhdr * eth;
printk(“ Device:%s \\ n,skb-> dev-> name);
}
int init_module(){
printk(“在線掛接模塊!\\ n”);nfho.hook =(nf_hookfn *)hook_func;
nfho.hooknum = NF_IP_PRE_ROUTING;
nfho.pf = PF_INET; nfho.priority = NF_IP_PRI_FIRST;nf_register_hook(&nfho);
返回0; }
/ *清理例程* / void cleanup_module(){
printk(“ Over and Out!\\ n”); nf_unregister_hook(&nfho); }
當然,如果我沒事的話,您只願意接受所有經過Ether驗證的數據包並將它們傳遞到另一個接口。 在這種情況下,只需包含內核文件:
#include <linux/if_ether.h>
您通過以下方式獲得標題:
struct ethhdr *hdr = eth_hdr(skb);
// *skb is a ptr !!
並通過從ethhdr結構中檢查一些值來確保以太幣有效。 然后只是由本地主機發送然后修改地址,如果您希望另一個接口像他的數據包一樣接受它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.