-
Notifications
You must be signed in to change notification settings - Fork 2
API kr_range (KO)
JoungKyun Kim edited this page Jul 13, 2016
·
2 revisions
kr_range - 지정한 국가나 ISP의 IP 대역을 구한다.
#include <krisp.h>
typedef struct req_range {
char err[1024]; // get error messages
char data[1024]; // searching name of country or isp
short code; // search type. KRISP_GET_COUNTRY or
KRISP_GET_ISP
short verbose; // verbose option
int count; // rows of ranges
KRNET_RANGE * ranges; // data of ranges
} KRNET_REQ_RANGE;
int kr_range (KRNET_REQ_RANGE *range, KR_API *db);
kr_range api는 지정한 국가나 ISP의 IP 대역을 구할 수 있습니다. 기본적으로 kr_range API는 krisp에서 제공하는 database 에서만 동작 합니다.
kr_range api를 호출한 후, 반드시 KRNET_REQ_RANGE 구조체의 ranges member 메모리를 해제해 주어야 합니다.
성공 시에 0을 반환하며, 실패 시에 1을 반환 합니다. 검색 결과가 없는 것은 성공으로간주를 합니다.
#include <krisp.h>
int main (void) {
KR_API * db;
KRNET_API isp;
char * addr = "kns.kornet.net";
char * database = NULL;
char err[1024];
if ( kr_open (&db, database, err) == false ) {
fprintf (stderr, "ERROR Connect: %s\n", err);
return 1;
}
isp.verbose = false;
// defined safecpy_256 in krispapi.h
safecpy_256 (isp.ip, addr);
if ( kr_search (&isp, db) ) {
printf ("ERROR: %s\n", isp.err);
kr_close (&db);
return 1;
}
/*
* long2ip is include libipcalc.
* https://github.com/Joungkyun/libipcalc/wiki/API-long2ip
* long2ip is returned in a statically allocated buffer, which
* subsequent calls will overwrite. For thread safe, use long2ip_r.
*/
printf ("%-15s %-15s %-20s", ip, isp.ip, isp.icode);
printf ("%-15s ", long2ip (isp.start));
printf ("%-15s %s", long2ip (isp.end), isp.iname);
//
// Get Ranges
//
{
KRNET_REQ_RANGE range;
int i;
ulong mask;
char start[16];
char end[16];
range.code = KRISP_GET_ISP;
range.verbose = 0;
range.ranges = NULL;
range.count = 0;
memest (range.data, 0, 1024);
SAFECPY_1024 (range.data, isp.iname);
if ( kr_range (&range, db) ) {
fprintf (stderr, "ERROR: %s\n", range.err);
SAFEFREE (range.ranges);
kr_close (&db);
return 1;
}
printf (
"\nRange Traget: %s (%d line%s)\n\n",
range.data,
range.count,
range.count ? "s" : ""
);
for ( i=0; i<range.count; i++ ) {
long2ip_r (range.ranges[i].start, start);
mask = guess_netmask (range.ranges[i].start, range.ranges[i].end);
if ( network (range.ranges[i].start, mask) == range.ranges[i].start )
printf ("%s/%d\n", start, long2prefix (mask));
else
printf ("%s %s\n", start, long2ip_r (range.ranges[i].end, end));
}
}
SAFEFREE (range.ranges);
kr_close (&db);
return 0;
}
김정균 >https://joungkyun.github.com>
https://github.com/Joungkyun/libkrisp/issues
Copyright (c) 2016 JoungKyun.Kim <http://oops.org>
이 API는 LGPL 2.1을 따르며, 사용 시의 어떠한 문제에 대하여 보증하지 않습니다.