pcap − Packet Capture ライブラリ |
#include <pcap.h> pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf) pcap_t *pcap_open_offline(char *fname, char *ebuf) pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname) char errbuf[PCAP_ERRBUF_SIZE]; char *pcap_lookupdev(char *errbuf) int pcap_lookupnet(char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf) int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user) int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user) void pcap_dump(u_char *user, struct pcap_pkthdr *h, u_char *sp) int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask) int pcap_setfilter(pcap_t *p, struct bpf_program *fp) u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h) int pcap_datalink(pcap_t *p) int pcap_snapshot(pcap_t *p) int pcap_is_swapped(pcap_t *p) int pcap_major_version(pcap_t *p) int pcap_minor_version(pcap_t *p) int pcap_stats(pcap_t *p, struct pcap_stat *ps) FILE *pcap_file(pcap_t *p) int pcap_fileno(pcap_t *p) void pcap_perror(pcap_t *p, char *prefix) char *pcap_geterr(pcap_t *p) char *pcap_strerror(int error) void pcap_close(pcap_t *p) void pcap_dump_close(pcap_dumper_t *p) |
Packet Capture ラ イブラリは、パケット獲得システムの高レベルなインタ フェースを提供します。このメカニズムでは、ネットワークのすべてのパ ケッ トに、その他のホスト用であってもアクセスできます。 |
pcap_open_live() は、ネットワークのパケットを調べるためのパケット獲得記 述子を取得するために用います。 device は、開くネットワークデバイスを 指 定 す るストリングです。 snaplen は、獲得する最大バイト数を指定します。 promisc は、インタフェースを無差別モードにするかどうかを指定します(この パ ラメータが偽である場合でも、その他の理由でインタフェースが無差別モー ドになることがあります)。 to_ms は、読込みタイムアウトをミリ秒単位で 指 定 し ま す。 ebuf は、 エ ラー テキストを戻すために使用するもので、 pcap_open_live() がエラーになり、 NULL が戻された場合に設定されます。 pcap_open_offline() は、読込み用の「保存ファイル」を開くために呼び出 し ま す。 fname は、 開 くファイルの名前を指定します。このファイルは、 tcpdump(1) と tcpslice(1) で使用するファイルと同じフォーマットになっ て います。エラーテキストが戻される場合、 stdin ebuf stdin.ebuf のシノニム で名前「-」が使用されます。これは、 pcap_open_offline() がエ ラー に な り、 NULL が戻される場合に設定されます。 pcap_dump_open() は、書込み用の「保存ファイル」を開くために呼び出しま す。エラーが発生した場合は、 stdout NULL のシノニムで名前「-」が戻さ れ ま す。 p は、 pcap_open_offline() か pcap_open_live() が戻す pcap 構造 体です。 fname は、開くファイルの名前を指定します。 NULL が戻された場合 は、 pcap_geterr() を使用してエラーテキストを入手できます。 pcap_lookupdev() は、 pcap_open_live() と pcap_lookupnet() での使用に適 したネットワークデバイスのポインタを戻します。エラーが発生した 場 合 は NULL が戻され、 errbuf に適切なエラーメッセージが入ります。 pcap_lookupnet() は、ネットワークデバイス device に関連するネットワーク 番号とマスクを決めます。 netp と maskp は、 bpf_u_int32 ポインタで す。 エ ラー が 発生した場合は −1 が戻されます。この場合は errbuf に適切なエ ラーメッセージが入ります。 pcap_dispatch() は、パケットの収集と処理に使用します。 cnt は、戻る前に 処 理 す るパケットの最大数を指定します。 cnt を −1 にすると、1つのバッ ファで受け取ったすべてのパケットが処理されます。 cnt を 0にする と、 エ ラー が発生するか、 EOF に達するか、読込みタイムアウトになる(ライブ読込 みを行ない、0以外の読込みタイムアウトを指定している場合)までパケット が 処 理されます。 callback は、呼び出すルーチンを指定します。このルーチン の呼び出しに使用する引数は、 pcap_dispatch() から渡される u_char ポイン タ、 pcap_pkthdr 構造体のポインタ(実際のネットワークヘッダとデータの前 に置かれる)、パケットデータの u_char ポインタです。戻り値は、読み込まれ たパケットの数です。「保存ファイル」で EOF に達するとゼロが戻されます。 エラーが発生した場合は −1 が戻されます。 pcap_perror() か pcap_geterr() を使用してエラーテキストを表示してください。 pcap_dump() は、 pcap_dump_open() で開いた「保存ファイル」にパケットを 出力します。呼び出し引数が、 pcap_dispatch() での使用に適していることに 注意してください。 pcap_compile() は、ストリング str をフィルタプログラムにコンパイルしま す。 program は、 bpf_program 構造体のポインタで、 pcap_compile() に よっ て値が入力されます。 optimize は、作成されたコードで最適化を実行す るかどうかを制御します。 netmask は、ローカルネットのネットマスクを指定 します。 pcap_setfilter() は、フィルタプログラムを指定します。 fp は bpf_program 構造体の配列を指すポインタで、一般的には pcap_compile() を呼び出した 結 果 になっています。エラーが発生した場合は −1 が戻され、エラーが発生しな かった場合は 0が戻されます。 pcap_loop() は、 cnt パケットが処理されるかエラーが発生するまでパケット の読込みが続くことを除いて、 pcap_dispatch() と同じです。ライブ読込みタ イムアウトが発生しても戻りません。 pcap_open_live() に 0以外の読込み タ イムアウトを指定して pcap_dispatch() を呼び出すと、タイムアウトが発生し た場合に届いたパケットの受信と処理ができます。 cnt に負の値を指定 す る と、 pcap_loop() は無限にループします(最低でもエラーが発生するまでルー プします)。 pcap_next() は、次のパケットの u_char ポインタを戻します。 pcap_datalink() は、 DLT_EN10MB などのリンクレイヤタイプを戻します。 pcap_snapshot() は、 pcap_open_live を呼び出した場合に指定されるス ナッ プショットの長さを戻します。 pcap_is_swapped() は、現在の「保存ファイル」が、現在のシステムとは異な るバイトオーダを使用している場合に真を戻します。 pcap_major_version() は、保存ファイルの書込みに使用した pcap のメジャー バージョン番号を戻します。 pcap_minor_version() は、保存ファイルの書込みに使用した pcap のマイナー バージョン番号を戻します。 pcap_file() は「保存ファイル」の名前を戻します。 int pcap_stats() は 0を戻し、 pcap_stat 構造体にデータを入力します。 値 は、 実行の開始から呼び出しまでのパケット統計を表します。エラーが発生し た場合、または基礎となるパケット獲得でパケット統計がサポートされてい な い 場合は −1 が戻されます。 pcap_perror() か pcap_geterr() でエラーテキ ストを入手してください。 pcap_fileno() は、「保存ファイル」のファイル記述子番号を戻します。 pcap_perror() は、最後の pcap ライブラリエラーのテキストを prefix に 続 けて stderr に出力します。 pcap_geterr() は、最後の pcap ライブラリエラーに関するエラーテキストを 戻します。 pcap_strerror() は、 strerror(1) が使用できない場合に使用できます。 pcap_close() は、 p に関連するファイルを閉じ、リソースの割り振りを解 除 します。 pcap_dump_close() は「保存ファイル」を閉じます。 |
カ リ フォルニア大学バークレー校、Lawrence Berkeley National Laboratory の Van Jacobson、Craig Leres、Steven McCanne 現行バージョンは、以下の匿名 ftp で使用できます。 |
ftp://ftp.ee.lbl.gov/libpcap.tar.Z |
バグを発見した場合は、libpcap@ee.lbl.gov に報告してください。 |