日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
PCAP_LOOP(3) PCAP_LOOP(3) 名称 pcap_loop, pcap_dispatch - ライブキャプチャ (捕獲) または savefile から パケットを処理する 書式 #include <pcap/pcap.h> typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes); int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user); int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user); 解説 pcap_loop() は、cnt パケットが処理されるまで、ライブキャプチャ (捕獲) または ``savefile'' からパケットを処理するか、``savefile'' から読み込む とき、``savefile'' の終りに到達するか、pcap_breakloop(3) が呼び出される か、またはエラーが発生します。ライブのパケットバッファのタイムアウトが 起こるとき、返りません。cnt の -1 または 0 の値は、無限で同等ですので、 別の終わりの状態が起こるまで、パケットは、処理されます。 pcap_dispatch() は、cnt パケットが処理されるか、ライブキャプチャを行う とき、パケットの現在のバッファフルの終りに到達するか、``savefile'' から 読み込むとき、``savefile'' の終りに到達するか、pcap_breakloop() が呼び 出されるか、またはエラーが起こるまで、ライブキャプチャ (捕獲) または ``savefile'' からパケットを処理します。したがって、ライブキャプチャを行 うとき、cnt は、返る前に処理するパケットの最大数ですが、最小数ではあり ません。ライブキャプチャを読み込むとき、1 度に 1 つのパケットのバッファ フルが読み込まれるので、cnt パケットが処理されるより少ないです。cnt の ための -1 または 0 の値によって、ライブキャプチャを読み込むとき、1 つの バッファに受信されるすべてのパケットは、処理され、``savefile'' を読み込 むとき、ファイルのすべてのパケットは、処理されます。 いくつかのプラットフォームのライブのライブキャプチャを行うとき、利用可 能なパケットがないとき、読み込みのタイムアウトが期限切れになるなら、 pcap_dispatch() は、処理するために、パケットがないので、ノンブロッキン グモードでないときでさえ、0 を返します。アプリケーションは、起こること に備えるべきですが、それが起こることに頼ってはなりません。 (libpcap の古いバージョンでは、cnt が 0 であったときに、振る舞いは、未 定義でした。異なったプラットフォームとデバイスは、異なって振る舞うの で、libpcap の古いバージョンで動作しなければならないコードは、cnt の値 として、-1、0 でない、を使用するべきです。) callback は、3 つの引数を付けて呼び出される pcap_handler ルーチンを指定 します: user 引数で pcap_loop() または pcap_dispatch() に渡される u_char ポインタ、パケットのタイムスタンプと長さを指す const struct pcap_pkthdr ポインタ、とパケットからの (コールバックルーチンに渡される struct pcap_pkthdr ポインタで与えられる) 最初の caplen バイトを指す const u_char ポインタです。struct pcap_pkthdr とパケットデータは、コー ルバックルーチンによって解放することができず、コールバックルーチンが 返った後に有効であることは保証されません。コードがコールバックの後に有 効であるために、それらを必要とするなら、それらのコピーを行わなければな りません。 パケットからのデータのバイトは、リンクレイヤのヘッダで始まります。リン クレイヤのヘッダの形式は、pcap_loop() または pcap_dispatch() にも渡され る pcap_t 値が渡されるとき、pcap_datalink(3) ルーチンの返り値によって示 されます。https://www.tcpdump.org/linktypes.html リスト値 pcap_datalink() は、それらの値に対応しているパケットの形式を返して、記 述することができます。それが返す値は、pcap_set_datalink(3) が呼び出され ない限り、そして呼び出されないなら、受信されたすべてのパケットに対して 有効となります。pcap_set_datalink() への成功した呼び出しの後に、すべて の続くパケットは、pcap_set_datalink() に渡されるリンクレイヤのヘッダタ イプ値によって指定されたタイプのリンクレイヤのヘッダがあります。 与えられたキャプチャまたは ``savefile`` のためのパケットが、イーサネッ トのための DLT_EN10MB のような、あらゆる与えられたリンクレイヤのヘッダ タイプがあることを仮定してはなりません。例えば、Linux の "any" デバイス は、たとえ、その時点のシステムのすべてのデバイスでも、DLT_LINUX_SLL の リンクレイヤのヘッダタイプがあり、オープンされた "any" デバイスには、 イーサネットのための DLT_EN10MB のような、いくつかの他のデータのリンク タイプがあります。 戻り値 pcap_loop() は、cnt が使い果たされるか、または ``savefile'' から読み込 まれるとき、これ以上のパケットが利用可能ではないなら、0 が返されます。 エラーが起こったなら、PCAP_ERROR を返し、あらゆるパケットが処理される前 に pcap_breakloop() への呼び出しのためにループが終了するなら、 PCAP_ERROR_BREAK を返します。ライブのパケットバッファのタイムアウトが起 こるとき、返りません。代わりに、より多くのパケットを読み込むことを試み ます。 pcap_dispatch() は、成功すれば処理されたパケットの数を返します。パケッ トがライブのキャプチャから読み込まれなかったなら、(例えば、それらが、パ ケットのフィルタを渡さなかったので、それらが、破棄されるなら、またはあ らゆるパケットが到着する前に開始される、パケットバッファのタイムアウト をサポートするプラットフォームで、タイムアウトが、あらゆるパケットが到 着する前に、期限切れととなるなら、またはキャプチャデバイスのためのファ イル記述子がノンブロッキングモードであり、パケットが読み込むために利用 可能でなかったなら) またはパケットが ``savefile'' で利用可能でなかった なら、0 となります。エラーが起こったなら PCAP_ERROR を返し、あらゆるパ ケットが処理される前に pcap_breakloop() への呼び出しのためにループが終 了するなら、PCAP_ERROR_BREAK を返します。利用者のアプリケーションが pcap_breakloop() を使用するなら、ただ返り値 < 0 であるかチェックするの ではなく、PCAP_ERROR と PCAP_ERROR_BREAK のために明白なチェックを確認し ます。 PCAP_ERROR が返されるなら、pcap_geterr(3) または pcap_perror(3) は、 取って来るか、またはエラーテキストを表示する引数として p を付けて呼び出 されます。 関連項目 pcap(3) 25 July 2018 PCAP_LOOP(3)