Socket_Kernel_Module 03

2.2 修改IPHeader包

IP层的最后一个发送函数是ip_output.c中的ip_finish_output(8.11) , 可以在此添加hook函数,

这里是修改TOS字段,Type of Services,是表示优先级的,由于现在大部分路由器忽略此字段,因此修改TOS不会对现有网络造成影响

 

2.2.1修改 ip_output.c

int (*myHook_IPTOS)(strcut sk_buff*) = 0;

__inline__ int ip_finish_output(struct sk_buff* skb)

{

     //...

     if( myHook_IPTOS)

     {

         myHook_IPTOS(skb);

     }

     //...

}

代码最后 

EXPORT_SYMBOL(myHook_IPTOS);

 

2.2.2编写myHook_IPTOS.c

#define __KERNEL__

#define MODULE

#include <linux/config.h>

#include <linux/module.h>

#include <linux/skbuff.h>

#include <linux/tcp.h>

#include <linux/ip.h>

#include <net/ip.h>

 

extern int (*myHook_IPTOS)(struct sk_buff*);

 

//这的struct sk_buff仍然是2.4的,在2.6中struct sk_buff结构被修改了,基本原理未变

//此部分代码以后再修改为2.6的,

int myHook_IPTOS_impl(struct sk_buff* skb)

{

     struct iphdr* iph;

     struct tcphdr* th;

     iph = skb->nh.iph;

     if( iph->protocol == IPPROTO_TCP)

     {

         skb->h.raw = (unsigned char*)(skb->nh.raw + iph->ihl * 4);

         th = skb->h.th;

         if(( tcp_flag_word(th) & TCP_FLAG_ACK))

         {

             skb->nh.iph->tos = 0xB8;

             ip_send_check(skb->nh.iph);

         }

     }

     return 0;

}

 

static int init_hook( void )
{
    myHook_IPTOS = myHook_IPTOS_impl;  //后门函数指向了真正的实现函数

    printk("myHook_IPTOS installed");        //表示加载成功
    return 0;
}

 

static int exit_hook(void)

{

    myHook_IPTOS= 0;                    //后门函数清0
    printk("myHook_IPTOS removed/n"); //表示卸载成功

    return 0;
}

 

MODULE_LICENSE("GPL"); //表示采用的开放协议

module_init(init_hook);     //为当加载Module时,自动调用init_hook
module_exit(exit_hook);   //当卸载Module时,自动调用exit_hook;

 

2.2.3 编写Makefile 

obj-m := myHook_IPTOS.o

 

all:

     make -C /lib/modules/2.6.24.3/build /

     M=$(PWD) modules

clean:

     make -C /lib/modules/2.6.24.3/build /

     M-$(PWD) modules 

保存后,输入

#make 编译

 

2.2.4 加载卸载

#insmod myHook_IPTOS.ko

#cat /var/log/message

就能看到 "myHook_IPTOS installed",表示加载成功

然后打开Firefox,上上网,

....

#tcpdump

看发送的包

 

#rmmod myHook_IPTOS

#cat /var/log/message

就能看到 "myHook_IPTOS removed",表示卸载成功

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值