Chinaunix首页 | 论坛 | 博客
  • 博客访问: 278966
  • 博文数量: 84
  • 博客积分: 3186
  • 博客等级: 中校
  • 技术积分: 852
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-15 15:46
文章分类

全部博文(84)

文章存档

2015年(1)

2014年(12)

2011年(29)

2010年(42)

分类: LINUX

2010-07-04 18:04:48

 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) |
给主人留下些什么吧!~~