linux 查询ip归属地的工具,Linux下查询IP归属地的实现

Linux下查询IP归属地的实现

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

点击(此处)折叠或打开

/**

*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 %dn", 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

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值