- 论坛徽章:
- 1
|
交代下背景:
测试程序: 注册hook函数,在hook函数中修改应用层数据即:把skb_buff中data的数据中ip+tcp+app格式中的app的数据某些为数据修改:
伪代码:
testhook(skb_buf,.......)//注册的hook函数
{
struct tcphdr *tcph;
struct iphdr *iph;
iph = (struct iphdr *)(skb_buf->data);
tcph =(struct tcphdr *)(stk_buf->data+(iph->ihl)*4);
skb_buf->data[(iph->ihl)*4+(tcph->doff)*4 +10] = 'a';
skb_buf->data[(iph->ihl)*4+(tcph->doff)*4 +11] = 'b';
skb_buf->data[(iph->ihl)*4+(tcph->doff)*4 +12] = 'c';
........
}
把应用层数据的第10,11,12字节修改成a,b,c。
我现在得到的结果是这样的:
如果客户端向服务器发送的数据小于200(大概大小没有具体算),那么服务器得到的数据就是修改之后的数据,即数据的10 11 12字节被修改成a b c。
但是,如果客户端向服务器发送的数据比较大,那么,服务器端接收到的数据就是客户端发送的原始数据,也就是说,数据的10 11 12字节并没有被修改。这里hook函数也是被执行过的。
谁知道这是什么原因啊?
从这里看好像是服务器最后接收到的数据并不是skb_buf这里面的数据,比较像是除了sbk_buff之外,还有另外的一个数据缓存,最后发给服务器的应该是另外的一份缓存数据。
这里小弟有点晕了。 麻烦明白的大神们给小弟指点一下。
谢谢!
|
|