注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小可尼の博客

Linux后端的技术窝窝

 
 
 

日志

 
 

数据包伪造:检验和CheckSum的生成  

2013-12-25 15:10:14|  分类: linux内核开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

出处:http://blog.sina.com.cn/s/blog_648d306d0100scre.html

 

在网络中数据都按照一定的格式封装成一个个数据包,然后通过接口硬件发送到网络上去,通过使用一些网络分析软件(比如:Iris),可以得到这些网络上传输的原始的数据包。然后可以查看这些数据包的信息,很多原始数据的存储方式都是以明文的形式传输的,没有进行任何的加密操作,比如ftp登入的用户名和密码等,这不在本文的说明范围。那么既然这些数据是按照一定的格式被封装成数据包的,那么我们能不能人工的伪造一个数据包,然后通过软件发送到网络上去呢,答案是肯定的。

很多资料都描述了各种数据包的结构,请读者自行参考相关书籍(推荐: 《TCP/IP详解》),在这里就不再复述了,本文主要说明如何生成一个IPv4 Header的检验和CheckSum。检验和的存在不是为了保证数据的加密传送,而是为了保证数据传输的不变性。所以,当我们更改一个IPv4 Header的内容的时候,比如IP地址等,它的检验和就要进行重新的计算,否则这些伪造的数据包传送到目的节点的时候由于再次计算的检验和不能和源检验和保持一致,目的节点就会把这些认为传输错误的数据包丢弃,那么这些伪造的数据包就没有任何意义了。

用一句话概括检验和的生成就是“Header部分每16位取反求和”。我举一个实际的例子:如果一个IPv4 Header不包含长度可变的IP附加选项,那么它的长度正好是20个字节。

请看:


序号

内容

描述

 

 

1

45

版本4,Header长20个字节

2

00

Type Of Service

 

3-4

00 30

Total Length

 

5-6

0C 9D

Identification:3229

 

7

40

Flags

 

 

8

00

Fragment Offset:0

 

9

80

Time to live:128hops

 

10

06

Protocol:6 TCP

 

11-12

30 AB

Checksum:0x30AB(Correct)

13-16

C0 A8 1E 28

发送数据包的IP

17-20

C0 A8 1E 07

接受数据包的IPIP


图1典型的IPv4 Header结构

       如上图所示,其中第11,12字节记录的就是检验和0x30AB,如果要计算上面的这个IPv4 Header的检验和就要先把11,12字节置为0x0000,然后每16位也就是每2个字节取反,得到下面的结果:

      

原始数据

取反结果

0x4500

47871

0x0030

65487

0x0C9D

62306

0x4000

49151

0x8006

32761

0x0000(CheckSum)

65535

0xC0A8

16215

0x1E28

57815

0xC0A8

16215

0x1E07

57848

总计:

471204

图2 取反结果

       由图2得到每16位的取反求和为471204,转换为16进制就是0x0730A4,显然这和原始的检验和30AB有一定的差距,所以还要再进行一次运算,把3个字节转换为2个字节,把高字节的07加到低字节A4上的结果就是AB,好了到现在我们总算计算出了这个IPv4 Header的检验和是0x30AB。

       在进行取反运算的时候,我们可使用和0xFFFF进行^运算的方法得到取反后的整数值。

  评论这张
 
阅读(214)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018