ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:91.48KB ,
资源ID:14108574      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14108574.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(内核数据包处理文档格式.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

内核数据包处理文档格式.docx

1、 1)_netifreceive_b()在进入三层处理前就对nwor_heade进行了设置。 2)ipc()中详细的检查保证了IP头部到etfilte后是完整的。3)netfilr可以尽情使用ip头部。获取tcp头部 错误:tcph = tcp_hdr(skb); 陷阱: netfilr的钩子点是属于TPI协议栈的三层流程中,而四层的TC头部此时还没有正确获取,只是初始化为IP头部的值,无法直接使用。错误2:tcph = (char *)iph + (iph-ihl tcph = skb_header_pointer(skb, tcpoff, sizeof(_tcph), &_tcph);if

2、 (tcph = NULL) return; 接口介绍:skb_network_offset(struct skb_buff *skb) 计算三层头部相对于kb-data的偏移void * skb_header_pointer(struct sk_buff *skb, int offset, int len, void *buffer)从skb的指定偏移取制定长度的数据,如果要取的数据位于线性区,直接返回其开始指 针,否则,则拷贝到bffer中,并将bufer指针返回。printk(%pI4 %d - %pI4 %d len: %d ID: %dn, &iph-saddr, ntohs(tcp

3、h-source),daddr,dest), ntohs(iph-tot_len),id);打印信息 注意要点:1) IP地址输出Iv4:%pI4 %p4IP6:%pI %pi6 2)MAC地址 %pM %3)字节序的转换nths() ol() tns() honl()_con_nohl() _cons_ntohs() _nthtnl() _othtons() 区别:_ons*()是编译时处理的。获取C负载 风险:payload = (char *)tcph + tcph-doff * 4; 陷阱1: 数据包可能是非线性的,同TC头部。 陷阱2: CP头部数据有可能是被篡改过的,tc-dof如

4、果很大怎么办? 改进1:tcplen = skb-len - tcpoff;if (tcph-doff*4 sizeof(struct tcphdr) | tcplen doff*4) printk(Bad tcp.n); return NF_ACCEPT;if (skb_is_nonlinear(skb)Nonlinear skb.npayload_len = tcplen - tcph-if (payload_len = 0) 接口介绍:int skb_is_nonlinear(struct sk_buff *skb) 判断sb的数据是否是非线性的改进2:char payload_buf1

5、500;if (payload_len sizeof(payload_buf)payload = skb_header_pointer(skb, tcpoff + tcph-doff*4, payload_len, payload_buf);if (payload = NULL) 改进3:if (skb_ linearize(skb)Can not linearize skb.nint skb_ linearize (struct sk_buff *skb)将kb线性化解析数据1)判断数据包内容 风险1:if (payload0 != G | payload1 !E | payload2 !T

6、) 风险2:if (payload0 = & payload1 = payload2 = ) & payload_len = 3)如果aoa的长度只有1个字节怎么办? 改进:if (payload_len = (payload + payload_len)4)数据包操作 错误:u32 len;len = payload_len - 512;if (len = payload_len - 2)综述:数据包处理要时刻保持警醒,它可能不是你想象的样子!内存分配void * xxx_alloc(unsigned long size, gfp_t flags) int malloc_size = size + sizeof(unsigned long); void *p; if (memory_use + malloc_size memory_max) return; p = kmalloc(malloc_size, flags); if (p = NULL) return NULL; memory_u

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1