update copyright and license
IPIP.net officially supported IP database ipdb format parsing library
dnf install json-c-devel
gcc -std=gnu99 main.c ipdb.c -ljson-c -o main ./main new ipdb reader err: 0 ipdb build time: 1535451865 ipdb ipv4 support: 0 ipdb ipv6 support: 1 ipdb language: CN EN ipdb fields: country_name region_name city_name owner_domain isp_domain latitude longitude timezone utc_offset china_admin_code idd_code country_code continent_code idc base_station country_code3 european_union currency_code currency_name anycast CN find err: 0 中国 北京 北京 清华大学网络科学与网络空间研究院 教育网 39.904989 116.405285 Asia/Shanghai UTC+8 110000 86 CN AP CHN 0 CNY Yuan Renminbi 1: country_name: 中国 2: region_name: 北京 3: city_name: 北京 4: owner_domain: 清华大学网络科学与网络空间研究院 5: isp_domain: 教育网 6: latitude: 39.904989 7: longitude: 116.405285 8: timezone: Asia/Shanghai 9: utc_offset: UTC+8 10: china_admin_code: 110000 11: idd_code: 86 12: country_code: CN 13: continent_code: AP 14: idc: 15: base_station: 16: country_code3: CHN 17: european_union: 0 18: currency_code: CNY 19: currency_name: Yuan Renminbi 20: anycast: EN find err: 0 China Beijing Beijing CHINAEDU 39.904989 116.405285 Asia/Shanghai UTC+8 110000 86 CN AP CHN 0 CNY Yuan Renminbi 1: country_name: China 2: region_name: Beijing 3: city_name: Beijing 4: owner_domain: 5: isp_domain: CHINAEDU 6: latitude: 39.904989 7: longitude: 116.405285 8: timezone: Asia/Shanghai 9: utc_offset: UTC+8 10: china_admin_code: 110000 11: idd_code: 86 12: country_code: CN 13: continent_code: AP 14: idc: 15: base_station: 16: country_code3: CHN 17: european_union: 0 18: currency_code: CNY 19: currency_name: Yuan Renminbi 20: anycast: time used: 2027772us.
#include <stdio.h> #include <stdlib.h> #include <memory.h> #include <sys/time.h> #include "ipdb.h" int main() { ipdb_reader *reader; int err = ipdb_reader_new("/root/cpp/ipdb-c/mydata6vipday4.ipdb", &reader); printf("new ipdb reader err: %d\n", err); if (!err) { printf("ipdb build time: %li\n", reader->meta->build_time); printf("ipdb ipv4 support: %i\n", ipdb_reader_is_ipv4_support(reader)); printf("ipdb ipv6 support: %i\n", ipdb_reader_is_ipv6_support(reader)); printf("ipdb language: "); for (int i = 0; i < reader->meta->language_length; ++i) { printf("%s ", reader->meta->language[i].name); } printf("\n"); printf("ipdb fields: "); for (int i = 0; i < reader->meta->fields_length; ++i) { printf("%s ", reader->meta->fields[i]); } printf("\n"); char body[512]; char tmp[64]; char *lang[2]; lang[0] = "CN"; lang[1] = "EN"; for (int i = 0; i < 2; ++i) { err = ipdb_reader_find(reader, "2001:250:200::", lang[i], body); printf("%s find err: %d\n", lang[i], err); if (err) continue; printf("%s\n", body); int f = 0, p1 = 0, p2 = -1; do { if (*(body + p1) == '\t' || !*(body + p1)) { strncpy(tmp, body + p2 + 1, (size_t) p1 - p2); tmp[p1 - p2] = 0; printf("%d: %s: %s\n", f + 1, reader->meta->fields[f], tmp); p2 = p1; ++f; } } while (*(body + p1++)); } int x = 1000000; struct timeval start, end; gettimeofday(&start, NULL); do { ipdb_reader_find(reader, "2001:250:200::", "CN", body); } while (--x); gettimeofday(&end, NULL); long timeuse = 1000000 * (end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec; printf("time used: %ldus.\n", timeuse); } ipdb_reader_free(&reader); return 0; }
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
ipdb-c
IPIP.net officially supported IP database ipdb format parsing library
Dependence
Build & Run & Output
Example