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

*/

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

  1. NetDevOps实践(一)华为CE交换机:基线检查——本机发往日志服务器的IP与设备的LoopBack 0下的IP进行对比

    本文说明: 1.本篇文章部分借鉴了弈心<网路行者>实验思想,推荐移步阅读. 2.特别鸣谢:朱嘉盛,在我初学Python的道路上给予无私的帮助.以及他专栏内的文章给了我不少的灵感. 3.感谢 ...

  2. linux 查询ip归属地的工具,Linux 通过shell查询ip归属地(curl请求转码)

    root@kickseed:~# ping www.baidu.com                                                   #用百度进行测试获取百度IP ...

  3. linux系统里常用的抓图工具,Linux系统下屏幕截图常用方法

    电脑操作系统中一般都有自带截图快捷键,而很多软件业有截图的功能,那么Linux操作系统要如何截图呢?下面小编就给大家介绍下Ubuntu下如何截图. 在linux系统上怎么截图: 键盘上的截图键还可以用 ...

  4. linux上用的端口转发工具,linux下最简单好用的的端口转发工具

    linux下最简单好用的的端口转发工具 解压安装 tar zxvf rinetd.tar.gz make make install 编辑配置 vi /etc/rinetd.conf 0.0.0.0 8 ...

  5. linux上用的端口转发工具,Linux中的快速端口转发工具—rinetd

    这两天和同事讨论问题的时候知道了一个很好用的NAT工具-rinetd,它是由c实现的一个短小.实用的NTA转发工具,它的官网是在:http://www.boutell.com/rinetd/[root ...

  6. linux开源炫酷命令行工具,Linux上超酷的命令行扩展工具Oh My Zsh

    Oh My Zsh 是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式.它基于 zsh 命令行,提供了主题配置,插件机制,已经内置的便捷操作.给我们一种全新的方式使用命 ...

  7. linux系统里常用的抓图工具,linux下很棒的抓图工具——scrot

    这次重装FC5,很谨慎了.对欲安装的每件工具都仔细斟酌了一番.在屏幕抓取工具的选择上,我首选gimp,颇研究了一番,但gimp用于抓图总觉得大材小用,而且也不很方便,譬如无法进行区域交互抓取,只能抓窗 ...

  8. linux系统里常用的抓图工具,LINUX下的抓图工具——SCROT

    源码包 [安装] ./configure --prefix=/usr/local,可能会出错,提示找不到giblib库,apt-get install giblib即可解决.因为scrot是基于iml ...

  9. Linux安装VNC远程桌面管理工具

    Linux安装VNC远程桌面管理工具 Linux远程桌面连接方式 虽说高级的Linux运维工程师管理Linux时都是使用"高大上"的命令行操作,可是在有些时候例如Oracle数据库 ...

  10. 用linux如何用vi编写c程序,linux中VI编写C程序。。。

    在linux中编写C程序时不像编写shell那样开头要#!/bin/bash,但是在C程序中要指定头文件(头文件是指输入输出,宏等,而且要首先声明,也是必须要开始就声明的) 写好C代码后要给C文件赋予 ...

最新文章

  1. Python案例:使用XPath的爬虫
  2. 【Linux入门到精通系列讲解】Linux如何创建和删除swap分区
  3. 【参会指南】神策 2020 数据驱动用户大会,10 月 13 日将重磅开幕!
  4. 子页面刷新父页面,避免弹出重复提交窗口
  5. StarLake:汇量科技云原生数据湖的探索和实践
  6. python项目之当当网
  7. jmeter 安装详解
  8. 十年MFC经历认识的Microsoft技术
  9. amr-nb linux 编译安装包,3GPP最新版本amr-nb编解码源代码
  10. 关于《Python绝技:运用Python成为顶级黑客》的学习笔记
  11. 动态表单 mysql_【mysql】动态表单应该如何设计数据库?
  12. 惠普1005打印机自检页_hp1005打印机自检报告.docx
  13. tf-faster-rcnn在cpu下运行demo、测试和训练自己的数据集
  14. Restful风格的URL请求
  15. 【推荐系统】【论文阅读笔记】【survey】A Survey on Session-based Recommender Systems基于会话的推荐系统综述
  16. 恶意代码分析实战Lab3-2
  17. Your ApplicationContext is unlikely tostart due to a @ComponentScan of the defau
  18. 蓝桥ROS云课→一键配置←f1tenth和PID绕圈
  19. 深度学习:GAN优化方法-DCGAN案例
  20. 易语言之超级列表框的使用及json解析

热门文章

  1. 黑苹果音频卡顿_DXOMARK公布无线音箱音质基准:苹果华为Sonos上榜
  2. php导出页面为pdf文件大小,PHP HTML 生成 PDF|php快速导出pdf文件
  3. 使用iText读取PDF文件
  4. 最近在关注浏览器,先转一篇游戏浏览器的评测。
  5. Python的图像处理库Pillow
  6. 第十七届时尚COSMO美容大奖盛大启动 亮点多维度升级,2020一起“美就出圈”
  7. Windows操作系统注册表registry
  8. 2019年最新手机CPU处理器性能排行天梯图
  9. 创建 C++ WinRT 组件
  10. 用 Mac 输入罗马数字