日期:2014-05-16  浏览次数:20632 次

纯真ip数据库(QQWry.Dat)查询源代码C语言版

整理硬盘看到以前写的纯真ip数据库(QQWry.Dat)查询代码,觉得没有什么价值了,当时学习C语言的文件操作时自己的一个练习而已,现在公布出来希望对学习C语言的人有所参考价值.
纯真ip数据库(QQWry.Dat)是当年很多修改版QQ使用的显示对方所在地的ip数据库,该数据库由纯真维护着,ip地址所在地是许多网友提交才发展那么强大的,参考lumaqq的一些资料会有帮助:

纯真ip地址查询java代码
lumaqq文档整理

好了不多说了代码如下:
MakeFile

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
CC????? = gcc.exe
BIN???? = qqwry.exe
WINDRES = windres.exe
RES???? = resource.o
OBJ???? = main.o qqwry.o localIp.o $(RES)
# D:\MinGW\lib\libwsock32.a
LIBS =? -L"D:/MinGW/lib"-lwsock32
RM????? = del -f
?
$(BIN): $(OBJ)
????$(CC) -o $(BIN) $(OBJ) $(RES) $(LIBS)
?
main.o: main.h qqwry.h
qqwry.o: qqwry.h localIp.h
localIp.o: localIp.h
?
$(RES): resource.rc my_icon.ico
????$(WINDRES) -o $(RES) resource.rc
?
.PHONY:clean
clean:
????$(RM) $(BIN) $(OBJ) *~

main.c

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
?*
?* 增加了解压数据库功能,包括
?* void readIpString(char *string);
?* void exportData(char *fileName);
?*
?* @author http://www.heui.org
?* @version 0.6
?*
?*/
?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "qqwry.h"
?
FILE*ipFile???????? = NULL; //ip文件指针
unsigned longipBegin? = 0; //ip开始地址
unsigned longipEnd??? = 0; //ip结束地址
unsigned longipSum??? = 0; //ip总数
/**
?* main()
?*/
intmain(intargc, char**argv)
{
????ipFile = fopen("QQWry.Dat", "rb");
????if(!ipFile){
????????puts("QQWry.Dat文件丢失");
????????exit(1);
????}
????unsigned longdata[2];
????fread(data, 1, 8, ipFile);
????ipBegin = data[0];
????ipEnd = data[1];
????ipSum = ((data[1]-data[0])/RECORD_LENGTH +1);
?
????checkCmdLine(argc, argv);//处理命令行参数
?
????fclose(ipFile);
????return0;
}

qqwry.h

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef QQWRY_H
#define QQWRY_H
?
#define RECORD_LENGTH 0x07? //ip记录长度
#define AREA_FOLLOWED 0X01? //模式1
#define NO_AREA?????? 0x02? //模式2
?
typedefstructipInfo<