找回密码
 注-册

QQ登录

只需一步,快速开始

查看: 1975|回复: 1

抓包取得CS服务器状态方法

[复制链接]
Leya 发表于 2008-9-13 01:05:35 | 显示全部楼层 |阅读模式
要取得CS服务器的状态信息,首先要发送一个请求给服务器,服务器收到请求后便送回请求所需的数据.编写程序来实现数据包的收发,我用易语言和DELPHI编写程序来实现。除此之外还需要两个辅助工具来方便调试 – wpe pro 1.0 turns4 wpe pro 是一个针对某个程序抓包的软件,可以用它来监视hlds所收发的数据包,然后以16进制方式显示所截得的数据包内容。turns4 是一个ASCII及进制转换工具,可以利用它将wpe所截得的16进制数据进行转换查询。


现在介绍怎么发送请求数据包:
1. 请求返回基本状态信息,也就是当前地图/服务器名称/ip地址/在线人数/最大人数和游戏类型的数据包.该请求数据包25字节。
1) 使用wpe pro 来模拟发送请求包,基本信息请求数据包内容如下:
十六进制:FF FF FF FF 54 53 6F 75 72 63 65 20 45 6E 67 69 6E 65 20 51 75 65 72 79
普通字符串:”????TSource Engine Query

要注意的是TSource Engine Query前空白的4个位置就是FF FF FF FF所转出来的ASCII字符.他们可以用turns4互相转换。
2) 接收到的基本信息数据包,例子:
FF FF FF FF 6D 31 32 37 2E 30 2E 30 2E 31 3A 32 37 30 31 35 00 E3 80 96 E8 87 AA E6 B8 B8 E4 BA BA E6 B7 B7 E6 88 B0 E6 9C 8D E5 8B 99 E5 B0 88 E7 94 A8 E8 AD 8F E3 80 97 E3 80 90 E5 BB A3 E8 A5 BF E5 B2 91 E6 BA AA E3 80 91 5B 43 2D 44 5D 00 64 65 5F 64 75 73 74 32 00 63 73 74 72 69 6B 65 00 43 6F 75 6E 74 65 72 2D 53 74 72 69 6B 65 00 00 A8 2F 64 77 00 01 77 77 77 2E 64 63 6F 6F 2E 63 6F 6D 00 00 00 01 00 00 00 00 9E F7 0A 00 01 00 00
返回包头是4个字节FF FF FF FF .数据包的段数都是固定的,00分一个段。
第一段,6D表示m字母,16进制转字符可直接得到该字符,这个值是固定的。可以用来 判断时基本信息数据包。
第二段,31 32 37 2E 30 2E 30 2E 31 3A 32 37 30 31 35表示IP地址 ,也是用16转字符串, 转换过来的内容是127.0.0.1:27015
第三段,E3 80 96 E8 87 AA E6。。。。如果是CS1.6的他的编码是UTF8Unicode字符,这个想还原字符就有些麻烦了,首先从16进制转为UTF8格式,然后转为数值,
最后转ASCII,还原后的字符串为:〖自游人混戰服務專用譏〗【廣西岑溪】[C-D]

第四段64 65 5F 64 75 73 74 32 表示当前地图,de_dust216进制转字符可直接得到该字符.
第五段,63 73 74 72 69 6B 65 表示游戏类型,cstrike 16进制转字符可直接得到该字符.
第六段,43 6F 75 6E 74 65 72 2D 53 74 72 69 6B 65 这个同样是游戏类型 Counter-Strike16进制转字符可直接得到该字符.
第七段,00 A8 表示当前游戏人数和最大游戏人数,00是在线人数0A8是最大游戏人数168,所以得到人数信息0/168

2. 请求返回服务器配置信息。
1) 使用wpe pro 来模拟发送请求包,基本信息请求数据包内容如下:
十六进制:FF FF FF FF 56 FF FF FF FF FF FF FF FF 56
普通字符串:” ????V????”
2) 接收到的配置信息数据包,例子:
FE FF FF FF 06 00 00 00 02 FF FF FF FF 45 58 00 5F 74 75 74 6F 72 5F 62 6F 6D…..
返回包头是4个字节FF FF FF FF .数据包的段数都是固定的,00分一个段。这是一个大 1400字节的数据包很大,所以会拆成两个包发送给请求端。
45 58是固定的,可以用它来判断为配置信息数据包。
查找该包 61 6D 78 5F 74 69 6D 65 6C 65 66 74amx_timeleft可以得到剩余游戏时间。
查找该包 6D 70 5F 74 69 6D 65 6C 69 6D 69 74mp_timelimit 可以得到总时间。
查找该包 61 6D 78 5F 6E 65 78 74 6D 61 70amx_nextmap 可以得到下张地图。
该包有服务的所有配置信息。


3. 请求返回玩家列表,返回玩家的小序号,名称,杀敌数和游戏时间。
1) 使用wpe pro 来模拟发送请求包,基本信息请求数据包内容如下:
十六进制:FF FF FF FF 55 FF FF FF FF FF FF FF FF 55
普通字符串:” ????U????”
2) 接收到的玩家列表数据包,我只取了一个玩家的信息作例子,其它都相同:
FF FF FF FF 44 01 01 5A 2E 59 2E 52 20 7C 20 42 61 6E 43 68 65 6E 00 06 00 00 00 38 7A A7 41

44是固定的可以用它判断是否是玩家列表数据包,从01开始到38 7A A7 41为一 玩家的信息,有用信息可分为4段。
01 表示当前列表的人数。
第一段,01表示玩家的序号。
第二段,5A 2E 59 2E 52 20 7C 20 42 61 6E 43 68 65 6E,为玩家名字Z.Y.R | BanChen, 可以直接16转字符串,不过有些服务器有中文玩家名,所以用UTF8 ASCII好些.
第三段,06 为玩家杀敌数6
第四段,38 7A A7 41 为玩家的已玩时间,这个计算额为麻烦。首先要将它转为 小数型,再取整数,最后再计算出hour\minute\sec .详细算法不写出来了。

易语言:
http://bbs.cga.com.cn/UploadFile ... 873111422191221.rar
易语言.jpg

delphi:
http://bbs.cga.com.cn/UploadFile ... 873111371744224.rar
delphi.jpg

易语言.rar

1.21 MB, 下载次数: 269

delphi.rar

437.1 KB, 下载次数: 200

CS服务器状态模块.rar

6.3 KB, 下载次数: 174

易语言

自游人CS登陆器源码.rar

15.58 KB, 下载次数: 233

回复

使用道具 举报

Jack 发表于 2008-9-13 03:52:19 | 显示全部楼层
完美!~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注-册

本版积分规则

Archiver|手机版|小黑屋|DoDVip ( 桂ICP备14000730号 )

GMT+8, 2024-5-8 09:48 , Processed in 0.060038 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表