- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux2.6下ESP包解析流程
1. 前言在Linux2.6中自带了ipsec的实现,可以不再使用freeswan及其变种了,freeswan通过建立ipsec*的虚拟网卡来将发送和接收ipsec数据包,通过ipsec*网卡看到的数据是明文数据,而2.6中的ipsec实现是不建立ipsec*虚拟网卡的,本文分析一下ESP包进入系统协议栈的处理流程。以下Linux内核代码版本为2.6.19.2。2. 流程分析2.1 esp协议结构esp协议结构定义,对于每个IPv4上层的协议,如TCP、UDP、ICMP、IGMP、ESP、AH等都需要定义这个结构挂接到IPv4的协议链表中,当接收到IP数据包时,会根据包中定义的IP协议号找到该结构,然后调用其成员handler函数进行处理。/* net/ipv4/esp4.c */static struct net_protocol esp4_protocol = {?.handler?=?xfrm4_rcv,?.err_handler?=?esp4_err,?.no_policy?=?1,};esp协议的handler函数是xfrm4_rcv()2.2 xfrm4_rcv/* net/ipv4/xfrm4_input.c */int xfrm4_rcv(struct sk_buff *skb){?return xfrm4_rcv_encap(skb, 0);}实际就是xfrm4_rcv_encap,封装类型参数设置为0,即没封装数据2.3 xfrm4_rcv_encap/* net/ipv4/xfrm4_input.c */int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type){?int err;?__be32 spi, seq;?struct xfrm_state *xfrm_vec[XFRM_MAX_DEPTH];?struct xfrm_state *x;?int xfrm_nr = 0;?int decaps = 0;// 获取skb中的spi和序列号信息?if ((err = xfrm4_parse_spi(skb, skb-nh.iph-protocol, spi, seq)) != 0)??goto drop;// 进入循环进行解包操作?do {??struct iphdr *iph = skb-nh.iph;// 循环解包次数太深的话放弃??if (xfrm_nr == XFRM_MAX_DEPTH)???goto drop;// 根据地址, SPI和协议查找SA??x = xfrm_state_lookup((xfrm_address_t *)iph-daddr, spi, iph-protocol,AF_INET);??if (x == NULL)???goto drop;// 以下根据SA定义的操作对数据解码??spin_lock(x-lock);??if (unlikely(x-km.state != XFRM_STATE_VALID))???goto drop_unlock;// 检查由SA指定的封装类型是否和函数指定的封装类型相同??if ((x-encap ? x-encap-encap_type : 0) != encap_type)???goto drop_unlock;// SA重放窗口检查??if (x-props.replay_window xfrm_replay_check(x, seq))???goto drop_unlock;// SA生存期检查??if (xfrm_state_check_expire(x))???goto drop_unlock;// type可为esp,ah,ipcomp, ipip等, 对输入数据解密??if (x-type-input(x, skb))???goto drop_unlock;??/* only the first xfrm gets the encap type */??encap_type = 0;// 更新重放窗口??if (x-props.replay_window)???xfrm_replay_advance(x, seq);// 包数,字节数统计??x-curlft.bytes += skb-len;??x-curlft.packets++;??spin_unlock(x-lock);??xfrm_vec[xfrm_nr++] = x;// mode可为通道,传输等模式, 对输入数据解封装??if (x-mode-input(x, skb))???goto drop;// 如果是IPSEC通道模式,将decaps参数置1,否则表示是传输模式??if (x-props
您可能关注的文档
最近下载
- 《GBT 42457-2023工业自动化和控制系统信息安全 产品安全开发生命周期要求》最新解读.pptx VIP
- 有色行业月跟踪:掘金亚欧大陆腹地,中亚金属矿产资源全景解析.docx
- 第2课 使用数字设备 教案 义务教育人教版信息科技三年级全一册.docx VIP
- 叉车安全培训.pptx VIP
- 一种无位置传感器的无刷电机初始位置检测方法.pdf VIP
- 2025年高考英语备战:高中英语(新教材)人教版必修一至选修四单词汇总.docx VIP
- 机电工程质量管理重难点.docx VIP
- 叉车操作安全培训.pptx VIP
- 专题专练 基本不等式(解析版)_1.docx VIP
- 《第1课 寻找信息科技》精品教案.docx VIP
文档评论(0)