我打算开发一个应用程序来监视特定端口上的流量。为此,我需要列出系统中所有活动sk_buff的所有sk_buff数据。怎么做?
我编写了以下代码(基本上是一个内核模块)。
include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
#include </usr/src/linux-headers-2.6.38-8-generic/include/linux/skbuff.h>
int init_mo
在处理内核模块代码中的sk_buff时,我看到许多代码示例都使用
(struct iphdr *)skb_network_header(skb) //skb is an instance of (struct sk_buff*)
或者是实际上相同的函数ip_hdr() (调用skb_network_header并强制转换)。这个安全吗?如果我们对sk_buff的来源没有任何假设,是否可以进行检查以确保网络协议确实是IP?
编辑:到目前为止,可能会有一个sk_buff,唯一可能的网络协议是IP,但我仍然希望看到这方面的“证据”或解释。例如,如果我在Linux内核中实现自己的协议,而网络协议头可能
根据消息来源,
1197 * skb_reserve - adjust headroom
1198 * @skb: buffer to alter
1199 * @len: bytes to move
1200 *
1201 * Increase the headroom of an empty &sk_buff by reducing the tail
1202 * room. This is only allowed for an empty buffer.
1203 */
1204static inline void skb_re
我已经制作了一个模块,在这个模块中,我通过网络过滤器接收所有传入的数据包。我想打印/var/log/messages中的数据(没有标题)。我已经尝试了下面的printk行,但它没有打印出合适的消息。
struct sk_buff *sock_buff;
printk(KERN_INFO"user data :: %x",(sock_buff->data+sizeof(*sock_buff->network_header)+sizeof(*sock_buff->mac_header)) //though i want in character but i