`
ldb19890624
  • 浏览: 243491 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

操作QQWary.dat数据文件的类

 
阅读更多

操作QQWary.dat数据文件的类

摘要:QQwry是目前使用很广泛的IP地址数据库,本文研究了QQwry数据文件的格式,编写了一个读取数据文件,查询IP地址信息的类,并附带完整的演示例子的VC代码。

关键字:IP地址查询,QQwry


2002年末的时候,我想给我的一个软件添加ip地址查询功能,当时很多QQ版本都支持显示ip地址信息,记得这种功能最早有一个名为“追捕”的软件就实现了,不过QQ使用的是一种新的ip地址数据库组织格式,相对于老的文本格式的数据文件,新的数据文件格式更加紧凑,查询效率更高。经过一番研究之后,我决定在我的程序中实现这个功能,于是我给cnss发了封邮件,希望得到QQwry.dat文件的格式,但是没有答复(汗~~~~)。没办法,只好来硬的(Don't warry,我没有采用暴力威胁、寄邮包等恐怖方式),于是拿出IDAPro,咔咔咔,几十秒钟之后ipsearch.dll的汇编代码就出现在我的眼前。直接找CreateFile的调用,果然只有一处针对QQway.dat的调用,剩下的就是分析代码了...此处省去若干汉字和英文字符以及空格、标点符号......

新的QQwry数据库使用32位的internet IP地址代替了点分形式的IP地址(字符串),文件的前半部分存放IP地址区间,所有的IP地址划分成从大到小的区间(地址段),所有的地址描述信息在文件的后半部分。查找的过程就是按照区间从大到小的区间确定过程,关于QQwry数据文件的格式我分析地并不彻底,也就是很多地方只知道那样使用却不知道为什么。分析反汇编出来的代码并不是容易的事(因为我很菜嘛),我当时只是根据汇编代码的流程用C++重写了查询代码。演示代码中IpSearch工程中的GetDispString函数就是直接从汇编代码翻译出来的,可以看到很多变量名都是IDAPro分析出来的内存地址或寄存器名。代码看起来很丑陋,但是用起来还不错,支持当前所有版本的QQwry.dat(废话,人家格式没变嘛)。不过后来发生的事情让我很吐血,因为2004年的时候我从网上看到了下面两篇Blog:

http://blog.csdn.net/taft 《QQwry格式》
http://blog.csdn.net/cnss 《关于QQWry格式》

如果你想更多的了解QQwry文件的格式就可以看看这两篇Blog。

后来研究生毕业了,我将软件的代码卖给了别人,整个软件模块设计的很不错,只是那个GetDispString函数让我觉得拿不出手,于是花了点时间将其改写了,并封装成一个适用于Windows平台的类,也就是Win32工程中的CIpInfo类,这个类的使用非常简单:

CIpInfo info;
if(info.LoadInfoFile(_T("..//DataFile//QQwry.dat")))
{
TCHAR szBuf[128];
info.GetIpInfo(_T("202.114.6.45"),szBuf,128);
::MessageBox(::GetFocus(),szBuf,_T("IpInfo class"),MB_OK);
}

希望这些代码对大家有用。

下载代码http://blog.csdn.net/images/blog_csdn_net/orbit/qqwry.zip
分享到:
评论

相关推荐

    大疆.DAT数据转换读取工具

    在这个过程中,用户可以学习如何导入.DAT文件,浏览和分析其中的数据,甚至可能包括导出数据为CSV、Excel或其他格式,以便于进一步的分析和处理。 总结来说,"大疆.DAT数据转换读取工具"是一个专为处理大疆无人机...

    system.new.dat.br和system.new.dat解包工具

    1. 下载并运行"解包dat.cmd",这会针对 "system.new.dat" 文件执行解包操作。 2. 对于 "system.new.dat.br" 文件,使用"解包br.cmd" 工具进行解压。 3. 这两个解包过程完成后,原始的系统文件会被提取出来,可能包含...

    C#生成.dat文件

    例如,可以使用`FileStream`类创建一个新的.dat文件,然后通过`BinaryWriter`或`StreamWriter`写入数据。以下是一个基本示例: ```csharp using System.IO; // 创建一个.dat文件 string filePath = "data.dat"; ...

    Spark统计电影评分数据:movies.dat,retings.dat,users.dat

    然后,可以通过列名来访问和操作数据,例如,筛选出评分高于4分的电影,或者按用户年龄和性别分组统计平均评分。 此外,Spark还提供了机器学习库MLlib,可以用来构建推荐系统。基于这些数据,我们可以采用协同过滤...

    system.new.dat与system.new.dat.br互转工具

    2. 在执行转换之前,备份原有的 `system.new.dat` 或 `system.new.dat.br` 文件,以防止意外情况导致数据丢失。 3. 在非Windows系统上使用该工具可能需要安装特定的依赖库,例如在Linux上可能需要安装`libbrotli`...

    kad协议里的nodes.dat文件抓包详解

    nodes.dat文件是kad网络中存储节点信息的数据文件,它包含了一系列节点的标识符(ID)和它们的网络地址(IP地址和端口号)。在本篇详解中,我们将深入探讨如何对kad协议中的nodes.dat文件进行抓包分析,以及从这些...

    NTUSER.DAT注册表文件

    NTUSER.DAT注册表文件

    tzdb.dat JRE8

    tzdb.dat,全称Time Zone Database,是Java用来存储全球时区信息的数据文件。这个文件包含了世界各地区的时间区定义、夏令时规则等详细信息,是Java进行日期和时间处理的核心组件。 在Java编程中,日期和时间的处理...

    微信dat图片处理_微信dat_微信.dat图片文件处理成png_

    微信的聊天记录中,部分图片是以`.dat`格式存储的,这种格式的文件实际上是微信为了保护用户隐私和数据安全而采用的一种加密或打包方式。在默认情况下,这些`.dat`文件不能直接用常见的图像查看器打开。不过,通过...

    matlab提取dat文件的特定字段和数据-main.dat

    matlab提取dat文件的特定字段和数据-main.dat dat文件为abaqus计算结果文件。我想利用matlab提取出特定字段,特定点的位移数值。 首先我的mian.dat文件里面所要提取的位移数值内容为第一张图片,第二张和第三张...

    用于操作 X-Plane的apt.dat文件和与 X-Plane Scenery Gateway API接口的Python工具

    类本身:X-Plane 机场数据文件的AptDat解析器(可能包含超过 35,000 个机场);Airport对象的集合 类:代表文件中的Airport单个机场apt.dat。 gateway模块:用于与 X-Plane 风景网关交互以获取有关可用机场的信息,...

    LineageOS(system.new.dat.br)镜像解包.zip

    在更新或自定义设备的系统时,我们可能会遇到`system.new.dat.br`这样的文件,它是LineageOS系统镜像的一个部分。这个文件通常包含系统分区的数据,如应用程序、系统设置和库等。 在进行系统解包时,`system.new....

    ARCGIS10.3中加载ENVI(.dat)数据

    #### 步骤二:定位ENVI (.dat)数据文件 1. **浏览至数据存储位置**:在目录面板中,通过浏览找到存放ENVI (.dat)数据的文件夹。通常这些数据会被保存在一个特定的位置,如项目的根目录下或特定的数据文件夹内。 2. *...

    system.new.dat解包打包

    1. **备份**:在操作前,确保对原始`system.new.dat`文件进行备份,以防出现错误时能恢复到初始状态。 2. **准备工具**:使用特定的工具,如`system.new.dat`的解包工具。在这个例子中,我们提到的“7.1.1 tools ...

    qqwry.dat纯真ip数据库和自动更新脚本

    纯真IP数据库文件,dat数据非exe安装包,每天会扫描两次(17:55和23:55),当发现更新时也可以选择手动运行来获得文件。 目录说明 1、qqwry.dat 为最新数据直链(即下即用),每次更新会覆盖之前的内容,如果想要...

    GeoIP.dat.gz + GeoLiteCity.dat.gz 20200206.zip

    GeoIP.dat.gz文件是一个经过gzip压缩的数据文件,解压后可能为二进制格式,需要通过MaxMind的API或者第三方库来读取和解析。 GeoLiteCity 数据库则更进一步,提供了比GeoIP更详细的地理位置信息,包括经纬度坐标、...

    SYSTEM.NEW.DAT解包工具(可解5.0-8.0系统)

    在Android系统中,`SYSTEM.NEW.DAT`是一个重要的系统文件,它包含了系统的各种核心组件、设置和应用程序。这个文件通常是经过打包处理的,以便于在设备上高效地存储和分发。本文将深入探讨`SYSTEM.NEW.DAT`的结构、...

    GeoIPISP.dat文件(压缩包)

    综上所述,GeoIPISP.dat文件是网络服务中不可或缺的一部分,它为网络管理和数据分析提供了强大的功能。正确地使用和理解这个数据库可以帮助我们优化服务,提高效率,同时也要注意保护用户隐私。

    .turing.dat

    .turing.dat

    system.new.dat与system.new.dat.br一键互相转换工具

    支持system.new.dat与system.new.dat.br互相转换功能,同样也支持vendor.new.dat与vendor.new.dat.br互相转换,操作十分简单,只需一键就能转换。也支持img与dat一键互换,安卓全版本适配。

Global site tag (gtag.js) - Google Analytics