【发布时间】:2016-04-01 12:53:23
【问题描述】:
如何在内核空间中过滤和/或显示数据包到达的接口名称?
更具体地说,我希望在内核中打印出接口的名称,例如 eth0、wlan1 等。
其次,如何仅从特定接口(例如 eth0)过滤数据包?
【问题讨论】:
标签: linux-kernel hook kernel-module netfilter
如何在内核空间中过滤和/或显示数据包到达的接口名称?
更具体地说,我希望在内核中打印出接口的名称,例如 eth0、wlan1 等。
其次,如何仅从特定接口(例如 eth0)过滤数据包?
【问题讨论】:
标签: linux-kernel hook kernel-module netfilter
在钩子函数中,有参数const struct net_device *in和const struct net_device *out。
您可以通过以下方式打印:
printk(KERN_INFO "%s\n", out->name);
或:
printk(KERN_INFO "%s\n", in->name);
注意:你需要检查是否为空。
关于第二个问题,可以在strcmp(in->name, "eth0")的hook函数中使用,然后决定drop还是accept。
【讨论】:
printk(KERN_INFO "%s\n", in->name);只是打印一个空格?
printk(KERN_INFO "%s\n", out->name); 内核崩溃,我的笔记本电脑会挂起
printk(KERN_INFO "%s\n", in->name);。输出为“eth0”、“eth1”等。