网络协议分析1

经常有人问我关于网络协议分析的问题,在这方面我做的不多,04年时一个朋友请我帮他写一个eterm客户端开发接口,要求分析eterm通讯协议,写一个通讯动态库供他的软件调用,在此以前我从没有分析过别人的软件通讯协议,对我来说有一定的难度,我先找了一些网络数据截获分析软件,比较多,最后定为Ethereal,比较好用。关于Ethereal的使用比较简单大家自行熟悉,通讯协议分析关键要熟悉

1.软件本身的业务(这点很重要)

2.数据在计算机中的存储形式及网络通讯的组织形式。软件本身业务决定着通讯的内容,而我们分析协议就是根据通讯内容找出规律,因此要能够分析清楚协议的组织形式必须熟悉软件通讯内容,当然,软件的业务和通讯内容不一定完全耦合,这是由多方面原因决定的,比如软件的业务你只是从表面去了解的,是一个大概的了解,而通讯内容是软件需要从网络进行传递的数据,是非常完整的,不仅包含了表面业务数据,而其可能包含了业务逻辑数据,甚至包含作者为以前版本兼容或以后版本兼容而设计的协议数据,因此要完全彻底分析清楚协议是一件很困难的事情。对于数据在计算机中的存储大家都比较清楚是按字节存储的,也就是计算机的最小存储单位是字节,对于不同的数据类型所占据存储空间大小不一样,比如char类型是按一个字节存储,word或short int类型是按2个字节存储,int类型是按4个字节存储,无论采用什么数据类型,在计算机中都是按字节存储,在这里我们也无法知道开发者所采用的数据类型,而我们只能根据数据的表现形式来猜测和分析它所占据的字节大小。
3.通讯协议,数据在网络上传输必须明确定义传输协议,协议的定义根据软件的需求来定,一般包括协议头,数据体,协议尾,例如我定义的

协议:
帧头  0x86 1 0
数据域长度 L 2 1
控制码  C 1 3
数据域  Data L 4
校验码  CS 1 L+4
结束符  0x16 1 L+5
,实际中每个人定义的协议可能都有所不同,比如许多没用校验码或结束符,有的甚至没有定义协议,就用文本发送,先发送控制码字符串,然后在发送内容,连数据长度等可能都忽略了,这样虽然也可以处理但是不是很好,因此分析时要对每个包进行对比,找出共性,分析其含义。
4.采用何种SOCKET协议,SOCKET 分为 TCP和UDP两种协议,两种不同的协议包的组织方法有很大的差别,TCP是面向连接的、流式的、可靠的,UDP是面向非连接的、报文式的、非可靠的,流式协议数据粘为一体,为了克服这个问题,一般会给自己的数据加包头,注明长度,当然也可以通过时间间隔等方法来正确处理,UDP虽然数据没用粘为一体,但是包的顺序有可能错乱,数据也可能丢失,因此为了克服这些问题,自己在协议中会额外加一些信息,比如包的顺序号,包的校验码等。TCP分为长连接和短连接,长连接是指连接建立后不主动断开连接,采用心跳包来维持链路,因此,长连接TCP中经常定期或空闲时定时发送心跳包,这类数据本身没有多大实际意义,主要是维持链路不断开,短连接是指连接建立成功后,发送数据,接收回复,然后关闭连接,这种连接对协议要求比较简单.
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值