Note: 此篇文章需要完善,未完,只是暂时标记一下思路。
Linux内核提供了协议管理的类型packet_type,当收到网络数据时,数据指针在不同的网络层之间传递,属于哪个层的数据,便在哪一层处理。为内核添加一种自己的协议处理类型,并通过dev_add_pack(&g_packet_alltype);函数将其注册到内核协议栈链中,这样就可以对我们感兴趣的数据包进行hack。
以下是packet_type的定义:
struct packet_type { __be16 type; /* This is really htons(ether_type). */ struct net_device *dev; /* NULL is wildcarded here */ int (*func) (struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *); struct sk_buff *(*gso_segment)(struct sk_buff *skb, int features); int (*gso_send_check)(struct sk_buff *skb); void *af_packet_priv; struct list_head list; };
|
我们可以自定义func函数,对数据进行处理。
阅读(1632) | 评论(0) | 转发(0) |