`
yiyeqinghuasoon
  • 浏览: 643472 次
文章分类
社区版块
存档分类
最新评论

关于TCP/IP数据包结构一文的进一步说明(常见协议数据报结构及TCP三次握手机制)

 
阅读更多

上周发一篇文章:http://blog.csdn.net/prsniper/article/details/6762145

大家反应比较活跃,看来对大家帮助不少,于是有此文。

================================================================

先声明一下,文章被很多人转载,我欢迎大家转载,但是我发现已有一个人转载时,没有保留出处,而且连转载也没写明,竟然挂着“原创”的标题,实在是……

================================================================

这篇文章可能表较长,所以这里写个目录,也可以说是摘要吧:

1.TCP三次握手机制

2.数据包拦截的C++源码(VS6/VC++)

3.TCP通信C源码,包括服务端和客户端

4.常见协议数据包头部的C语言定义(包括在抓包源码中)

5.WinHex分析数据报数据

//请在转载的时候,保留出处,至少声明是转载,尊重他人即尊重自己。限于水平,同时精力有限,不足指出望大家批评指正。

用到一张图片,以便理解:(大家可以阅读http://blog.csdn.net/prsniper/article/details/6762145便于理解)

1.TCP三次握手机制

  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

  完成三次握手,客户端与服务器开始传送数据,简单来说呢,就是:

A告诉B:“我要去你家做客。”,B收到,说:“欢迎”,杀鸡宰羊,开门等候,A得到确认,沐浴更衣,刷牙洗脸,带上筷子,告诉B:“我将要到达。”,双方会面…关于三次握手得到的数据分析,参见下面WinHex部分。

2.数据包拦截的C++源码(VS6/VC++)

VC++源码,可能比较长,大家可以滚动鼠标往下看


编译运行,会将得到的数据包,保存在当前文件夹的TCPIP.LOG中,二进制模式

3.TCP通信C源码,包括服务端和客户端

这是服务端,也就是监听端的C语言源代码


以下是客户端,连接请求端的C语言源码:


4.常见协议数据包头部的C语言定义(包括在抓包源码中)

这里列出TCP,UDP,ICMP,IGMP的数据包头部C语言结构定义,ICMP常见应用是ping命令,IGMP是个危险的协议。也许有人会说,那HTTP协议呢,FTP协议呢,TELNET协议呢?这些都是基于TCP/IP的,也可能使用UDP,但是他们的命令都是ASCII明文,比如HTTP协议的头部包含在TCP包的数据部分

源码到此结束,因为是控制台窗口,数据也保存到文件,运行效果就不截图了。

5.WinHex分析数据报数据

用WinHex打开保存的文件,如下图

TCP/IP数据包结构参见这篇文章:http://blog.csdn.net/prsniper/article/details/6762145,下面的大端模式即高位在低地址(在前面),举个例子IP为127.0.0.1在x86中是这样存储:0x0100007F,而大端模式是:0x7F000001。

首先,这是IP数据包,第一个字节是4位版本+首部长度,如图前四位是4,后四位是5,则这个包裹是IPv4,头长5*32bit=20Byte。第二个字节是服务类型,其值是0x00,第三第四字节是包裹总长,值为大端模式0x0034=52,可以据此计算包裹为红色部分。第五第六字节为重组标识,值为大端模式0x4986=18822。第七第八字节为3位标识和13位段偏移量,这两个字节(0x4000)的二进制值为01000000,可以算出该数据报不允许分段,段偏移量为0。第9字节为生存时间TTL=0x40=64,第十字节为协议代码,值为0x06=6(TCP)第11,12字节为头部校验和,值为0x6F77。下面为双方IP地址,0xC0A80164是大端模式为192.168.1.100,0xC0A80002一样,为192.168.0.2。也就是从192.168.1.100发向192.168.0.2(我给路由分了几个网段,呵呵)。因为头部长度已经标志为5,即没有选项,那么IP包头部到此结束。

然后,TCP头部部分,前面两个短整型是始末端口,为大端模式0x06F9=1785,请求连接的话,本地端口是随机的;目的端口0x07C3=1987,这个就是服务端的监听端口。下来是数据序号0x73F5BBBE=1945484222,因为是手提,一直不关机,合上待机就拿到办公室,所以已经累计发了很多数据了;确认序号0x00000000,说明两者还没有开始传输数据。然后看偏移,值为80,前四位是8=1000,也就是数据距离包头8*32=32Byte(32正好是这个字节到IP包头的偏移?!),后四位保留为0。下一个字节为0x02=00000010,前两位保留为0,后六位分别对应:UAPRSF,得出SYN=1,这是一个请求或者接受请求报文!窗口字段0x4000=16384,这个不管它。包校验和0x6DF1,紧急指针0x0000,因为URG位已经为0,即使紧急指针不为0也无效。

后面的数据究竟是什么意义,我还不太清楚,不过对TCP三次握手的说明,应该没有影响了。

下面看第二个包包,类似的我就不说了,它是从192.168.0.2发向192.168.1.100的,数据序号0x73F5BBBF,正好是请求包的数据序号+1;确认序号0xD4CF3750;标志0x10=00010000,所以ACK=1,说明确认号有效,这是服务端给请求方发的“同意连接”确认包。

再下面第三个包是绿色部分,一样道理分析之,我这里就不写这么多了。时间有限,偷懒一下。另一方面来说,我认为我表达的不是很通俗。这里有价值之处在于C/C++的源代码,大家对fnAnalyse()函数稍作修改就可以做全自动的协议分析,这才是本文的核心,也是它的价值所在。

可能是使用了代码的原因,不同形式的语言或者说表达方式很难融合到一起,熟悉C/C++的朋友(Java跟C++很像,简直就是C++生的)就好理解多了。

好啦,就这么多吧,下面发下使用编译出来的控制台的方法(可以直接双击运行,或者在VS6 IDE运行),我用的是命令行:


我放在这个目录,呵呵。大家编译时候不要忘记更改IP哦,不然又有人来这里发牢骚说源码不对了……

虎胆游侠

2011-09-15 15:25:00 于深圳

分享到:
评论

相关推荐

    smartsniff TCP/IP 数据包捕获软件

    smartsniffTCP/IP 数据包捕获软件

    TCP/IP协议三次握手

    三次握手,TCP/IP协议三次握手,TCP/IP协议三次握手

    tcp/ip 数据包获工具

    tcp/ip 数据包获工具 可以检测输入输出数据包的IP地址!

    《TCP/IP详解 卷2:实现》PDF:part2

    《TCP/IP详解 卷2:实现》完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15 000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机...

    TCP/IP实验 数据包分析 实验数据

    TCP/IP 实验 数据包分析 实验数据 TCP/IP 实验 数据包分析 实验数据 TCP/IP 实验 数据包分析 实验数据

    实训(2)Windows环境下TCP/IP协议的配置,TCP/IP诊断.pdf

    实训(2)Windows环境下TCP/IP协议的配置,TCP/IP诊断.pdf

    TCP/IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议

    《TCP/IP详解(卷3):TCP事务协议、HTTP、NNTP和UNIX域协议》适用于希望理解TCP/IP如何工作的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。《TCP/IP详解(卷3):TCP事务协议、HTTP、NNTP...

    《TCP/IP详解,卷1:协议》

    第30章 其他的TCP/IP应用程序 363 附录A tcpdump程序 371 附录B 计算机时钟 376 附录C sock程序 378 附录D 部分习题的解答 381 附录E 配置选项 395 附录F 可以免费获得的源代码 406 参考文献 409 缩略语 420

    Windows环境下TCP/IP协议的配置,TCP/IP诊断

    (1)懂得在Windows系统中进行网络配置; (2)掌握如何在Windows系统中进行TCP/IP协议配置。 (3)熟悉使用ping命令工具来进行测试; (4)熟悉利用ipconfig工具进行测试

    TCP/IP协议详解卷二:实现

    《TCP/IP详解·卷2:实现》完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。《TCP/IP详解·卷2:实现》不仅说明了插口API和...

    Linux TCP/IP 架构、设计与实现[TCP/IP Architecture, Design and Implementation in Linux] 1/5

    TCP/IP Architecture, Design and Implementation in Linux 1/5 For All: [Part 1/5] http://download.csdn.net/source/1345609 [Part 2/5] http://download.csdn.net/source/1345649 [Part 3/5] ...

    TCP/IP网络与协议

    本书内容十分丰富,几乎涵盖了有关TCP/IP的各个方面,包括开放式通信模型、TCP/IP通信模型、IP网络中的命名和寻址机制、地址解析及反向地址解析协议、DNS域字服务器、WINS、地址发现协议、IPv6、IP网络中的路由协议...

    TCP/IP协议栈TCP/IP协议栈

    OSI七层参考模型概述 数据封装和拆封过程 TCP/IP协议栈 常见的TCP/IP协议

    TCP/IP进行网际互联 卷1 原理、协议与结构和TCP-IP详解卷一:协议

    两本合集。里面可能含有一些自己pdf标记,自行删除即可。 TCP/IP协议栈 TCP-IP详解卷一:协议 TCP IP进行网际互联 卷1 原理、协议与结构

    tcp/ip详解pdf版

    《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输...

    TCP/IP协议族

    《TCP/IP协议族》由编程与网络权威专家BehrouzA.Forouzan撰写,是一本关于TCP/IP协议族的经典教材《TCP/IP协议族》图文并茂,重点概念突出。除了讲解一些基本概念和底层技术外,还介绍了TCP/IP协议族中的核心协议IP...

    TCP/IP高效编程(Effective TCP/IP Programming)

    《tcp/ip高效编程:改善网络程序的44个技巧》是tcp/ip 领域的经典著作,对tcp/ip 网络编程中存在的各种问题进行了全面解析,旨在帮助读者深入透彻地理解tcp/ip 网络编程。本书组织方式比较特别,正文部分包括4 章,将...

    TCP/IP的三次握手建立连接(带图释)

    Internet是使用TCP/IP协议簇。互联网发展之所以迅猛,恐怕得益于TCP/IP协议簇吧。Internet发展到今天,TCP/IP协议也显示出它的缺憾之处。为了保障信息安全,大量新的安全协议加入到TCP/IP协议大家庭里。无论是技术...

Global site tag (gtag.js) - Google Analytics