スポンサーリンク

TCPSLICE(1) FreeBSD 一般コマンドマニュアル TCPSLICE(1)

名称

tcpslice − tcpdump ファイルの切り出し/結合

書式

tcpslice [−dRrt] [−w file] [start-time [end-time]] file ...

解説

tcpslice ユーティリティは、 tcpdump(1)−w フラグを用いて作成されたパ ケットトレースファイルの一部を切り出すプログラムです。また、以下に示すよ うに、複数のパケットトレースファイルを結合する事もできます。

tcpslice の基本機能は、入力ファイルに含まれるパケットのうち、指定された時 間内のものを stdout に出力する事です。開始時刻および終了時刻の範囲は、コ マンド行で指定できます。範囲は指定した時刻自身を含みます。デフォルトで は、開始時刻は最初の入力ファイルの一つ目のパケットの時刻です。この時刻を first time と呼びます。デフォルトでは、終了時刻は開始時刻の 10 年後です。 したがって、 tcpslice trace-file というコマンドは単に trace-filestdout に出力します(ファイルには 10 年分のデータがない事を想定していま す)。

時刻の指定にはいくつかの方法があります。ひとつは sssssssss.uuuuuu の形を とる Unix 時刻形式を用いる方法です (これは、 tcpdump(1)−tt フラグで指 定される形式です)。例えば、 654321098.7654 は、1990 年 9 月 25 日、午後 8 時 51 分 (PDT) から、 38 秒と 765,400 マイクロ秒後の時刻を示します。

このマニュアルの例は全て PDT の時刻で示しますが、以下で示すように時刻を表 示したり解釈したりする場合、 tcpslice は、 tcpdump(1) のファイルがどのタ イムゾーンで生成されたかに関わらず、ローカルのタイムゾーンを使用します。 夏時間の設定は、対象となる日のローカルのタイムゾーンで適切な物が用いられ ます。例えば、夏季の時刻には、夏時間の影響を反映し、冬季の時刻には影響し ません。

時刻は first time から(開始時刻を指定する場合)、あるいは開始時刻から(終了 時刻を指定する場合) の相対的な時刻として指定する事もできます。指定するに は秒数の前に ‘+’ を付けます。例えば、 +200 は開始時刻が first time から 200 秒後であることを示し、ふたつの引数 +200 +300first time から 200 秒後から、 first time から 500 秒後までの範囲を示します。

時刻は、年 (y)、月 (m)、日 (d)、時 (h)、分 (m)、秒 (s)、マイクロ秒 (u) で 指定する事もできます。例えば、上記の Unix 時刻 654321098.7654 は、 90y9m25d20h51m38s765400u と指定する事もできます。

この形式で時刻を指定した場合、省略されたフィールドのデフォルト値は以下の ようになります。最初に指定されたフィールドより 大きい単位の省略された フィールドについてのデフォルト値は、 first time (開始時刻を指定する場合) または開始時刻(終了時刻を指定する場合)と同じ値となります。最初に指定され たフィールドより 小さい単位の省略されたフィールドについてのデフォルト値は 0 となります。例えば、入力ファイルの first time が Unix 時刻で上記の値、 すなわち、1990 年 9 月 25 日、午後 8 時 51 分 (PDT) から 38 秒と 765,400 マイクロ秒後としましょう。この時、同じ日の 午後 9 時 36 分 (PDT) ちょうど を指定するには、 21h36m と表す事ができます。午後 9 時 36 分 (PDT) から翌 日の午前 1 時 54 分 (PDT) までを指定するには、 21h36m 26d1h54m と表す事が できます。

ymdhmsu 形式を使用する時にも相対時刻で指定する事ができます。この時、省略 されたフィールドの単位が指定された最初のフィールドより 大きい単位ならば、 デフォルト値は 0 となり、省略されたフィールドの単位が指定された最初の フィールドより 小さい単位ならば、デフォルト値は first time あるいは開始時 刻と同じ値となります。 first time が上記の Unix 時刻だった場合、 22h +1h10m はその日の午後 10 時 00 分 (PDT) から 午後 11 時 10 分 (PDT) まで を示し、 +1h +1h10m は午後 9 時 51 分 (PDT) の 38.7654 秒後から 午後 11 時 01 分 (PDT) の 38.7654 秒後までを示します。 +0 +1h と指定すれば、ファ イルの最初から 1 時間分のデータを取り出す事ができます。

ymdhmsu 形式を用いる場合、 m が、‘月’ を示すのか ‘分’ を示すのかが曖昧に なります。いずれになるかは、以下のように決定されます。 m フィールドの後に d フィールドが来た場合、月が指定されたと判断します。それ以外の場合は、分 が指定された判断します。

複数の入力ファイルが指定された場合、 tcpslice はまず、最初のファイル内の 指定された時刻の範囲にあるパケットを出力します。次に、範囲の開始時刻を最 初のファイルの最後のパケットの時刻の直後に変更し、次のファイルを処理し、 以降これを繰り返します。したがって、時間順にならんでいないパケットを含む 複数のファイルをまとめる事は できません。与えられたファイルのうち、先に処 理されたファイルより新しいパケットに対してのみ処理されます。この機構によ りひとつのパケットが複数回出力に現れる事を防ぐ事ができます。

オプション

−R, −r, −t のいずれかが指定された場合、 tcpslice は、各入力ファイルの最初 および最後のパケットの時刻を表示して終了します。これらの 3 個のオプション のうち、1 つだけを指定することができます。

以下のオプションが指定できます:

       −d

指定された範囲の開始時刻と終了時刻を表示して終了します。このオプ ションは、指定した範囲が想定している時間と本当に一致しているかど うかを確認するのに有効です。 −R, −r, −t のいずれかが指定された場 合、それらに相当する形式で時刻を表示します。指定がない場合は、内 部形式 (−R) となります。

−R
各入力ファイルの最初および最後のパケットの時刻を内部形式 (つま り、 sssssssss.uuuuuu の形式) で表示します。

−r
−R
と同じですが、 date(1) と同様の、読みやすい形式で時刻を表示し ます。

−t
−R
と同じですが、時刻を tcpslice 形式、すなわち、上記に示した ymdhmsu の形で表示します。

−w file
出力を stdout ではなく、 file とします。

関連項目

tcpdump(1)

作者

Vern Paxson ⟨vern@ee.lbl.gov⟩, of Lawrence Berkeley Laboratory, University of California, Berkeley, CA.

バグ

数字や ‘+’ で始まるファイル名を入力ファイルとして指定すると、開始/終了時 刻と間違うことがあります。このようなファイル名は、先頭に ‘./’ をつけて指 定します。たとえば、 ‘04Jul76.trace’ というファイル名ならば ‘./04Jul76.trace’ とします。

tcpslice ユーティリティは、入力ファイルをくまなく探すためにランダムアクセ スを使用するため、 stdin から入力することはできません。

tcpslice ユーティリティは、出力先が端末 ( isatty(3) で示される) である場 合、出力しません。これはバグではなく、ユーザの端末にバイナリデータをまき 散らすことを防ぐための仕様です。つまり、 stdout をリダイレクトするか、 −w により出力ファイルを指定しなければなりません。

tcpslice ユーティリティは、1 年以上にわたる tcpdump(1) のファイルや、もと もとのパケットの長さが 65,535 バイトを超えるようなパケットの一部を含むよ うなファイル、3 パケット未満のパケットしか含まれないファイルに対しては正 しく働かないでしょう。これらのファイルを処理しようとすると、 ‘couldn’t find final packet in file’ というエラーメッセージが出力されます。これらの 問題は、大きなトレースファイルを扱う場合に、 tcpslice が処理速度を大きく 改善するために使用している機構に起因します。一方、 tcpslice は、如何なる サイズのトレースファイルでも中央のスライスを効率的に取り出すことができ、 不完全なトレースファイル (例えば、ファイル中の最後のパケットが途中で切れ ているファイル、 tcpdump(1) が強制的に終了させられた場合によくできる) に 対しても正しく動作します。

FreeBSD 10.0 October 14, 1991 FreeBSD 10.0

スポンサーリンク