/*
菜鸟,若有疏漏、不足或者错误,肯定指教。直接回复或联系邮箱(sunnysab@yeah.net)。
文章供学习和交流使用,转载可不注明原地址。
*/
首先,配置环境。软件 极域电子教室V6 2007 不用说的(下载地址),拦包工具我用的是 科来网络分析系统 2010 技术交流版 (可以免费申请到序列号的,序列号1年过期)。建议安装一个虚拟机,以便进行试验。个人用的是 Virtual Box 。另外,在安装时把虚拟网卡也弄上,关于这个实验都在该虚拟网卡上进行,可以排除干扰。还要注意把极域电子教室的ip都设置在虚拟网卡的ip上。并且定下哪个ip装教师端,哪个ip是学生端,不要今天在虚拟机里用教师端,明天在虚拟机内运行学生端。另外还要注意的是,有时候可以只开教师端不开学生端。
拦包,发现:极域电子教室教师端向 224.40.40.40:4804(组播地址) 发送一些数据包,内容如下:
十六进制:4E 43 4E 41 00 00 0E 00 C0 A8 02 01 01 00 00 00 54 65 61 63 68 65 72 00
明 文:N C N A . . . 括 . . . T e a c h e r .
数据包每次内容不同,而且极域电子教室还向另外一个地址(这个地址每次都不同,但是 225.2.x.x )发送一些包,经过研究,学生端不对 224.40.40.40 发送消息,且这个地址每次都是固定的,所以这个地址可能是极域电子教室说明自己身份的地址。而 225.2.x.x 是上课时的控制地址)。对这个数据包进行分析:
把域电子教室关闭再开,几次数据包都不同,225.2.x.x 也不同。在教师端登录时,试着切换几次参数(教师名、班级)。得出了极域电子教室教师端向 224.40.40.40:4804 发送的数据包的含义(不应该用结构表示,毕竟结构的大小是固定的,而数据包大小不固定(依教师名而定),理解即可~):
struct packet_1
{
char Flag[4]; //"NCNA"
char The_Second_Multicast_IP[4]; //225.2.x.x的地址
char Teacher_IP[4]; //教师端ip
WORD Class; //班级
WORD NULLs[3]; //3个空字节
char TeacherName[ ]; //教师端登录时的教师名
char TheEnd; //'\0',也可当做TeacherName后面系统附加的'\0'
}
有一点必须说明,就是 The_Second_Multicast_IP[4]; ,这四个字节折磨了我一段时间,后来是多次拦包得出:
实际第二个组播的ip: 225.2.76.1 在数据包中十六进制的表示:4B 00 0E 00
实际第二个组播的ip: 225.2.55.1 在数据包中十六进制的表示:36 00 0E 00
观察这两组包,重复的: 225.2.x.x , 0E 00 不看。得出:
76.1 -> 4b 00
55.1 -> 36 00
我是无意发现的,76 - 1 = 4b(16进制) = 75,55 - 1 = 36(16进制) = 54 。
可以这样理解这4个字节(分别表示为 W X Y Z):
真实的第二个组播的地址 = (Y+1)^2 . Z+2 . W+1 . X+1
解析的过程不是很详细,但是毕竟包含着一些经验,不过毕竟有些是无法表达出来的,只能靠着自己摸索、实践。三天五天分析不出来这个协议是很正常的。不要灰心!