Skip to content

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을 따르며, 사용 시의 어떠한 문제에 대하여 보증하지 않습니다.

참조

kr_open(3), kr_close(3), kr_search(3)

Clone this wiki locally