设为首页 加入收藏

TOP

处理MaxMind数据库文件的库libmaxminddb使用介绍(一)
2017-10-20 08:14:21 】 浏览:2159
Tags:处理 MaxMind 数据库 文件 libmaxminddb 使用 介绍

名字

libmaxminddb - 用于处理 MaxMind 数据库文件的库

简介

#include 
  
   

int MMDB_open(
    const char *const filename,
    uint32_t flags,
    MMDB_s *const mmdb);
void MMDB_close(MMDB_s *const mmdb);

MMDB_lookup_result_s MMDB_lookup_string(
    MMDB_s *const mmdb,
    const char *const ipstr,
    int *const gai_error,
    int *const mmdb_error);
MMDB_lookup_result_s MMDB_lookup_sockaddr(
    MMDB_s *const mmdb,
    const struct sockaddr *const
    sockaddr,
    int *const mmdb_error);

int MMDB_get_value(
    MMDB_entry_s *const start,
    MMDB_entry_data_s *const entry_data,
    ...);
int MMDB_vget_value(
    MMDB_entry_s *const start,
    MMDB_entry_data_s *const entry_data,
    va_list va_path);
int MMDB_aget_value(
    MMDB_entry_s *const start,
    MMDB_entry_data_s *const entry_data,
    const char *const *const path);

int MMDB_get_entry_data_list(
    MMDB_entry_s *start,
    MMDB_entry_data_list_s **const entry_data_list);
void MMDB_free_entry_data_list(
    MMDB_entry_data_list_s *const entry_data_list);
int MMDB_get_metadata_as_entry_data_list(
    MMDB_s *const mmdb,
    MMDB_entry_data_list_s **const entry_data_list);
int MMDB_dump_entry_data_list(
    FILE *const stream,
    MMDB_entry_data_list_s *const entry_data_list,
    int indent);

int MMDB_read_node(
    MMDB_s *const mmdb,
    uint32_t node_number,
    MMDB_search_node_s *const node);

const char *MMDB_lib_version(void);
const char *MMDB_strerror(int error_code);

typedef struct MMDB_lookup_result_s {
    bool found_entry;
    MMDB_entry_s entry;
    uint16_t netmask;
} MMDB_lookup_result_s;

typedef struct MMDB_entry_data_s {
    bool has_data;
    union {
        uint32_t pointer;
        const char *utf8_string;
        double double_value;
        const uint8_t *bytes;
        uint16_t uint16;
        uint32_t uint32;
        int32_t int32;
        uint64_t uint64;
        {mmdb_uint128_t or uint8_t[16]} uint128;
        bool boolean;
        float float_value;
    };
    ...
    uint32_t data_size;
    uint32_t type;
} MMDB_entry_data_s;

typedef struct MMDB_entry_data_list_s {
    MMDB_entry_data_s entry_data;
    struct MMDB_entry_data_list_s *next;
} MMDB_entry_data_list_s;
  

描述

libmaxminddb 库提供用于处理 MaxMind DB 文件的功能。数据库和结果都由不同的数据结构表示。通过调用MMDB_open()打开数据库。 您可以使用MMDB_lookup_string()查找 IP 地址,或者使用MMDB_lookup_sockaddr()指向sockaddr结构的指针。

如果查找查找数据库中的IP地址,则返回MMDB_lookup_result_s结构。如果该结构表明数据库具有该IP的数据,则可以使用许多函数获取该数据。这些包括MMDB_get_value()和MMDB_get_entry_data_list()。

数据结构

由该库的maxminddb.h头文件导出的所有数据结构都是以typedef struct foo_s {...} foo_s的形式,因此您可以引用它们而不使用struct前缀。

该库提供以下数据结构:

MMDB_s

这是 MaxMind DB 文件的句柄。我们只记录了这个结构的一些供公众使用的字段。所有其他字段可能会更改,仅供内部使用。

typedef struct MMDB_s {
    uint32_t flags;
    const char *filename;
    ...
    MMDB_metadata_s metadata;
} MMDB_s;
uint32_t flags - 这个数据库打开的标志。

MMDB_metadata_s 和 MMDB_description_s

可以从MMDB_s结构获取此结构。它包含从数据库文件读取的元数据。 注意,你可以通过调用MMDB_get_metadata_as_entry_data_list()来更方便地访问元数据。

typedef struct MMDB_metadata_s {
    uint32_t node_count;
    uint16_t record_size;
    uint16_t ip_version;
    const char *database_type;
    struct {
        size_t count;
        const char **names;
    } languages;
    uint16_t binary_format_major_version;
    uint16_t binary_format_minor_version;
    uint64_t build_epoch;
    struct {
        size_t count;
        MMDB_description_s **descriptions;
    } description;
} MMDB_metadata_s;

typedef struct MMDB_description_s {
    const char
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用redis cluster和Redis作为mys.. 下一篇基本的数据库操作语句和JDBC编程..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目