如何有效地学习网络协议?作者认为,抓包分析是最有效的。让我们以RFB为例,与您讨论学习方法。
VNC(虚拟网络计算)系统由客户端、服务器和协议组成。VNC服务器的目的是共享其运行机器的屏幕。服务器被动地允许客户端控制它。VNC客户端(或查看器)观察和控制服务器,并与服务器交互。VNC使用RFB(";远程帧缓冲区";)该协议将服务器的原始图像传输到客户端(x和Y位置的方形晶格数据),客户端将事件消息传输到服务器。默认情况下,vnc使用TCP端口5900到5906,而Javavnc客户端使用5800到5806。服务器可以通过端口5900上的“监听模式”连接客户端。VNC与操作系统无关,因此可以跨平台使用。例如,windows可以连接到Linux计算机,反之亦然。只要客户机上没有安装Java程序,它甚至可以在没有Java支持的计算机上使用。
让我们使用Wireshark协议分析来学习RFB,如下图所示
图一
使用Wireshark软件的导出功能导入Excel文件并进行筛选,如下图所示
图二
根据IETFrfc6143文件(https://tools.ietf.org/pdf/rfc6143.pdf)分析学习协议的知识点。在本例中,服务器的IP地址为183.56.212.51,客户端的IP地址为192.168.0.6。由于张德华需要建立三次TCP握手(281和282),张德华需要建立三次TCP握手。
第一:握手信息1、确定RFB的协议版本握手当RFB的客户端和服务器首次连接时,它们交换序列以确定协议版本。服务器首先向客户端发送协议版本信息。这允许客户端知道服务器支持的版本号。然后,客户端回复类似的消息,给出协议的版本号(图一的第284286号)。
2、安全握手服务器列出了它支持的安全类型
客户回复
因为安全类型=2,所以输入VNC身份验证。首先,服务器发送一个随机的16字节挑战,
客户端使用用户提供的密码,并使用DES加密对服务器进行身份验证(16字节)。
3、安全结果握手服务器发送一个4字节的数据包,通知客户端安全握手是否成功。所有0=正常,所有1=失败。
客户端发送一条clientinit消息,shareflag=false(0),表示独占访问。
2、服务器初始化(serverinit)在收到clientinit消息后,服务器将发送serverinit信息。这会告诉客户机服务器帧缓冲区的宽度和高度、像素格式以及桌面的名称,如下图所示。
下表显示了每个字段的说明。从上图可以看出,namelength=43,因此消息长度=2+2+16+4+43=67字节。
下表中指定了服务器像素格式。具体含义参见rfc6143文件7.4像素格式数据结构。
第三:C2S消息(客户端到服务器消息)下表定义了C2S消息类型
在本例中,捕获了四种类型的包,如下所示。
第四:S2C消息(服务器到客户端消息)S2C消息类型定义如下表所示
在这种情况下,只捕获更新包
最新评论