Chinaunix首页 | 论坛 | 博客
  • 博客访问: 86789
  • 博文数量: 56
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-06 14:50
文章分类
文章存档

2013年(56)

我的朋友

分类: LINUX

2013-08-30 13:52:01

 以下是我的实现:使用的时候很简单:

    点击(此处)折叠或打开

    /**

    *1.调用qqwry_init_parser创建一个qqwry_parser_t类型的解析器

    *2.初始化一个存放查询结果信息的qqwry_record

    *3.调用qqwry_querey_iprecord查询指定ip的归属地

    *4.调用qqwry_release_parser释放资源

    **/

    qqwry_parser_t parser = qqwry_init_parser("/root/QQWry.Dat", VERBOSE_ENABLE,

    CACHE_ENABLE, 1);

    qqwry_record qr = QQWARY_RECORD_INITIALIZER();

    qqwry_querey_iprecord(parser, "61.172.201.195", &qr);

    qqwry_release_parser(parser);

    这是一个初级版本,还没有经过大量的,可能存在很多不完备的地方,希望亲们试用了之后,能够提出改进意见啊。

    qqwry_utils.h

    点击(此处)折叠或打开

    /*

    * qqwry_utils.h

    *

    * Created on: 2012-4-26

    * Author: zhanlin

    */

    #ifndef QQWRY_UTILS_H_

    #define QQWRY_UTILS_H_

    int ipaddr_to_bytes(const char *src, char *dest);

    void bytes_to_ipaddr(const char *src, char *dest);

    inline int32_t char3_to_int32(const char *buf);

    #endif /* QQWRY_UTILS_H_ */

    qqwry_utils.c

    点击(此处)折叠或打开

    /*

    * qqwry_utils.c

    *

    * Created on: 2012-4-26

    * Author: zhanlin

    */

    #include

    #include

    #include

    #include

    #include

    #include "qqwry_utils.h"

    int ipaddr_to_bytes(const char *src, char *dest) {

    int n;

    char *newstr;

    char *sub;

    int i = 0;

    n = strlen(src);

    newstr = (char *) malloc(n + 1);

    if (newstr == NULL) {

    return -1;

    }

    memcpy(newstr, src, n);

    *(newstr + n) = 0;

    sub = strtok(newstr, ".");

    while (sub != NULL) {

    // printf("%s atoi %d\n", sub, atoi(sub));

    *(dest + i) = (char) atoi(sub);

    sub = strtok(NULL, ".");

    i++;

    }

    free(newstr);

    return 0;

    }

    void bytes_to_ipaddr(const char *src, char *dest) {

    sprintf(dest, "%c.%c.%c.%c", src[0], src[1], src[2], src[3]);

    }

    inline int32_t char3_to_int32(const char *buf) {

    int32_t i = 0;

    memcpy(&i, buf, 3);

    return i;

    }

    qqwry_types.h

    点击(此处)折叠或打开

    /*

    * qqwry_types.h

    *

    * Created on: 2012-4-26

    * Author: zhanlin

    */

    #ifndef QQWRY_TYPES_H_

    #define QQWRY_TYPES_H_

    #include

    #include

    #include

    #include

    #include

    #pragma pack(0)

    typedef struct _qqwry_header {

    u_int32_t qh_idx_start;

    u_int32_t qh_idx_end;

    } qqwry_header, *qqwry_header_t;

    #endif /* QQWRY_TYPES_H_ */

    qqwry_parser.h

    点击(此处)折叠或打开

    /*

    * qqwry_parser.h

    *

    * Created on: 2012-4-26

    * Author: zhanlin

    */

    #ifndef QQWRY_PARSER_H_

    #define QQWRY_PARSER_H_

    #include

    enum {

    VERBOSE_DISABLE = 0, VERBOSE_ENABLE = 1

    };

    enum {

    CACHE_DISABLE = 0, CACHE_ENABLE = 1

    };

    typedef struct _qqwry_record {

    char qr_ipaddr[20];

    int32_t qr_ip;

    char qr_bigzone[1024];

    char qr_smallzone[1024];

    } qqwry_record, *qqwry_record_t;

    #define QQWARY_RECORD_INITIALIZER() {\

    .qr_ipaddr = {0}, \

    .qr_ip = 0, \

    .qr_bigzone = {0}, \

    .qr_smallzone = {0}, \

    }

    struct _qqwry_parser;

    typedef struct _qqwry_parser qqwry_parser, *qqwry_parser_t;

    qqwry_parser_t qqwry_init_parser(const char *dbpath, int verb, int cache,

    int loaddb);

    int qqwry_load_db(qqwry_parser_t parser);

    void qqwry_unload_db(qqwry_parser_t parser);

    int qqwry_querey_iprecord(qqwry_parser_t parser, const char *ipaddr, qqwry_record_t qr);

    void qqwry_release_parser(qqwry_parser_t parser);

    int load_db_to_mem(qqwry_parser_t parser);

    #endif /* QQWRY_PARSER_H_ */

    qqwry_types.c

    点击(此处)折叠或打开

    /*

    * qqwry_types.c

    *

    * Created on: 2012-4-26

    * Author: root

    */

    

阅读(751) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~