【製品情報】Mobile Beholder:簡易ネットワーク管理/調査支援ツール公開(2008/05/28)
【技術メモ】DDoS 攻撃的な SMTP 接続の分析を掲載(2007/08/13)
【技術メモ】Beholder を利用したサイトへのアクセス動向の分析を掲載(2007/08/08)
【お知らせ】ウェブサイトを刷新(2007/08/02)

KoboldTM
IPv4アドレスから国名を検索するC言語ライブラリ

KoboldTM は、 IPv4アドレスから国名を検索するC言語ライブラリです。 IPアドレスと国名との対応は、 APNIC, ARIN, LACNIC, RIPENCC, AFRINIC の各組織で管理しているデータに基づいています。 また、RFC 3330 に記載されている特別割り当ての IPv4 アドレスにも対応しています。 弊社製品の BeholderManticore では、必須ライブラリとなっています。 現在、FreeBSD/i386 6.2-RELEASE 用のパッケージとしてダウンロードできます。

製品内容は、 C言語用ライブラリの他に IPv4 アドレスから国名を検索する cclookup と国別の集計を行うための ccstatistics と IPパケットの情報を記録するための cciplog というコマンドラインのツールが 同梱されています。

導入手順

ダウンロードページから Kobold のパッケージを入手します。 ここでは、パッケージのファイル名を kobold-x.y.z.tbz として説明します。 x.y.z には、バージョン番号を表す数字が入ります。 次のコマンドを実行すると Kobold が FreeBSD システムに導入されます。


  # pkg_add kobold-x.y.z.tbz

ライブラリの使用方法

ここでは、kobold ライブラリの簡単な使い方を説明します。 基本的な kobold のライブラリ関数の使い方は、 下記ソースコードに全て記述してあります。 kb_init() と kb_finish() 関数は、プログラム中で一度呼び出すだけです。 その後は、kb_lookup() 関数を何度でも利用可能です。 なお、本ライブラリは "Thread safe" ではありません。


  #include <stdio.h>
  #include <stdlib.h>
  #include <kobold.h>

  int main(int argc, char * argv[])
  {
    int status;

    if ((status = kb_init()) == 0) { /* 初期化: 一度だけ呼び出す */
      const char  ipaddr[] = "124.147.39.218";
      kb_cc_t  cc; /* 基本情報を格納する変数 */
      char *  net; /* 割り当てネットワークアドレス用 */

      if (kb_lookup(ipaddr, &cc, &net) == 0) {
        fprintf(stdout, "%s: %s [%s] %s [%s] %s\n",
          ipaddr,
          cc.tld->code,
          cc.tld->name,
          cc.rir->name ? cc.rir->name : "",
          cc.rir->info ? cc.rir->info : "",
          net != NULL ? net : "");
      }
      if (net != NULL) { free(net); } /* メモリリーク防止で必須 */
      kb_finish(); /* 一度だけ呼び出す */
    }

    return status;
  }

上記のプログラムを "ex.c" というファイル名で保存した場合、 次のようにコマンドを実行してコンパイルします。


  % gcc -I/usr/local/include -L/usr/local/lib ex.c -o ex -lkobold

エラーが起きなければ、実行ファイル "ex" が作成されます。 以下がプログラムの実行結果です。 順に、検索した IPアドレスと割り当て国の略称と名称、管理組織の略称と名称、 および IPアドレスが割り当てられているネットワークアドレスです。


  % ./ex
  124.147.39.218: JP [Japan] APNIC [Asia/Pacific Region] 124.147.0.0/18

コマンドライン・ツールの使い方

cclookup

cclookup の一般的な使い方は調べたい IPアドレスを指定するだけです。 CN は国名の略称で APNIC は管理組織を表します。 以下の例は、中国と米国に割り当てられたアドレスです。 なお、IPアドレスは複数指定できます。


  % cclookup 211.154.46.228 151.196.145.133
  211.154.46.228: CN      APNIC
  151.196.145.133: US     ARIN

国名の正式名称を表示するには "-s" オプションを指定します。


  % cclookup -s 211.154.46.228 151.196.145.133
  211.154.46.228: CN      [China, People's Republic Of]   APNIC
  151.196.145.133: US     [America, United States Of (a.k.a USA)] ARIN

管理組織の名称も表示するには "-l" オプションを指定します。 下記の例では便宜上折り返しておりますが、 実際には IPアドレス毎に一行に出力されます。


  % cclookup -l 211.154.46.228 151.196.145.133
  211.154.46.228:  CN [China, People's Republic Of]
                   APNIC [Asia/Pacific Region]
  151.196.145.133: US [America, United States Of (a.k.a USA)]
                   ARIN [North America Region]

また、IPアドレスが割り当てられているネットワーク・アドレスも知りたい場合は、 "-n" オプションを指定します。 本オプションは、 "-s" あるいは "-l" オプションと併用できます。


  % cclookup -n 211.154.46.228 151.196.145.133
  211.154.46.228: CN      APNIC   211.154.0.0/16
  151.196.145.133: US     ARIN    151.196.0.0/12

ccstatistics

ccstatistics は、一行にひとつの IPアドレスを記述したファイルの 国別の集計情報を出力します。 あるメールサーバにアクセスして来た一日分の IPアドレスを列挙したファイル (ファイルの内容は以下のようになっています)を例に実行結果を示します。 なお、ファイル中の IPアドレスの数は、573件です。


  60.172.87.231
  87.230.175.120
  87.230.175.120
  ...
  83.213.115.197

ccstatistics はオプション指定がない場合は、国別の集計を出力します。 ここでは、上位10件のみ表示します。


  % ccstatistics mail.log
  US   145   25.394(%)  America, United States Of (a.k.a USA)
  CN   139   24.343(%)  China, People's Republic Of
  JP    77   13.485(%)  Japan
  IN    25    4.378(%)  India
  BR    23    4.028(%)  Brazil, Federative Republic Of
  VN    23    4.028(%)  Viet Nam, Socialist Republic Of
  KR    21    3.678(%)  Korea, Republic Of
  DE    20    3.503(%)  Germany, Federal Republic Of
  AR    18    3.152(%)  Argentine Republic
  CL    12    2.102(%)  Chile, Republic Of
  TR    10    1.751(%)  Turkey, Republic Of

また、"-r" オプションを指定することで、 管理地域別の集計を出力できます。


  % ccstatistics -r mail.log
    APNIC  291  50.963(%)   Asia/Pacific Region
     ARIN  148  25.919(%)   North America Region
 RIPE NCC   71  12.434(%)   Europe, the Middle East, and Central Asia
   LACNIC   60  10.508(%)   Latin America and some Caribbean Islands
  AFRINIC    1   0.175(%)   Africa Region

cciplog

cciplog は、libpcap を利用した IPパケットのログ情報を記録するコマンドです。 次のようにコマンドを実行した場合、UDP パケットのみの情報を /var/log/cciplog に記録します。 "-f" オプションには、 tcpdump コマンドで指定可能なフィルタルールを記述できます。 例では、TCP の 80番ポート間のアクセスを記録します。


  # cciplog -i em0 -l /var/log/cciplog -f 'tcp port 80'

ログファイルの内容は次のようになります。 パケットの宛先のみ、国名の略称を表示します。 実際の出力は、パケット毎に一行に表示されますが、 ここでは表示の都合上、折り返しています。


  2007-07-29 12:30:34.949745 tcp(v4) 192.168.1.22:63968
      > 124.147.39.218:80 *S******* [JP] (44 bytes)
  2007-07-29 12:30:34.969588 tcp(v4) 124.147.39.218:80
      > 192.168.1.22:63968 *S**A**** [JP] (40 bytes)

なお、cciplog では、TCP パケットのフラグが "SYN", "FIN", "RST", "SYN+ACK", "SYN+FIN", "FIN+PUSH+URG" 付きのパケットと "フラグのない" パケットのみを記録します。 最後の2つは、XMAS スキャンや NULL スキャンと呼ばれる方法で、 nmap などのポートスキャンを行うツールでよく利用されています。

製品紹介

TrickBSDTM

ネットワーク用途向けコンパクトフラッシュ版 FreeBSD

KoboldTM

IPv4アドレスから国名を検索するC言語用ライブラリ

BeholderTM

出力モジュールを拡張可能なパケットキャプチャとネットワークツール

ManticoreTM

接続元の国毎にアクセス制御 を行うための Postfixmilter