重构skb包中的检验和的计算
来源:互联网 发布:淘宝开店铺要钱吗 编辑:程序博客网 时间:2024/05/29 12:33
作者: 和linux相关
简介:这是重构skb包中的检验和的计算的详细页面,介绍了和linux,有关的知识、技巧、经验,和一些linux源码等。
在之前看过那篇对于sk_buff结构介绍的文章后,对skb包中各字段有了比较深的认识吧,这两天又看了如何构造skb包的两个帖子,也在虚拟机上实现了一把,但在这里不讨论实现的具体流程,只说一下在自己构造skb包时各个检验和字段的计算。
其中主要涉及三个函数:
skb_checksum(const struct sk_buff *skb, int offset,
int len, __wsum csum)
四个参数解释:
skb:不用说了
offset:IP Header长度
len:IP payload长度
csum:0,计算校验和时为0
int len, __wsum csum)
四个参数解释:
skb:不用说了
offset:IP Header长度
len:IP payload长度
csum:0,计算校验和时为0
ip_fast_csum(const void *iph, unsigned int ihl)
iph: ip头部首地址
ihl: ip头部长度/4,也即是iph->ihl字段的值
csum_tcpudp_magic(__be32 saddr, __be32 daddr,
unsigned short len,
unsigned short proto,
__wsum sum)
saddr:源IP
daddr:目的IP
proto:传输协议
sum:IP payload校验和,在使用中我是用的skb->csum字段的值,在网上也见到一种是通过csum_partial((char *)udph,udp_len,0),感觉上应该跟第一种计算方式是等价的,有待验证。
第一个是计算TCP、UDP payload校验和,也就是skb->csum字段,第二个是计算ip头部检验和,iph->check,后者是计算整个IP payload校验和,也就是tcp->check。
在构造流程中的计算如下:
skb->csum = skb_checksum()
iph->check = ip_fast_csum()
udph->check = csum_tcpudp_magic(
iph->check = ip_fast_csum()
udph->check = csum_tcpudp_magic(
两个注意的问题:
因为校验和不涉及链路层,如果skb是直接从网卡驱动取出来的话,就需要把skb->data设置为iph
在调用skb_checksum以前必须设置udph->check为0。这是协议规定的
因为校验和不涉及链路层,如果skb是直接从网卡驱动取出来的话,就需要把skb->data设置为iph
在调用skb_checksum以前必须设置udph->check为0。这是协议规定的
关于如何重新构造skb包的文档地址如下:
http://linux.chinaunix.net/bbs/viewthread.php?tid=1152885&extra=page%3D3%26amp%3Bfilter%3Ddigest
http://blog.chinaunix.net/u2/73067/showart_2254716.html
- 重构skb包中的检验和的计算
- netfilter实现内核重构skb来发送udp包
- 修改以及重构SKB
- 修改以及重构SKB
- linux 内核开发-重构skb
- 教你修改以及重构skb
- 教你修改以及重构skb
- 教你修改以及重构skb
- skb_put(skb,len)和skb_push(skb,len)的区别
- 计算检验和
- 首部检验和计算
- IP、TCP、UDP、ICMP、IGMP包首部中的检验和都是针对哪部分的?
- skb_reserve(skb,2)中的2的意义
- 分析skb和网卡驱动的关系
- 分析skb和网卡驱动的关系
- 分析skb和网卡驱动的关系
- skb的两个函数pskb_copy和skb_copy
- 检验和与CRC计算
- Win7下的Mac主题
- Android开发注意点
- MDK编译2440
- PHP中文件读写操作
- PDU编码规则
- 重构skb包中的检验和的计算
- TortoiseSVN使用简介
- MessageBox在任务栏上有显示
- 用户 'NT AUTHORITY/NETWORK SERVICE' 登录失败
- android ListView的美化
- DevCon.exe使用
- sequential list(template,virtual)
- Hibernate One-To-One 关联
- 批处理设置,启动和停止服务,批处理命令集,批量执行dos命令