【製品情報】Mobile
Beholder:簡易ネットワーク管理/調査支援ツール公開(2008/05/28)
【技術メモ】DDoS 攻撃的な
SMTP 接続の分析を掲載(2007/08/13)
【技術メモ】Beholder
を利用したサイトへのアクセス動向の分析を掲載(2007/08/08)
【お知らせ】ウェブサイトを刷新(2007/08/02)
KoboldTM は、 IPv4アドレスから国名を検索するC言語ライブラリです。 IPアドレスと国名との対応は、 APNIC, ARIN, LACNIC, RIPENCC, AFRINIC の各組織で管理しているデータに基づいています。 また、RFC 3330 に記載されている特別割り当ての IPv4 アドレスにも対応しています。 弊社製品の Beholder と Manticore では、必須ライブラリとなっています。 現在、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 の一般的な使い方は調べたい 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 は、一行にひとつの 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 は、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 などのポートスキャンを行うツールでよく利用されています。
ネットワーク用途向けコンパクトフラッシュ版 FreeBSD
IPv4アドレスから国名を検索するC言語用ライブラリ
出力モジュールを拡張可能なパケットキャプチャとネットワークツール
接続元の国毎にアクセス制御 を行うための Postfix用 milter