OICQ与UDP协议  TCP/IP协议是整个互联网上数据传输的核心,OICQ也是基于TCP/IP协议的UDP协议来实现的。下面来看看 OICQ是怎么样工作的呢?下面我将通过捕捉OICQ2000数据包来进行分析OICQ2000的工作原理:(在WIN2000的安装包里有一个网络监视器,可以用来监视网络上的各个数据包。)  打开WIN2000的网络监视器,然后开始监视网络数据包,然后打开OICQ,登陆后停止捕获数据包。然后就可以进行分析了。下面这个数据包就是利用网络监视器捕捉到的我的OICQ登陆的发送时的第一个数据包:00000000 00 80 C8 EB 06 3B 00 80 C8 EB 25 18 08 00 45 00 .....;....%...E.
00000010 00 78 48 8A 00 00 80 11 BC 3A C0 A8 00 02 CA 60 .xH......:.....`
00000020 AA A5 0F A0 1F 40 00 64 AA 4E 02 04 05 00 15 F7 [email protected]......
00000030 2F 00 BD 77 9D F3 BE 2E 18 9A 86 DA 47 B4 83 41 /..w........G..A
00000040 3A A1 A5 60 89 AD 78 61 D7 EE 6A ED 5C 05 25 EA :..`..xa..j.\.%.
00000050 17 95 B0 5C 3B 69 F1 1C 0F 5D C1 4C 91 FD C3 A8 ...\;i...].L....
00000060 1D 33 9C 86 2A 0F 12 11 EA A8 29 E4 AC 64 D4 D6 .3..*.....)..d..
00000070 A4 96 4D 86 AD C2 19 F1 ED E9 FB 7B 74 99 B7 7A ..M........{t..z
00000080 C3 FB C2 B5 7D 03 ....}. 下面我将解析这个数据包。此个数据包可以分三段来解析:网卡地址段,IP协议段和UDP协议段。1、网卡地址段
00000000 00 80 C8 EB 06 3B 00 80 C8 EB 25 18 08 00
如上可所视00 80 到第一行的确良08 00为网卡地址段。开始的六个字节00 80 C8 EB 06 3B为对方服务器网 络适配器在内存中的地址,00 80 C8 EB 25 18 ,这六个节嘛就代表我这台机子上的调解在内存中的地址。然后的08表示该数据传输协议将用TCP/IP协议传输。00表示下面将用TCP/IP协议中的IP协议传输。2、IP协议段
00000000 45 00 .....;....%...E.
00000010 00 78 48 8A 00 00 80 11 BC 3A C0 A8 00 02 CA 60 .xH......:.....`
00000020 AA A5
如上所示45 00 到AA A5之前的代码都代表了IP段的内容。45代表此IP协议版本是4.0版本,IP关长度是20字节。即从45到AA A5的20个字节。00 是代表IP包的优先级。这里是平常的没有设等级。00 78转换成十进制是120。(倒过来算,0078=120(十进制))表示此数据包的所有数据有120个字节。48 8A 代表IP协议的身份验证, 00 00是IP协议的摘要,80传表IP数据包的生存时间。11这里很重要,表示此IP数据段完成以后将由UPD协议来 代替,由此我们可以得知OICQ消息传播是通过UDP协议来实现的。BC 3A是用来校检数据包的正确性的。C0 A8 00 02代表我的IP地址。用计算器可以转化成192.168.0.2。CA 60 AA A5代表目的IP,即202.96.170.165。此IP 数据段就完成了。余下的就是UDP数据段了。3、UDP数据段
00000020 0F A0 1F 40 00 64 AA 4E 02 04 05 00 15 F7 [email protected]......
00000030 2F 00 BD 77 9D F3 BE 2E 18 9A 86 DA 47 B4 83 41 /..w........G..A
00000040 3A A1 A5 60 89 AD 78 61 D7 EE 6A ED 5C 05 25 EA :..`..xa..j.\.%.
00000050 17 95 B0 5C 3B 69 F1 1C 0F 5D C1 4C 91 FD C3 A8 ...\;i...].L....
00000060 1D 33 9C 86 2A 0F 12 11 EA A8 29 E4 AC 64 D4 D6 .3..*.....)..d..
00000070 A4 96 4D 86 AD C2 19 F1 ED E9 FB 7B 74 99 B7 7A ..M........{t..z
00000080 C3 FB C2 B5 7D 03
  如上可看到此段即为激动人心的UDP数据段了。我们开始分析。0F A0代表我是通过哪个端口进行发送消息的 ,这里可以换算成4000,即我用4000的端口进行消息发送。1F 40代表腾讯的OICQ主机是通过哪个端口接收消息 ,这里可以换算成十进制的8000。即腾讯的OICQ服务器是通过8000端口接收消息的。00 64代表此UDP数据段的 总的字节是100。AA 4E是拿来校检UDP数据段的数据的。余下的数据就是此UDP数据包传送的数据。而前面都是 一些控制协议。下面我们将解析这些数据。02 04 05 00似乎是一些和版本有关的数。相同版本的数据相同的。 15代表登录服务器,F7 2F 00可能是和一些顺序号有关。接下来的三个字节是从高到低放着你的OICQ号。后面的16位字节是随机产生的16个字节的密钥,64字节口令加密内容。 最后03表示UDP数据结束。一般是固定的值。
当OICQ的服务器收到此登录数据包以后通过验证,服务器将反馈给你一个数据包,这里你的OICQ就上线了。
OICQ上线以后,每隔一段时间服务器向你发送一个数据包,上面有你好友的IP和号码,用此来表示你好友在线的情。你同时也反回一个数据包给服务器。里面当然也包括你的IP了。表示你在线。如果你没有反回一个数据包给服务器,那么就表示你不在线了,这时你在你的朋友的OICQ上就不在线了。  OICQ消息传递原理
00000000 00 80 C8 EB 06 3B 00 80 C8 EB 25 18 08 00 45 00 .....;....%...E.
00000010 00 60 1A D9 00 00 80 11 E6 54 C0 A8 00 02 3D A6 .`.......T....=.
00000020 3B 0F 0F A0 0F A0 00 4C 3D 31 00 04 05 9D 62 DF ;......L=1....b.
00000030 15 FF 62 37 81 9B 0B 1E 83 8F F7 DE 1A 67 E6 2B ..b7.........g.+
00000040 35 28 E1 A9 ED B4 01 7C 92 B5 E4 2D E5 69 70 C5 5(.....|...-.ip.
00000050 2E E1 22 FC AF 1C 25 4D E9 7C E8 BA FD F0 8B 87 .."...%M.|......
00000060 17 95 08 88 95 DD A4 1B 8D DC 36 85 0C 8E ..........6... 
  如上所示,也是基于上面的UDP协议。所不同的只是UDP传输的数据不同。根据服务器发送来的给来的数据包知道你好友在线的IP,然后当你向好友传送消息的时候,就是根据好友的IP通过UDP协议向对方发送数据包,对方机子上的OICQ收到的你的数据包的时候就反馈一个数据包给你表示已经收到你的消息,否则的话就一直发送。 等到对方反馈数据包为止。当到一定时候对方一直没有反馈数据包给你的时候,就通过服务中转。中转的原理是这样的,将数据包给腾讯的服务器上,由服务器又将数据包发到对方的机子上,这就是通过服务器中转的工作的原理。00000020 00 04 05 9D 62 DF ;......L=1....b.
00000030 15 FF 62 37 81 9B 0B 1E 83 8F F7 DE 1A 67 E6 2B ..b7.........g.+
00000040 35 28 E1 A9 ED B4 01 7C 92 B5 E4 2D E5 69 70 C5 5(.....|...-.ip.
00000050 2E E1 22 FC AF 1C 25 4D E9 7C E8 BA FD F0 8B 87 .."...%M.|......
00000060 17 95 08 88 95 DD A4 1B 8D DC 36 85 0C 8E ..........6... 
(聊天的时间和内容从数据包的偏移地址2B处开始)  好友间消息传送原理基于UDP协议,和登录的数据包一样。只不过所传输的UDP数据为你和好友聊天的记录。如上面的数据段即为即为谈话时间,内容。这些数据都通过加密的形式在网络中转输。  以上只是对oicq工作的原理进行简单的概述。 如果你要进一步研究就要学习windows的网络编程了。作者会员名:readme