diff --git a/ja_JP.eucJP/man/man1/tcpdump.1 b/ja_JP.eucJP/man/man1/tcpdump.1 index aa2d782e37..f0712ff34f 100644 --- a/ja_JP.eucJP/man/man1/tcpdump.1 +++ b/ja_JP.eucJP/man/man1/tcpdump.1 @@ -1,1464 +1,1763 @@ -.\" @(#) %Header: /tcpdump/master/tcpdump/tcpdump.1,v 1.72.2.2 2000/01/29 16:42:03 itojun Exp % (LBL) +.\" @(#) $Header: /home/ncvs/doc/ja_JP.eucJP/man/man1/tcpdump.1,v 1.16 2001-07-29 22:12:31 horikawa Exp $ (LBL) .\" .\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997 .\" The Regents of the University of California. All rights reserved. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that: (1) source code distributions .\" retain the above copyright notice and this paragraph in its entirety, (2) .\" distributions including binary code include the above copyright notice and .\" this paragraph in its entirety in the documentation or other materials .\" provided with the distribution, and (3) all advertising materials mentioning .\" features or use of this software display the following acknowledgement: .\" ``This product includes software developed by the University of California, .\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of .\" the University nor the names of its contributors may be used to endorse .\" or promote products derived from this software without specific prior .\" written permission. .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. .\" -.\" %FreeBSD: src/contrib/tcpdump/tcpdump.1,v 1.8 2000/01/30 01:00:55 fenner Exp % +.\" %FreeBSD: src/contrib/tcpdump/tcpdump.1,v 1.8.2.1 2001/07/26 22:30:02 fenner Exp % .\" .\" $FreeBSD: doc/ja_JP.eucJP/man/man1/tcpdump.1,v 1.14 2001/05/27 01:03:56 horikawa Exp $ -.TH TCPDUMP 1 "30 June 1997" +.TH TCPDUMP 1 "3 January 2001" .SH 名称 tcpdump \- ネットワーク上のトラフィックデータのダンプ .SH 書式 .na .B tcpdump [ .B \-adeflnNOpqRStvxX ] [ .B \-c .I count ] [ .B \-F .I file ] .br .ti +8 [ .B \-i .I interface ] [ .B \-m .I module ] [ .B \-r .I file ] [ .B \-s .I snaplen ] .br .ti +8 .br .ti +8 [ .B \-T .I type ] [ .B \-w .I file ] .br .ti +8 [ +.B \-E +.I algo:secret +] +[ .I expression ] .br .ad .SH 解説 .LP \fItcpdump\fP は、オプションで指定されたネットワークインタフェース上で 取得可能なパケットのヘッダのうち \fIexpression\fP にマッチするものを出力 します。 .LP .B SunOS 上の nit ないし bpf の場合: .I tcpdump を実行するには、 .I /dev/nit ないし .IR /dev/bpf* への読み込みアクセス権が必要です。 .B Solaris 上の dlpi の場合: .IR /dev/le -等のネットワーク仮想デバイスへの読み込みアクセス権が必要です。 +等のネットワーク仮想デバイスへの読み書きアクセス権が必要です。 .B HP-UX 上の dlpi の場合: -root か root に setuid されてインストールされている場合のみ実行可能です。 +使用者が root であるか、 +プログラムが root に setuid されてインストールされている場合のみ実行可能です。 .B IRIX 上の snoop の場合: -root か root に setuid されてインストールされている場合のみ実行可能です。 +使用者が root であるか、 +プログラムが root に setuid されてインストールされている場合のみ実行可能です。 .B Linux の場合: -root か root に setuid されてインストールされている場合のみ実行可能です。 +使用者が root であるか、 +プログラムが root に setuid されてインストールされている場合のみ実行可能です。 .B Ultrix および Digital UNIX の場合: スーパユーザが、 .IR pfconfig (8) を用いて promiscuous-mode での操作を許可していれば、どのユーザも .BR tcpdump を起動できます。 .B BSD の場合: .IR /dev/bpf* への読み込みアクセス権が必要です。 .SH オプション .TP .B \-a ネットワークアドレスとブロードキャストアドレスを名前に変換しようとします。 .TP .B \-c \fIcount\fP で指定した数のパケットを受信した後に終了します。 .TP .B \-d 解釈されたパケットマッチングコードを読みやすい形に整形した後、 標準出力にダンプして停止します。 .TP .B \-dd .B C プログラムの断片の形でパケットマッチングコードをダンプします。 .TP .B \-ddd (先頭に個数を付加した) 十進数の形でパケットマッチングコードをダンプします。 .TP .B \-e 各ダンプ行ごとに、リンクレベルのヘッダを出力します。 .TP +.B \-E +\fIalgo:secret\fP を、IPsec ESP パケットの解読に使用します。 +アルゴリズムは +\fBdes-cbc\fP, +\fB3des-cbc\fP, +\fBblowfish-cbc\fP, +\fBrc3-cbc\fP, +\fBcast128-cbc\fP, +\fBnone\fP +のいずれかです。 +デフォルトは \fBdes-cbc\fP です。 +パケット解読能力は、 +\fItcpdump\fP が暗号機能付きでコンパイルされた場合のみ存在します。 +\fIsecret\fP は、ESP 秘密鍵の ASCII テキストです。 +現状、任意の 2 進数値を使用できません。 +本オプションは、RFC1827 ESP ではなく、RFC2406 ESP を仮定します。 +本オプションは、デバッグ専用であり、 +本当の「秘密」鍵に対する使用は勧められません。 +IPset 秘密鍵をコマンドラインに置くと、 +.IR ps (1) +等によって他者に見えてしまいます。 +.TP .B \-f 外部ホストの IP アドレスについては、シンボルでなく数値で表示します。 (本オプションは、Sun の yp サーバに重大な障害が発生するのを回避するこ とを意図しています。\(em 通常は、Sun の yp サーバは、ローカルに存在しない IP アドレスを永久に変換しつづけてハングします。) .TP .B \-F フィルタの表現として、\fIfile\fP に記述してある内容を用います。 コマンドラインで指定された追加表現は、無視されます。 .TP .B \-i \fIinterface\fP で指定されたインタフェースを監視します。 指定されない場合には、\fItcpdump\fP はシステムインタフェースリストの中で 最も小さい番号の稼働中のものを検索し、監視するインタフェースとして設定 します (ループバックインタフェースは検索しません)。 この動作は、最初にインタフェースが選択された時点で終了します。 +.IP +2.2 以降のカーネルの Linux システムでは、 +.I interface +引数 ``any'' を指定して全インタフェースからのパケットを捕捉可能です。 +``any'' デバイスでの捕捉は、promiscuous-mode ではないことに注意してください。 .TP .B \-l 標準出力を行バッファリングにします。データを捕捉しつつ、 そのデータを見たい場合には、本オプションは有効です。例えば .br ``tcpdump\ \ \-l\ \ |\ \ tee dat'' や ``tcpdump\ \ \-l \ \ > dat\ \ &\ \ tail\ \ \-f\ \ dat'' のように使用します。 .TP .B \-n アドレス (IP アドレスやポート番号など) を名前に変換しません。 .TP .B \-N ホスト名のうち、ドメイン名の表示をしません。例えば、本オプションを 指定すると、``nic.ddn.mil'' とは表示されず、かわりに ``nic'' とだけ表示し ます。 .TP .B \-m SMI MIB モジュールの定義を、ファイル \fImodule\fR からロードします。 -複数の MIB モジュールを tcpdump にロードするために、 +複数の MIB モジュールを \fItcpdump\fP にロードするために、 本オプションを複数回使用可能です。 .TP .B \-O パケットマッチングコードのオプティマイザを動かしません。本オプションは、 オプティマイザ中のバグを疑う場合にのみ有効なものです。 .TP .B \-p ネットワークインタフェースを、promiscuous mode に設定しません。 ネットワークインタフェースは、何らかの理由により promiscuous mode に設定 されることもあり得るということに注意してください。ゆえに `-p' オプションは、`ether host {local-hw-addr} or ether broadcast' の短縮形として使うことは出来ません。 .TP .B \-q 素早い (静かな?) 出力を行ないます。出力する行を短くするために、通常出力 されるプロトコル情報の一部は出力されません。 .TP .B \-r パケットを、\fIfile\fR で指定したファイル (-w オプションで作成されます) か ら読み込みます。\fIfile\fR として``-''が指定された場合は標準入力が用いら れます。 .TP .B \-s デフォルトの 68 バイト (SunOS の NIT では最小値は実際には 96) ではなくて、 \fIsnaplen\fP だけのデータを各パケットから取得します。68 バイトという データ長は、IP, ICMP, TCP, UDP のパケットを取得する分には十分ですが、 ネームサーバや NFS のパケットについてはプロトコル情報が切り詰められるこ とがあります (これについては、以後の説明を参照して下さい)。 スナップショットが限られた量しかとれずに切り 詰められたパケットは、出力に ``[|\fIproto\fP]'' という文字列がいっしょ に表示されます。 \fIproto\fP は、切り詰めが行われたプロトコルレベルの名 前です。大きなスナップショットをとる場合には、それだけパケット処理の時 間がかかるということと、パケットバッファリング用のバッファの量が減ると いうことに注意してください。これにより、パケットが消失するかもしれませ ん。\fIsnaplen\fP の大きさを、必要なプロトコル情報を取得できる最小の値に とどめるようにしてください。 +\fIsnaplen\fP を 0 に設定すると、 +パケット全体の捕捉に必要な長さを使用することを意味します。 .TP .B \-T "\fIexpression\fP" により選択されたパケットを強制的に \fItype\fR で 指定されたタイプと解釈します。有効なタイプは、 +\fBcnfp\fR (Cisco NetFlow プロトコル), \fBrpc\fR (リモートプロシージャコール) \fBrtp\fR (リアルタイムアプリケーションプロトコル) \fBrtcp\fR (リアルタイムアプリケーション制御プロトコル) \fBsnmp\fR (シンプルネットワークマネージメントプロトコル) \fBvat\fR (ビジュアルオーディオツール) \fBwb\fR (ディストリビューテッドホワイトボード) です。 .TP .B \-R ESP/AH パケットが古い仕様 (RFC1825 から RFC1829) に基いているものと仮定します。 指定すると、\fItcpdump\fP はリレー防止フィールドを表示しません。 ESP/AH 仕様にはプロトコルバージョンフィールドがありませんので、 \fItcpdump\fP は ESP/AH プロトコルのバージョンを推定できません、 .TP .B \-S TCP シーケンス番号を相対番号ではなく、絶対番号で出力します。 .TP .B \-t 各ダンプ行のタイムスタンプを出力しません。 .TP .B \-tt -各行毎にタイムスタンプを人間が読みやすい形に変換せずに出力します。 +各ダンプ行毎にタイムスタンプを人間が読みやすい形に変換せずに出力します。 +.TP +.B \-ttt +直前のダンプ行と現在のダンプ行の差分 (マイクロ秒単位) を表示します。 +.TP +.B \-tttt +各ダンプ行で、デフォルト書式でタイムスタンプを表示し、その前に日付を付けます。 .TP .B \-v (少しではありますが) 出力情報を増やします。例えば、IP パケット中の -TTL や、サービス情報の型を出力します。 +TTL、識別、全長、IP パケット中のオプションが表示されます。 +追加のパケットの完全性確認が有効になります。 +これは例えば IP および ICMP のヘッダのチェックサムです。 .TP .B \-vv さらに多くの情報を出力します。例えば、NFS の返答パケットの追加 フィールドを出力します。 .TP .B \-vvv もっと多くの情報を出力します。例えば、telnet \fBSB\fP ... \fBSE\fP オプションが完全に表示されます。 .B \-X 付きでは、telnet オプションが 16 進数で表示されます。 .TP .B \-w 受信した生パケットを、解析したり画面に出力したりせずに \fIfile\fR で指定 したファイルに出力します。本オプションを用いて取得したパケットは \-r オプションを用いることで情報を見ることができます。\fIfile\fR で指定す るファイル名が ``-'' の場合には、標準出力を用います。 .TP .B \-x リンクレベルヘッダを除いた各パケットの内容を 16 進出力します。 パケットサイズが .I snaplen バイトより小さい場合にはパケットの全部の内容を、それ以外の場合には、 .I snaplen バイト分のデータをパケットごとに出力します。 .TP .B \-X 16 進出力時に、ASCII もまた表示します。 .B \-x もまた指定されると、パケットが 16 進数と ASCII の組み合わせで表示されます。 新規プロトコルを解析するのに非常に便利です。 .B \-x が指定されないと、 一部のパケットの一部が16 進数と ASCII の組み合わせで表示されます。 .IP "\fI expression\fP" .RS ダンプするパケットを選択します。\fIexpression\ が指定されない場合には、 ネットワーク上のすべてのパケットがダンプ対象になります。それ以外の場 合には、\fIexpression\fP の条件が真になるパケットのみダンプします。 .LP \fIexpression\fP は、1 つ以上の .I プリミティブ から成り立ちます。 プリミティブは通常 1 つ以上の限定子のついた .I id (名前もしくは番号) から成り立ちます。限定子は、3 種類あります。 .IP \fI型\fP 限定子は id 名や番号が参照するものの種類を指します。型には -.BR host 、 -.B net 、 -.B port +.BR host , +.BR net , +.B port があります。例えば、`host foo', `net 128.3', `port 20' のように用います。 型限定子が指定されない場合には、 .B host が指定されたものとみなされます。 .IP \fI方向\fP 限定子は、 パケットが .I id へ出ていく方向か、 .I id から来る方向か、 もしくはその両方かという、特定の転送方向を指定します。 指定可能な方向は、 -.BR src、 -.BR dst、 -.B "src or dst"、 +.BR src , +.BR dst , +.BR "src or dst" , .BR "src and dst" の 4 つです。 -例えば、`src foo'、 `dst net 128.3'、 `src or dst port ftp-data' のように +例えば、`src foo', `dst net 128.3', `src or dst port ftp-data' のように 指定します。もし方向限定子が指定されない場合には、 .B "src or dst" が指定されたものとみなします。 `null' リンクレイヤ (つまり、slip などポイント・トゥ・ポイント・プロトコル) では、 必要な方向を指定するのに .B inbound や .B outbound 限定子を用いる事ができます。 .IP \fIプロトコル\fP 限定子は、特定のプロトコルに一致するパケットのみに制限します。 プロトコルとして指定可能なものは、 -.BR ether, -.BR fddi, -.BR ip, +.BR ether , +.BR fddi , +.BR tr , +.BR ip , .BR ip6 , -.BR arp, -.BR rarp, -.BR decnet, -.BR lat, -.BR sca, -.BR moprc, -.BR mopdl, -.BR iso, -.BR esis, -.BR isis, +.BR arp , +.BR rarp , +.BR decnet , +.BR lat , +.BR sca , +.BR moprc , +.BR mopdl , +.BR iso , +.BR esis , +.BR isis , .BR icmp , .BR icmp6 , -.B tcp, +.B tcp , .BR udp です。 -例えば `ether src foo'、 `arp net 128.3'、 `tcp port 21' のように使用 +例えば `ether src foo', `arp net 128.3', `tcp port 21' のように使用 します。もしプロトコル限定子が指定されない場合には、上記のプロトコルの うち、型に矛盾しないすべてのものが指定されたものとみなします。 例えば `src foo' は、`(ip or arp or rarp) src foo' (これが正しい形式でな い事を除いて) と、`net bar' は `(ip or arp or rarp) net bar' と同義であ り、また `port 53' は `(tcp or udp) port 53' と同義です。 .LP -[`fddi' は実際には `ether' の別名になっています。解析ではこれらを``特定の -ネットワークインタフェースで使われるデータリンクレベル''を意味するもの -として同様に扱います。FDDI ヘッダはイーサネットに似た送信元と宛先 +[`fddi' は実際には `ether' の別名になっています。解析ではこれらを「特定の +ネットワークインタフェースで使われるデータリンクレベル」を意味するもの +として同様に扱います。FDDI ヘッダはイーサネットに似た始点と終点 アドレスを含み、そしてしばしばイーサネットに似たパケット型を含むので、 イーサネットのフィールドと同じように FDDI のフィールドをフィルタリング できます。FDDI ヘッダは他のフィールドも含みますが、フィルタ表現の中で -明示的にそれらを指定することはできません。] +明示的にそれらを指定することはできません。 +.LP +同様に、`tr' は `ether' の別名です。 +直前の段落における FDDI ヘッダに関する記述は、 +Token Ring ヘッダにも適用されます。] .LP -上記に追加して、いくつかの特別な`プリミティブ'キーワードがあります。 +上記に追加して、いくつかの特別な「プリミティブ」キーワードがあります。 これらのキーワードは -.BR gateway, -.BR broadcast, -.BR less, -.B greater, +.BR gateway , +.BR broadcast , +.BR less , +.B greater と算術演算表現 です。これらの後ろにパターンが続く事はありません。 プリミティブキーワードについては後述します。 .LP より複雑なフィルタの表現は、プリミティブの結合に -.BR and, -.B or, +.BR and , +.BR or , .B not を用いることで実現されます。例えば、 `host foo and not port ftp and not port ftp-data' です。 タイプ量を少なくするために、同一の限定子リストは、省略することが可能です。 例えば、`tcp dst port ftp or ftp-data or domain' は、 `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain' と同じ意味です。 .LP 許されるプリミティブは、以下の通りです。 .IP "\fBdst host \fIhost\fR" -IPv4/v6 パケットの宛先フィールドが \fIhost\fP で指定したものの場合に、 +IPv4/v6 パケットの終点フィールドが \fIhost\fP で指定したものの場合に、 真となります。 \fIhost\fP は、ホスト名もしくは IP アドレスです。 .IP "\fBsrc host \fIhost\fR" -IPv4/v6 パケットの送信元フィールドが \fIhost\fP で指定したものの場合に、 +IPv4/v6 パケットの始点フィールドが \fIhost\fP で指定したものの場合に、 真となります。 .IP "\fBhost \fIhost\fP -IPv4/v6 パケットの送信元フィールドもしくは宛先フィールドが +IPv4/v6 パケットの始点フィールドもしくは終点フィールドが \fIhost\fP で指定したものの場合に、 真となります。 上記の host プリミティブの表現には、 \fBip\fP, \fBarp\fP, \fBrarp\fP, \fBip6\fP を 以下のように付加することが可能です。 .in +.5i .nf \fBip host \fIhost\fR .fi .in -.5i という表記は、 .in +.5i .nf \fBether proto \fI\\ip\fB and host \fIhost\fR .fi .in -.5i と同じ意味です。 \fIhost\fR が複数の IP アドレスを持つホスト名であった場合、それぞれのアドレス について照合を検査します。 .IP "\fBether dst \fIehost\fP -イーサネットパケットの宛先アドレスが \fIehost\fP だった場合に、真となります。 +イーサネットパケットの終点アドレスが \fIehost\fP だった場合に、真となります。 \fIehost\fP は、/etc/ethers に記述された名前もしくはイーサネットアドレスの値が用いられます (イーサネットアドレスの形式については、 .IR ethers (3N) を参照)。 .IP "\fBether src \fIehost\fP -イーサネットパケットの送信元アドレスが \fIehost\fP だった場合に、真となります。 +イーサネットパケットの始点アドレスが \fIehost\fP だった場合に、真となります。 .IP "\fBether host \fIehost\fP -イーサネットパケットの送信元アドレスもしくは宛先アドレスが \fIehost\fP だった +イーサネットパケットの始点アドレスもしくは終点アドレスが \fIehost\fP だった 場合に、真となります。 .IP "\fBgateway\fP \fIhost\fP パケットが \fIhost\fP で指定したアドレスのマシンをゲートウェイとしている場合に -真となります。言い替えると、送信元もしくは宛先のイーサネットアドレスが -\fIhost\fP であり、送信元と宛先のどちらの IP アドレスも \fIhost\fP でない +真となります。言い替えると、始点もしくは終点のイーサネットアドレスが +\fIhost\fP であり、始点と終点のどちらの IP アドレスも \fIhost\fP でない ということです。 \fIhost\fP は /etc/hosts ファイルと /etc/ethers の両方で定義されている名前を 指定する必要があります (等価な表現は、 .in +.5i .nf \fBether host \fIehost \fBand not host \fIhost\fR .fi .in -.5i です。この場合 \fIhost / ehost\fP のどちらにも名前もしくは値を用いることが 可能になります。) この構文は、現在のところ、IPv6 が有効な構成では動作しません。 .IP "\fBdst net \fInet\fR" -パケットの宛先 IPv4/v6 アドレスが、 +パケットの終点 IPv4/v6 アドレスが、 \fInet\fP で指定されたネットワークに属するものである場合に、 真となります。 \fInet\fP は、アドレス値もしくは /etc/networks で 定義されたネットワーク名のいずれかを指定可能です (詳しくは、\fInetworks(4)\fP を参照)。 .IP "\fBsrc net \fInet\fR" -パケットの送信元 IPv4/v6 アドレスが、 +パケットの始点 IPv4/v6 アドレスが、 \fInet\fP で指定されたネットワークに属するものである場合に、真となります。 .IP "\fBnet \fInet\fR" -送信元 IPv4/v6 アドレスもしくは宛先 IPv4/v6 アドレスが \fInet\fP で指定された +始点 IPv4/v6 アドレスもしくは終点 IPv4/v6 アドレスが \fInet\fP で指定された ネットワークに属するものである場合に、真となります。 .IP "\fBnet \fInet\fR \fBmask \fImask\fR" IP アドレスが、指定された \fInet\fR および netmask の値で決まる ネットワークに属するものである場合に、真となります。 \fBsrc\fR や \fBdst\fR を指定する事も可能です。 この構文は IPv6 \fInet\fR では正当でないことに注意してください。 .IP "\fBnet \fInet\fR/\fIlen\fR" IPv4/v6 アドレスが、 指定された \fInet\fR および \fIlen\fR のビット長のネットマスクで 決まるネットワークに属するものである場合に、真となります。 \fBsrc\fR や \fBdst\fR を指定する事も可能です。 .IP "\fBdst port \fIport\fR" -パケットが ip/tcp, ip/udp, ip6/tcp, ip6/udp のいずれかであり、宛先 +パケットが ip/tcp, ip/udp, ip6/tcp, ip6/udp のいずれかであり、終点 ポート番号が \fIport\fP の場合に、真となります。 \fIport\fP で指定されるポート番号は、値もしくは /etc/services で定義 されているサービス名で指定可能です ( .IR tcp (4P) や .IR udp (4P) を参照)。 ポート番号がサービス名にて指定された場合、 ポート番号とプロトコルの両方がチェック 対象になります。ポート番号や、あいまいなサービス名が指定された場合には、 ポート番号のみがチェック対象となります(例えば、\fBdst port 513\fR は、 -tcp/login と udp/who の両方を出力し、\fBport domain\fR は、tcp/domain +tcp/login と udp/who の両方を出力し、\fBport domain\fR は、tcp/domain と udp/domain の両方を出力します)。 .IP "\fBsrc port \fIport\fR" -パケットが \fIport\fP で指定した送信元ポート番号を保持している場合に +パケットが \fIport\fP で指定した始点ポート番号を保持している場合に 真となります。 .IP "\fBport \fIport\fR" -パケットの送信元ポート番号もしくは宛先ポート番号が \fIport\fP の場合に、 +パケットの始点ポート番号もしくは終点ポート番号が \fIport\fP の場合に、 真となります。 上記のポート番号の指定については、すべてキーワード \fBtcp\fP もし くは \fBudp\fP を用いて、ある程度候補を絞り込むことが可能です。例えば、 .in +.5i .nf \fBtcp src port \fIport\fR .fi .in -.5i と指定した場合には、tcp パケットのみが条件一致の評価対象となります。 .IP "\fBless \fIlength\fR" パケットが \fIlength\fP で指定した長さ以下の場合、真となります。 これは、 .in +.5i .nf \fBlen <= \fIlength\fR .fi .in -.5i の指定と等価です。 .IP "\fBgreater \fIlength\fR" パケットが \fIlength\fP で指定した長さ以上の場合、真となります。 これは、 .in +.5i .nf \fBlen >= \fIlength\fR .fi .in -.5i と等価です。 .IP "\fBip proto \fIprotocol\fR" パケットが \fIprotocol\fP で指定したプロトコル型の IP パケット ( 詳細は .IR ip (4P) を参照) の場合に、真となります。 \fIprotocol\fP は、数字もしくは -\fIicmp\fP, \fIigrp\fP, \fIudp\fP, \fInd\fP, \fItcp\fP +\fIicmp\fP, \fIicmp6\fP, \fIigmp\fP, \fIigrp\fP, \fIpim\fP, \fIah\fP, +\fIesp\fP, \fIudp\fP, or \fItcp\fP のいずれかの名前が指定可能です。\fItcp\fP, \fIudp\fP, \fIicmp\fP の 各識別子はキーワードでもであり、バックスラッシュ (\\)(C-shell では \\\\) を用 いてエスケープしなければならないことに注意してください。 このプリミティブはプロトコルヘッダチェーンを追跡しないことに注意してください。 .IP "\fBip6 proto \fIprotocol\fR" -パケットがプロトコルタイプ \fIprotocol\fP の IPv6 パケットである場合に、 +パケットがプロトコル型 \fIprotocol\fP の IPv6 パケットである場合に、 真となります。 このプリミティブはプロトコルヘッダチェーンを追跡しないことに注意してください。 .IP "\fBip6 protochain \fIprotocol\fR" パケットが IPv6 パケットであり、 プロトコルヘッダチェーン中にタイプ \fIprotocol\fR のプロトコルヘッダが 含まれるばあい に、真となります。 例えば .in +.5i .nf \fBip6 protochain 6\fR .fi .in -.5i は、TCP プロトコルヘッダがプロトコルヘッダチェーン中に含まれる 任意のパケットにマッチします。 パケット中には、IPv6 ヘッダと TCP ヘッダの間に、 例えば、認証ヘッダ、ルーティングヘッダ、ホップ毎のオプションヘッダが 含まれ得ます。 このプリミティブが出力する BPF コードは、 複雑であり \fItcpdump\fP 中の BPF 最適化コードでは最適化できません。 よって、この動作はいくぶん遅いです。 .IP "\fBip protochain \fIprotocol\fR" Equivalent to \fBip6 protochain \fIprotocol\fR, but this is for IPv4. .IP "\fBether broadcast\fR" パケットがイーサネットブロードキャストパケットの場合に、真となります。 \fIether\fP キーワードは、省略可能です。 .IP "\fBip broadcast\fR" パケットが IP ブロードキャストパケットの場合に、真となります。オール 1 と オール 0 の二つの形式のブロードキャストアドレスを検査し、そして ローカルサブネットマスクを調べます。 .IP "\fBether multicast\fR" パケットがイーサネットマルチキャストパケットの場合に、真となります。 \fIether\fP キーワードは、省略可能です。 なお、この指定は、`\fBether[0] & 1 != 0\fP' の短縮系です。 .IP "\fBip multicast\fR" パケットが IP マルチキャストパケットの場合に、真となります。 .IP "\fBip6 multicast\fR" パケットが IPv6 マルチキャストパケットの場合に、真となります。 .IP "\fBether proto \fIprotocol\fR" パケットが \fIprotocol\fR で指定した ether 型の場合に、真になります。 -\fIprotocol\fP は、数字もしくは -\fIip\fP, \fIip6\fP, \fIarp\fP, \fIrarp\fP のような -名前を指定可能です。 +\fIprotocol\fP は、数字もしくは +\fIip\fP, \fIip6\fP, \fIarp\fP, \fIrarp\fP, \fIatalk\fP, \fIaarp\fP, +\fIdecnet\fP, \fIsca\fP, \fIlat\fP, \fImopdl\fP, \fImoprc\fP, +\fIiso\fP +のいずれかの名前を指定可能です。 これらの識別子はキーワードでもあり、バックスラッシュ (\\) でエスケープし なければならないことに注意してください。 [FDDI の場合 (例えば `\fBfddi protocol arp\fR')、プロトコルの識別は IEEE802.2 の論理リンク制御 (LLC) ヘッダによって行われます。通常これは FDDI ヘッダの上の層にあります。\fItcpdump\fP は、プロトコル識別子で フィルタリングするときは、すべての FDDI パケットは LLC ヘッダを含み、 -かつその LLC ヘッダがいわゆる SNAP 形式であると仮定します。] +かつその LLC ヘッダがいわゆる SNAP 形式であると仮定します。 +Token Ring も同様です。] .IP "\fBdecnet src \fIhost\fR" -DECNET パケットの送信元アドレスが +DECNET パケットの始点アドレスが .IR host の場合に、真となります。これは ``10.123'' という形式のアドレスでも DECNET の ホスト名でも構いません。[DECNET のホスト名は DECNET を動かすように設定され た Ultrix システムのみでサポートされます。] .IP "\fBdecnet dst \fIhost\fR" -DECNET パケットの宛先アドレスが +DECNET パケットの終点アドレスが .IR host の場合に、真となります。 .IP "\fBdecnet host \fIhost\fR" -DECNET パケットの送信元あるいは宛先アドレスが +DECNET パケットの始点あるいは終点アドレスが .IR host の場合に、真となります。 -.IP "\fBip\fR, \fBip6\fR, \fBarp\fR, \fBrarp\fR, \fBdecnet\fR, \fBiso\fR" +.IP "\fBip\fR, \fBip6\fR, \fBarp\fR, \fBrarp\fR, \fBatalk\fR, \fBaarp\fR, \fBdecnet\fR, \fBiso\fR" .in +.5i .nf \fBether proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 .IP "\fBlat\fR, \fBmoprc\fR, \fBmopdl\fR" .in +.5i .nf \fBether proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 \fItcpdump\fP は今のところこれらのプロトコルを解釈できない事に注意して ください。 +.IP "\fBvlan \fI[vlan_id]\fR" +パケットが IEEE 802.1Q VLAN パケットの場合、真になります。 +\fI[vlan_id]\fR が指定された場合、 +パケットが指定された \fIvlan_id\fR を持つ場合のみ、真になります。 +\fIexpression\fR 中の最初の \fBvlan\fR キーワードが、 +パケットが VLAN パケットであることを仮定して、 +残りの \fIexpression\fR のデコード用オフセットを変更してしまうことに +注意してください。 .IP "\fBtcp\fR, \fBudp\fR, \fBicmp\fR" .in +.5i .nf \fBip proto \fIp\fR\fB or ip6 proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 -.IP "\fBesis\fR, \fBisis\fR" +.IP "\fBiso proto \fIprotocol\fR" +パケットがプロトコル型 \fIprotocol\fP の OSI パケットの場合、真になります。 +\fIprotocol\fP は数値もしくは +\fIclnp\fP, \fIesis\fP, \fIisis\fP +という名前のいずれかです。 +.IP "\fBclnp\fR, \fBesis\fR, \fBisis\fR" .in +.5i .nf \fBiso proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 \fItcpdump\fR はこれらのプロトコルを完全には解釈できない事に注意して ください。 .IP "\fIexpr relop expr\fR" \fIrelop\fRは、>, <, >=, <=, =, != のいずれかであり、\fIexpr\fR の部分に は、(標準 C 言語の構文で表現された) 整数定数や通常の二項演算子 [+, -, *, /, &, |]、length 演算子、そして特殊なパケットデータへのアクセス演算子などか らなる算術表現が入って、その関係が成立する場合に、真となります。 パケット内部のデータにアクセスするためには、以下の構文を用います。 .in +.5i .nf \fIproto\fB [ \fIexpr\fB : \fIsize\fB ]\fR .fi .in -.5i -\fIproto\fRは、\fBether, fddi, ip, arp, rarp, tcp, udp, icmp, ip6\fR +\fIproto\fRは、\fBether, fddi, tr, ip, arp, rarp, tcp, udp, icmp, ip6\fR のいずれかであり、インデックス操作を行うプロトコル層を指示 します。 -\fItcp, udp\fR および他の上位層プロトコルタイプは、 +\fItcp, udp\fR および他の上位層プロトコル型は、 IPv4 のみに適用され、IPv6 には適用されないことに注意してください (これは将来修正されます)。 指示したプロトコル層からの相対バイトオフセットは、\fIexpr\fR で指定します。 \fIsize\fR は省略可能で、取得するフィールドのデータ長を表します。 データ長としては、1,2,4 のいずれかを指定することが可能であり、デフォルトでは 1 が指定されたものとみなされます。 キーワード \fBlen\fP で示されるデータ長演算子は、パケット長を与えます。 例えば、`\fBether[0] & 1 != 0\fP' は、全てのマルチキャストパケットを捕捉します。 `\fBip[0] & 0xf != 5\fP' という表現は、すべてのオプション付きIPパケットを捕捉す ることを意味します。`\fBip[6:2] & 0x1fff = 0\fP' という表現は、フラグメントのな いデータグラムパケット、もしくはフラグメント化されたデータグラムのうち 最初のフラグメントを捕捉します。 この検査は、\fBtcp\fP および \fBudp\fP のインデックス操作においては、暗黙のうち に適用されます。 例えば、\fBtcp[0]\fP は常に TCP ヘッダの先頭バイトを指し、 決して各フラグメントの先頭バイトを指すものではありません。 .LP プリミティブは、以下のように組み合わせることが可能です。 .IP 括弧で括られた一連のプリミティブや演算子 (括弧はシェルの特殊文字なのでエスケープする必要があります)。 .IP 否定 (`\fB!\fP' or `\fBnot\fP'). .IP 論理積 (`\fB&&\fP' or `\fBand\fP'). .IP 論理和 (`\fB||\fP' or `\fBor\fP'). .LP 否定は、最も高い演算優先度を持ちます。論理和と論理積は、同じ演算優先度を持ち、 左から右へ評価されます。論理積の場合には、単に識別子を並べるのではなく、 明示的に \fBand\fR を使用しなければならないことに注意して下さい。 .LP キーワードなしで識別子が与えられている場合には、最も最近用いられたキーワードが 付加されているものと仮定されます。 例えば、 .in +.5i .nf \fBnot host vs and ace\fR .fi .in -.5i は、 .in +.5i .nf \fBnot host vs and host ace\fR .fi .in -.5i の短縮形ですが、 .in +.5i .nf \fBnot ( host vs or ace )\fR .fi .in -.5i と混同してしまいがちなので気をつけましょう。 .LP 引数 expression は、単一の引数としても複数の引数としても、どちらか便利な -方で、tcpdump に渡すことができます。 +方で、\fItcpdump\fP に渡すことができます。 一般的に、引数がシェルのメタキャラクタを含む場合、その引数をクォート された単一の引数としてプログラムに渡す方が容易です。 複数の引数は、解析される前にスペースで連結されます。 .SH 使用例 .LP \fIsundown\fP に到達する、もしくはそこから送信されるパケットのすべてを 表示する場合には、以下のように実行します。 .RS .nf \fBtcpdump host sundown\fP .fi .RE .LP \fIhelios\fR と、\fIhot\fR もしくは \fIace\fR の間のトラフィックを表示する 場合には、以下のように実行します。 .RS .nf \fBtcpdump host helios and \\( hot or ace \\)\fP .fi .RE .LP \fIace\fR と、\fIhelios\fR 以外のホストとの間でやりとりされるすべての IP パケットを表示する場合には、以下のように実行します。 .RS .nf \fBtcpdump ip host ace and not helios\fP .fi .RE .LP ローカルなホストと Berkeley のホストとの間でやりとりされるすべての トラフィックを表示する場合には、以下のように実行します。 .RS .nf .B tcpdump net ucb-ether .fi .RE .LP インターネットゲートウェイ \fIsnup\fP を通過するすべての ftp トラフィックを表示する場合には、以下のように実行します (シェルが括弧を誤って解釈しないよう、フィルタを表現する引数がクォートさ れていることに注意して下さい)。 .RS .nf .B tcpdump 'gateway snup and (port ftp or ftp-data)' .fi .RE .LP -送信元アドレスと宛先アドレスの両方がローカルネットワーク内のホスト +始点アドレスと終点アドレスの両方がローカルネットワーク内のホスト のものでないトラフィックについて表示する場合には、以下のように実行しま す (実行するホストが他のネットワークに対するゲートウェイの場合、そのホスト が属すローカルネットワークでは、このコマンドは成功しないでしょう)。 .RS .nf .B tcpdump ip and not net \fIlocalnet\fP .fi .RE .LP ローカルネットワーク外のホストとの通信において、TCP による各通信単位 のスタートパケットとエンドパケット (SYN と FIN パケット) を表示するには、以 下のように実行します。 .RS .nf .B tcpdump 'tcp[13] & 3 != 0 and not src and dst net \fIlocalnet\fP' .fi .RE .LP ゲートウェイ \fIsnup\fP を中継される IP パケットのうち、576 バイトより大きいもの を表示するには、以下のように実行します。 .RS .nf .B tcpdump 'gateway snup and ip[2:2] > 576' .fi .RE .LP イーサネット上でブロードキャストもしくはマルチキャストを経由して送られる もの以外の IP ブロードキャストもしくはマルチキャストパケットを表示するには、 以下のように実行します。 .RS .nf .B tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224' .fi .RE .LP echo 要求/応答以外 (つまり ping パケット以外) の全ての ICMP パケットを 表示するには、以下のように実行します。 .RS .nf .B tcpdump 'icmp[0] != 8 and icmp[0] != 0' .fi .RE .SH 出力形式 .LP \fItcpdump\fP の出力は、プロトコル依存です。以下の説明では、簡単な パラメータの記述と、おおよそのフォーマットの説明を行ないます。 .de HD .sp 1.5 .B .. .HD リンクレベルヘッダ .LP もし '-e' オプションが指定されると、リンクレベルヘッダが出力されます。 -イーサネットにおいては、送信元と宛先のアドレス、プロトコル、そして +イーサネットにおいては、始点と終点のアドレス、プロトコル、そして パケット長が出力されます。 .LP FDDI ネットワークにおいては、'-e' オプションが指定されると \fItcpdump\fP -は、`フレーム制御'フィールド、発信元と宛先アドレス、そしてパケット長を -出力します。`フレーム制御'フィールドはパケットの残りの部分の解釈を決定 +は、「フレーム制御」フィールド、発信元と終点アドレス、そしてパケット長を +出力します。「フレーム制御」フィールドはパケットの残りの部分の解釈を決定 します。(IP データグラムを含むような) 通常のパケットは `async' パケットで、 0 から 7 の間の優先順位を持ちます。例えば、`\fBasync4\fR' です。こうした パケットは IEEE802.2 の論理リンク制御 (LLC) パケットを含むと仮定されます。 LLC ヘッダは、それが ISO データグラムでない場合やいわゆる SNAP パケットのと きには出力されます。 .LP -\fI (注意:以下の記述は、利用者が RFC1144 に記述されている SLIP 圧縮 +Token Ring ネットワークでは、'-e' オプションを指定すると、\fItcpdump\fP は、 +アクセス制御」と「フレーム制御」のフィールド、 +始点と終点のアドレス、パケット長を表示します。 +FDDI ネットワークでは、パケットは LLC パケットを含むと仮定されます。 +オプション '-e' の指定の有無にかかわらず、 +始点経路制御されたパケットに対しては、始点経路制御情報が表示されます。 +.LP +\fI (注意: 以下の記述は、利用者が RFC1144 に記述されている SLIP 圧縮 アルゴリズムについての知識がある前提で書いています。)\fP .LP SLIP によるリンクにおいては、方向指示子 (``I'' が入力方向、``O'' が出力方向)、パケット型、そして圧縮情報が出力されます。 パケット型は、最初に出力されます。パケット型には \fIip\fP、\fIutcp\fP、そして \fIctcp\fP の 3 つがあります。 \fIip\fR 型パケットの場合、上記以上のリンク情報は表示されません。 TCP パケットの場合には、コネクション識別子がパケット型に続いて出力されます。 パケットが圧縮されている場合、符号化されたヘッダが出力されます。 特殊な場合は \fB*S+\fIn\fR や \fB*SA+\fIn\fR のように出力されます。ここ で \fIn\fR は、シーケンス番号 (もしくはシーケンス番号および ack) が変更された回 数です。特殊な場合でなければ、0 回以上の変更について出力されます。 変更は、U (緊急 (urgent) ポインタ)、W (ウィンドウ)、A (ack)、S (シーケンス番号)、 そして I (パケット ID) で示され、変動量 (+n or -n) もしくは新しい値 (=n) が続きます。 最後に、パケット内のデータの総量および圧縮ヘッダ長が出力されます。 .LP 例えば、以下の行は、出力方向の圧縮 TCP パケットを、暗黙のコネクション識別子 とともに表示しています。ack は 6 変わり、シーケンス番号は 49 変わり、パケット ID は 6 変わっています。3 バイトのデータと6 バイトの圧縮ヘッダが存在します。 .RS .nf \fBO ctcp * A+6 S+49 I+6 3 (6)\fP .fi .RE .HD ARP/RARP パケット .LP arp/rarp パケットの出力は、要求型とその引数を示してい ます。出力形式は、その出力のみで理解可能なように作られています。 以下に、ホスト \fIrtsg\fP からホスト \fIcsam\fP への `rlogin' 開始時の パケットの実例を示します。 .RS .nf .sp .5 \f(CWarp who-has csam tell rtsg -arp reply csam is-at CSAM\fP +arp reply csam is-at CSAM\fR .sp .5 .fi .RE 1行目は、ホスト rtsg が、ホスト csam のイーサネットアドレスを問い合わせる 目的で arp パケットを送信していることを意味します。ホスト csam は、自分自身 のイーサネットアドレスを返答しています (この例では、イーサネットアドレス は大文字で、インターネットアドレス部は小文字で表記しています)。 .LP \fBtcpdump \-n\fP として起動した場合には、少し冗長になります。 .RS .nf .sp .5 \f(CWarp who-has 128.3.254.6 tell 128.3.254.68 -arp reply 128.3.254.6 is-at 02:07:01:00:01:c4\fP +arp reply 128.3.254.6 is-at 02:07:01:00:01:c4\fR .fi .RE .LP \fBtcpdump \-e\fP として起動した場合には、最初のパケットはブロードキャスト パケットであり、次のパケットはポイントツーポイントのパケットであることが わかります。 .RS .nf .sp .5 \f(CWRTSG Broadcast 0806 64: arp who-has csam tell rtsg CSAM RTSG 0806 64: arp reply csam is-at CSAM\fP .sp .5 .fi .RE -最初のパケットについては、送信元のイーサネットアドレスは RTSG であり、 -宛先はイーサネットブロードキャストアドレス、型フィールドには 16 進数の値 +最初のパケットについては、始点のイーサネットアドレスは RTSG であり、 +終点はイーサネットブロードキャストアドレス、型フィールドには 16 進数の値 0806 (ETHER_ARP を意味します) が格納されており、総パケット長は 64 バイトである と表示しています。 .HD TCP パケット .LP \fI(注意:以下の記述は、RFC793 に記述されている TCP プロトコルについての知識 -があることを前提に記述されています。この知識がない場合、本記述と tcpdump の -いずれもあなたには役に立たないでしょう。)\fP +があることを前提に記述されています。この知識がない場合、本記述と +\fItcpdump\fP のいずれもあなたには役に立たないでしょう。)\fP .LP TCP プロトコル行の一般的な形式は、以下の通りです。 .RS .nf .sp .5 \fIsrc > dst: flags data-seqno ack window urgent options\fP .sp .5 .fi .RE -\fIsrc\fP と \fIdst\fP は、それぞれ送信元と宛先の IP アドレスと +\fIsrc\fP と \fIdst\fP は、それぞれ始点と終点の IP アドレスと ポート番号です。\fIflags\fP の部分には、S (SYN), F (FIN), P (PUSH), R (RST) の組み合わせ、もしくは単なる `.' (フラグなし) が入ります。 \fIdata-seqno\fP は、このパケット内のデータがシーケンス空間のどの部分に あたるかを示します (以下の例を参照して下さい)。 \fIack\fP は、本コネクション上を逆方向に次に流れるデータパケットの シーケンス番号です。 \fIwindow\fP は、本コネクションの逆方向のパケットを格納するバッファサイズ です。 \fIurg\fP は、パケット中に `urgent' (緊急) データが格納されていることを示しま す。 \fIoptions\fP は、例えば のように、アングルブラケット (大小記号) で 括られた tcp オプションです。 .LP \fIsrc、dst\fP、そして \fIflags\fP は、常に表示されます。他のフィールドは、 パケットの TCP ヘッダに依存し、表示できる場合だけ表示されます。 .LP 以下の例は、ホスト \fIrtsg\fP からホスト \fIcsam\fP への rlogin 開設時のシーケンスの一部です。 .RS .nf .sp .5 \s-2\f(CWrtsg.1023 > csam.login: S 768512:768512(0) win 4096 csam.login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096 rtsg.1023 > csam.login: . ack 1 win 4096 rtsg.1023 > csam.login: P 1:2(1) ack 1 win 4096 csam.login > rtsg.1023: . ack 2 win 4096 rtsg.1023 > csam.login: P 2:21(19) ack 1 win 4096 csam.login > rtsg.1023: P 1:2(1) ack 21 win 4077 csam.login > rtsg.1023: P 2:3(1) ack 21 win 4077 urg 1 -csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1\fP\s+2 +csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1\fR\s+2 .sp .5 .fi .RE 最初の行は、ホスト rtsg の TCP ポート 1023 番からホスト csam の \fIlogin\fP ポートに対してパケットを送信していることを意味します。\fBS\fP は、 パケットの \fISYN\fP フラグが設定されていることを意味します。 パケットのシーケンス番号は 768512 番であり、データは含みません。 -(表記は `first:last(nbytes)' であり、これは`シーケンス番号 \fIfirst\fP か +(表記は `first:last(nbytes)' であり、これは「シーケンス番号 \fIfirst\fP か ら \fIlast\fP までの \fIlast\fP を含まない \fInbytes\fP のユーザデータという -こと'を意味しています。) +こと」を意味しています。) このパケット中に ack はなく、有効な受信ウィンドウの大きさは 4096 バイトで あり、1024 バイトの最大セグメントサイズ要求を行なうオプションが付加され ています。 .LP csam は、rtsg から送られたパケットと類似したパケットを送り返しますが、 rtsg の送った SYN に対する ack が含まれるところが異なり ます。続いて、rtsg は csam の SYN に対する ack を返します。 `.' は、S (SYN), F (FIN), P (PUSH), R (RST) のいずれのフラグも 立っていないことを意味します。 パケットはデータを含まないため、データシーケンス番号は入りません。 ack シーケンス番号が小さい整数 (1) であることに注意して下さい。 -\fBtcpdump\fP は、初めて TCP の`通信'を検出すると、パケットから取得した +\fItcpdump\fP は、初めて TCP の「通信」を検出すると、パケットから取得した シーケンス番号を表示します。通信のその後のパケットについては、現在の パケットシーケンス番号と、この最初のシーケンス番号の間の差を表示します。 このことは、最初に取得した以降のシーケンス番号は、通信データストリーム の相対位置として解釈できることを意味します (最初の各方向のデータバイト は 1 です)。`-S' は、本機能を無効にし、元のシーケンス番号を表示します。 .LP 6 行目では、rtsg は csam に 19 バイトのデータを送信しています (rtsg \(-> csam の 方向の通信における、2 バイト目から 20 バイト目までのデータ)。PUSH フラグが このパケットでは設定されています。 7 行目では、csam は rtsg から 20 バイトまでのデータを受けとった旨の レスポンスを rtsg に返しています。csam の受信ウィンドウが19バイト小さくなっ たことから、これらのデータのほとんどは、ソケットバッファの中に存在する ことが分かります。 csam は、rtsg に 1 バイトのデータを送信しています。 8 行めと 9 行めでは、csam は緊急 (urgent) で PUSH フラグの設定された 2 バイトデータを送信しています。 .LP -スナップショットが小さ過ぎて \fBtcpdump\fP が +スナップショットが小さ過ぎて \fItcpdump\fP が TCP ヘッダ全体を捕えなかった場合、 可能な限りのヘッダを解釈し、``[|\fItcp\fP]'' を表示して 残りを解釈できなかったことを示します。 (短か過ぎるまたはヘッダを越えてしまうといった) 不正なオプションを ヘッダが持つ場合には、tcpdump は ``[\fIbad opt\fP]'' を表示して 残りのオプションを解釈しません (どこから開始したら良いのか分からないからです)。 ヘッダ長によりオプションが存在することが分かるが、 IP データグラム長がオプションがそこにあるために十分な長さではない場合に、 -tcpdump は ``[\fIbad hdr length\fP]'' を表示します。 +\fItcpdump\fP は ``[\fIbad hdr length\fP]'' を表示します。 +.HD +.B 特定フラグの組み合わせ (SYN-ACK, URG-ACK 等) による TCP パケットの捕捉 +.PP +TCP ヘッダの制御ビットセクションには、次の 6 ビットがあります: +.IP +.I URG | ACK | PSH | RST | SYN | FIN +.PP +TCP 接続の確立に使用されるパケットを見たいものとしましょう。 +新規接続を初期化する時、 +TCP は 3 ウェイハンドシェークプロトコルを使用することを思い出してください。 +TCP 制御ビットに関する接続の順番は次のようになります。 +.PP +.RS +1) 呼び出し側が SYN を送信 +.RE +.RS +2) 受信者が SYN, ACK で応答 +.RE +.RS +3) 呼び出し側が ACK を送信 +.RE +.PP +ここで、SYN ビットを持つパケットを捕捉したいとします (第 1 ステップ)。 +ステップ 2 のパケット (SYN-ACK) は不要で、 +最初の SYN だけが欲しいことに注意してください。 +必要なのは、\fItcpdump\fP の正しいフィルタ式です。 +.PP +オプション無しの TCP ヘッダの構造を思い出してください: +.PP +.nf + 0 15 31 +----------------------------------------------------------------- +| 始点ポート | 終点ポート | +----------------------------------------------------------------- +| シーケンス番号 | +----------------------------------------------------------------- +| 確認応答番号 | +----------------------------------------------------------------- +| HL | 予約 |U|A|P|R|S|F| ウィンドウサイズ | +----------------------------------------------------------------- +| TCP チェックサム | 緊急ポインタ | +----------------------------------------------------------------- +.fi +.PP +TCP ヘッダは、オプションが無ければ通常、20 オクテットのデータを持ちます。 +図の最初の行はオクテット 0 から 3 を示し、 +次の行はオクテット 4 から 7 を示す等となります。 +.PP +0 から数え始めると、必要な TCP 制御ビットはオクテット 13 にあります: +.PP +.nf + 0 7| 15| 23| 31 +----------------|---------------|---------------|---------------- +| HL | 予約 |U|A|P|R|S|F| ウィンドウサイズ | +----------------|---------------|---------------|---------------- +| |13 オクテット目| | | +.fi +.PP +第 13 オクテットをもっとよく見てみましょう: +.PP +.nf + | | + |---------------| + | |U|A|P|R|S|F| + |---------------| + |7 5 3 0| +.fi +.PP +.\" 2 bytes は 2 bits の誤り? +このオクテットの上位 2 ビットは予約フィールドから来ています。 +RFC 793 によると、この欄は将来の使用のために予約となっていて、 +必ず 0 です。 +残りの 6 ビットは、我々が興味がある TCP 制御ビットです。 +このオクテットのビットを、右から左へ、0 から 7 と番号付けします。 +PSH ビットは第 3 ビットであり、URG ビットは第 5 ビットです。 +.PP +最初の SYN だけを持つパケットが欲しいことに注意してください。 +SYN ビットがセットされた TCP データグラムが到着すると、 +第 13 オクテットになにが起きるか見てみましょう: +.PP +.nf + | |U|A|P|R|S|F| + |---------------| + |0 0 0 0 0 0 1 0| + |---------------| + |7 6 5 4 3 2 1 0| +.fi +.PP +第 7 ビットと第 6 ビットは予約フィールドに属し必ず 0 だと既に述べました。 +制御ビットセクションを見ると、ビット番号 1 (SYN) のみがセットされています。 +.PP +オクテット番号 13 が、ネットワークバイト順で、 +8 ビット符号無し整数と仮定します。 +このオクテットの 2 進数値は +.IP +00000010 +.PP +となり、10 進数での表現は次のようになります: +.PP +.nf + 7 6 5 4 3 2 1 0 +0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2 +.fi +.PP +SYN のみセットされている場合について理解したので、これでほとんど終りです。 +TCP ヘッダの第 13 オクテットの値は、 +ネットワークバイト順の 8 ビット符号無し整数として解釈すると、 +正確に 2 となります。 +.PP +この関係は次のように表現可能です: +.RS +.B +tcp[13] == 2 +.RE +.PP +この式を \fItcpdump\fP のフィルタとして使用し、 +SYN パケットのみを持つパケットを捕捉可能です: +.RS +.B +tcpdump -i xl0 tcp[13] == 2 +.RE +.PP +この式は「TCP データグラムの第 13 オクテットは 10 進数 2 を持つ」 +と言っており、まさに我々が望むものです。 +.PP +次に、SYN パケットが必要であるが、ACK や他の TCP 制御ビットについては +どうでも良い場合を考えます。 +SYN-ACK が設定された TCP データグラムが到着した時に +オクテット 13 がどうなっているかを見てみましょう: +.PP +.nf + | |U|A|P|R|S|F| + |---------------| + |0 0 0 1 0 0 1 0| + |---------------| + |7 6 5 4 3 2 1 0| +.fi +.PP +今度は、第 13 オクテットの第 1 ビットと第 4 ビットがセットされています。 +第 13 オクテットの 2 進数値は +.IP + 00010010 +.PP +となり、10 進数では次のようになります: +.PP +.nf + 7 6 5 4 3 2 1 0 +0*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18 +.fi +.PP +今度は、\fItcpdump\fP フィルタ式に 'tcp[13] == 18' を使用できません。 +この式は、SYN-ACK がセットされているパケットのみを選択し、 +SYN のみセットされているパケットを選択しないからです。 +ACK や他の制御ビットがセットされていようといまいと構わないことを +思い出してください。 +.PP +この目的を達成するために、第 13 オクテットと他の値との論理 AND を取り、 +SYN ビットを得ることが必要です。 +我々が欲しいのはどんな場合でも SYN がセットされていれば良いので、 +第 13 オクテットと SYN の 2 進数値との論理 AND を取ります: +.PP +.nf + + 00010010 SYN-ACK 00000010 SYN + AND 00000010 (SYN が欲しい) AND 00000010 (SYN が欲しい) + -------- -------- + = 00000010 = 00000010 +.fi +.PP +この AND 操作は、ACK や他の TCP プロトコルビットが +セットされていようといまいと、結果は同じです。 +AND 用の値の 10 進数表現と、この操作の結果の 10 進数値は、 +共に 2 (2 進数値 00000010) であり、 +SYN がセットされているパケットには次の関係が成立します: +.IP +( ( 第 13 オクテットの値 ) AND ( 2 ) ) == ( 2 ) +.PP +ここで、\fItcpdump\fP フィルタ式は次のようになることが分かります: +.RS +.B + tcpdump -i xl0 'tcp[13] & 2 == 2' +.RE +.PP +シングルクォートもしくはバックスラッシュを使用して、AND (&') 特殊文字を +シェルから隠す必要があることに注意してください。 .HD .B UDP パケット .LP UDP フォーマットは、以下の rwho パケットで例示します。 .RS .nf .sp .5 \f(CWactinide.who > broadcast.who: udp 84\fP .sp .5 .fi .RE これは、ホスト \fIactinide\fP の \fIwho\fP ポートが UDP データグラムを インターネットブロードキャストアドレスであるホスト \fIbroadcast\fP の \fIwho\fP ポートに対して送信していることを意味します。本パケットは、 84 バイトのユーザデータを含みます。 .LP -いくつかの UDP サービスは(送信元もしくは宛先のポート番号から)種 +いくつかの UDP サービスは(始点もしくは終点のポート番号から)種 類の判断が可能で、さらに上位レベルのプロトコル情報が出力されます。 ドメインネームサービス要求 (RFC1034/1035)、そして、Sun RPC 呼びだし (RFC1050) を用いた NFS サービスなどがこの条件に該当します。 .HD UDP ネームサーバ要求 .LP \fI(注意:以下の記述は、RFC1035 に記述されている ドメインサービスプロトコルの知識があることを前提に書かれています。もしこ れらの知識がない場合には、以下の記述は未知の言語で書かれているかのよう に見えるでしょう。)\fP .LP ネームサーバ要求は、以下のような表示になります。 .RS .nf .sp .5 \fIsrc > dst: id op? flags qtype qclass name (len)\fP .sp .5 -\f(CWh2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)\fP +\f(CWh2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)\fR .sp .5 .fi .RE ホスト \fIh2opolo\fP は、\fIhelios\fP 上のドメインサーバに対して \fIucbvax.berkeley.edu\fP のホスト名に対応するアドレスレコード (qtype=A) を問い合わせています。 問い合わせの ID は `3' であり、`+' は\fI再帰要求\fPフラグが設定されて いることを意味します。問い合わせの長さは 37 バイトであり、この中に UDP および IP のプロトコルヘッダの長さは含みません。質問操作は普通の操作 (\fIQuery\fP) であり、op フィールドは省略されます。op が他のいずれかであった場合、 その op は `3' と `+' の間に表示されます。 これと同様に、qclass は普通のもの (\fIC_IN\fP) であり、省略されます。 他の qclass が入った場合、`A' の直後に表示されます。 .LP 少数の変則的なパケットは検査され、カギカッコで囲まれた付加 フィールドにその結果が表示されます。query が返答、ネームサーバ もしくはオーソリティセクションを含む場合、 .IR ancount , .IR nscount , -もしくは .I arcount -が、`[\fIn\fPa]'、 `[\fIn\fPn]' 、もしくは `[\fIn\fPau]' のような形式で +のいずれかが、`[\fIn\fPa]', `[\fIn\fPn]', `[\fIn\fPau]' のような形式で 表示されます。\fIn\fP は、それぞれの個数です。 応答ビットのいずれかが設定されている (AA, RA, rcode のいずれか) 場合、 -もしくは`0 でなければならない'ビットが 2 バイト目と 3 バイト目に設定されてい +もしくは「0 でなければならない」ビットが 2 バイト目と 3 バイト目に設定されてい る場合には、`[b2&3=\fIx\fP]' が出力されます。\fIx\fP は、ヘッダの 2 バイト 目および 3 バイト目の値を 16 進で表したものです。 .HD UDP ネームサーバ応答 .LP ネームサーバ応答の形式は、以下の通りです。 .RS .nf .sp .5 \fIsrc > dst: id op rcode flags a/n/au type class data (len)\fP .sp .5 \f(CWhelios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273) -helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)\fP +helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)\fR .sp .5 .fi .RE 最初の例は、\fIh2opolo\fP からの質問 ID 3 の要求に対し、\fIhelios\fP が 3 つのアンサーレコード、3 つのネームサーバレコード、そして 7 つの オーソリティレコードを持っているパケットで返答しているというものです。 最初のアンサーレコードは、タイプ A (アドレス) であり、そのデータは IP アドレス 128.32.137.3 です。UDP と IP のヘッダを除いた総サイズは 273 バイトです。 A レコードのクラス (C_IN) と同様に, op (Query) および応答コード (NoError) は、省略されます。 .LP 2 つめの例は、\fIhelios\fP が質問 ID 2 の要求に対し、存在しない ドメイン (NXDomain) という返答コードとともに、0 個のアンサーレコード、1 つ のネームサーバレコード、そして 0 個のオーソリティレコードを含んだ レスポンスを返しています。`*' は、\fIauthoritative answer\fP ビットが設定され ていることを示します。 アンサーレコードがないため、型、クラス、データは出力されません。 .LP -出力される可能性のある他のフラグキャラクタは、`\-' (再帰利用,RA,が +出力される可能性のある他のフラグキャラクタは、`\-' (再帰利用,RA,が 設定されていない)および `|' (メッセージ切捨て, TC, が設定されている) です。 `question' セクションに含まれるエントリがちょうど 1 つでない場合には、 `[\fIn\fPq]' が出力されます。 .LP ネームサーバ要求および応答は、大きくなる傾向にあり、デフォルトの \fIsnaplen\fP の値である 68 バイトの長さは、パケットを捕捉してその内容を 表示するには十分でないかも知れないことに注意して下さい。 もしネームサーバトラフィックの調査を真剣に 行なおうとするならば、\fB\-s\fP オプションを用いて、\fIsnaplen\fP を増やし て下さい。自分の経験上、`\fB\-s 128\fP' で十分使い物になります。 .HD SMB/CIFS のデコード .LP -現在の tcpdump は、UDP/137, UDP/138, TCP/139 上のデータ用に、 +現在の \fItcpdump\fP は、UDP/137, UDP/138, TCP/139 上のデータ用に、 非常に多くの SMB/CIFS/NBT デコードを含みます。 IPX および NetBEUI SMB データの原始的なデコードも、 いくらかは実装されています。 デフォルトでは、最小限のデコードが行われ、 より詳細なデコードは -v を指定すると行われます。 -v を使用すると、単一の SMB パケットが 1 ページ以上を占めてしまいますので、 血まみれの詳細すべてが本当に欲しい場合のみに -v を使用すべきことを 注意してください。 UNICODE 文字列を含む SMB セッションをデコードする場合、 環境変数 USE_UNICODE を 1 に設定するとよいかもしれません。 UNICODE 文字列を自動検出するパッチを歓迎します。 SMB パケット書式の情報とすべてのフィールドの意味については、 -www.cifs.org または好きな samba.org ミラーサイトの +www.cifs.org または好きな samba.org ミラーサイトの pub/samba/specs/ ディレクトリを見てください。 SMB パッチは Andrew Tridgell (tridge@samba.org) が書きました。 .HD NFS 要求と応答 .LP Sun NFS (Network File System) 要求および応答は、以下のように 表示されます。 .RS .nf .sp .5 \fIsrc.xid > dst.nfs: len op args\fP \fIsrc.nfs > dst.xid: reply stat len op results\fP .sp .5 \f(CW sushi.6709 > wrl.nfs: 112 readlink fh 21,24/10.73165 wrl.nfs > sushi.6709: reply ok 40 readlink "../var" sushi.201b > wrl.nfs: 144 lookup fh 9,74/4096.6878 "xcolors" wrl.nfs > sushi.201b: reply ok 128 lookup fh 9,74/4134.3150 -\fP +\fR .sp .5 .fi .RE 最初の行では、ホスト \fIsushi\fP が ID\fI6709\fP のトランザクションを -\fIwrl\fP に送信します (送信元ホストに続く数字はトランザクション ID -であり、送信元ポート番号で\fIない\fPことに注意して下さい)。要求 +\fIwrl\fP に送信します (始点ホストに続く数字はトランザクション ID +であり、始点ポート番号で\fIない\fPことに注意して下さい)。要求 サイズは、UDP および IP ヘッダのサイズを除いて 112 バイトです。操作は、 ファイルハンドル (\fIfh\fP) 21,24/10.731657119 に対する \fIreadlink\fP (シンボリックリンク読み込み) です。 (この例のように運が良ければ、ファイルハンドルはデバイスのメジャー、 マイナー番号のペアと、それに続く i ノード番号と世代番号と解釈することがで きます。) \fIwrl\fP はリンクの内容とともに `ok' と返答しています。 .LP 3 行めでは、\fIsushi\fP は \fIwrl\fP に対し、ファイルハンドル 9,74/4096.6878 のディレクトリ中の `xcolors' ファイルの検索を要求していま す。出力されたデータは、操作の型に依存することに注意して下さい。本形式 は、NFS のプロトコル仕様とともに読めば、それ自身を見れば分かるよう に意図して作成されています。 .LP \-v (verbose, 冗長) フラグがある場合、追加情報が出力されます。 例えば .RS .nf .sp .5 \f(CW sushi.1372a > wrl.nfs: 148 read fh 21,11/12.195 8192 bytes @ 24576 wrl.nfs > sushi.1372a: reply ok 1472 read REG 100664 ids 417/0 sz 29388 \fP .sp .5 .fi .RE -(\-v は IP ヘッダの TTL, ID, そしてフラグメンテーションフィールドも出力し -ますが、この例では省略しています。) 最初の行では、\fIsushi\fP は +(\-v は IP ヘッダの TTL と ID と長さとフラグメンテーションフィールドも出力し +ますが、この例では省略しています。) 最初の行では、\fIsushi\fP は \fIwrl\fP に対してファイル 21,11/12.195 のオフセット 24576 バイト目か ら 8192 バイトを読むように要求しています。\fIwrl\fP は `ok' と返答してい -ます。2 行めに示したパケットは応答の最初のフラグメントなので、1472 +ます。2 行めに示したパケットは応答の最初のフラグメントなので、1472 バイトしかありません (その他のデータは継続するフラグメント中に続きます が、これらのフラグメントは NFS ヘッダも UDP ヘッダさえも持たないので、使わ れるフィルタリングの表現によっては出力されないでしょう)。\-v フラグがあ るのでいくつかのファイル属性 (ファイルデータに追加されて返されてくる) が -出力されます。それらはファイルの型 (普通のファイルなら``REG'')、(8 進数 +出力されます。それらはファイルの型 (普通のファイルなら ``REG'')、(8 進数 表現の) ファイルモード、uid と gid、そしてファイルの大きさです。 .LP \-v フラグが 2 回以上指定されると、さらに詳しい情報が出力されます。 .LP NFS 要求は非常に大きなデータになるため、\fIsnaplen\fP を大きくし ないと詳しい出力は得られません。NFS トラフィックを監視するには、 `\fB\-s 192\fP' と指定してみて下さい。 .LP NFS 応答パケットは RPC 操作であることを明示的には示しません。その代わ -り、\fItcpdump\fP は``最近の''要求を追跡して、トランザクション ID を用い +り、\fItcpdump\fP は「最近の」要求を追跡して、トランザクション ID を用い て応答と照合します。応答が対応する要求のすぐ後に続かないと、解 析することはできません。 .HD AFS の要求と応答 .LP Transarc AFS (Andrew File System) の要求と応答は次のように表示されます: .HD .RS .nf .sp .5 \fIsrc.sport > dst.dport: rx packet-type\fP \fIsrc.sport > dst.dport: rx packet-type service call call-name args\fP \fIsrc.sport > dst.dport: rx packet-type service reply call-name args\fP .sp .5 \f(CW elvis.7001 > pike.afsfs: rx data fs call rename old fid 536876964/1/1 ".newsrc.new" new fid 536876964/1/1 ".newsrc" pike.afsfs > elvis.7001: rx data fs reply rename -\fP +\fR .sp .5 .fi .RE 最初の行では、ホスト elvis が RX パケットを pike に送っています。 これは、fs (ファイルサーバ) サービスへの RX データパケットであり、 RPC 呼び出しの開始です。 この RPC 呼び出しはリネーム (改名) であり、 古いディレクトリファイル ID 536876964/1/1 と古いファイル名 `.newsrc.new'、 新しいディレクトリファイル ID 536876964/1/1 と新しいファイル名 `.newsrc' で 呼び出しています。 ホスト pike は、RPC 応答をリネーム呼び出しに対して返します (データパケットであり、アボートパケットではないため、これは成功しました)。 .LP 一般的には、AFS RPC の RPC 呼び出し名だけは最低限デコードされます。 ほとんどの AFS RPC は、少ななくともいくらかの引数がデコードされます (一般的には「興味のある」引数のみであり、興味についてはある定義によります)。 .LP 書式は、自明となることを意図していますが、 AFS および RX の動作に親しみのない方々にとっては有用ではないかもしれません。 .LP --v (冗長) フラグを 2 度指定すると、追加情報を表示します。 +-v (冗長) フラグを 2 度指定すると、 +確認応答パケットと追加のヘッダ情報を表示します。 これは、RX 呼び出し ID、呼び出し番号、シーケンス番号、 シリアル番号、RX パケットフラグといったものです。 .LP -更にもう 1 回 -v フラグを指定すると、 +-v フラグを 2 度指定すると、追加情報が表示されます。 +これは、RX 呼び出し ID、呼び出し番号、RX パケットフラグといったものです。 +MTU ネゴシエーション情報も、RX 確認応答パケットから表示されます。 +.LP +-v フラグを 3 度指定すると、 セキュリティインデックスとサービス ID を表示します。 .LP アボートパケットに対しては、エラーコードが表示されます。 ただし、Ubik ビーコンパケットは例外です (Ubik プロトコルでは、アボートパケットは、肯定投票に使用されるからです)。 .LP AFS 要求は非常に大きく、 \fIsnaplen\fP を増やさなければ多くの引数が表示されないことに注意してください。 AFS トラフィックを見るには `\fB-s 256\fP' を試してみてください。 .LP AFS 応答パケットは、明示的には RPC 操作を識別しません。 代りに \fItcpdump\fP が「最近の」要求の追跡を行い、 応答に対応する要求のマッチングを、 呼び出し番号とサービス ID を使用して行います。 応答パケットが対応する要求パケットに近くないと、 パーズできないかもしれません。 .HD KIP Appletalk (DDP in UDP) .LP UDP データグラムでカプセル化された Appletalk DDP パケットは、カプセル化 を解かれ、DDP パケットとしてダンプされます (全ての UDP ヘッダ情報は破棄 されます)。 ファイル .I /etc/atalk.names が、Appletalk ネットワークおよびノード番号を名前に変換するのに用い られます。 本ファイルの内容は、以下のように記述されます。 .RS .nf .sp .5 \fInumber name\fP \f(CW1.254 ether 16.1 icsd-net -1.254.110 ace\fP +1.254.110 ace\fR .sp .5 .fi .RE 最初の 2 行は、Appletalk ネットワーク名を決めています。3 行めは、 特定のホストの名前を決めています (ホストは、3 オクテット目の有無で ネットワークと区別されます。ネットワーク番号は、2 オクテットの数字 から、ホスト番号は 3 オクテットの数字から構成される必要があります。) 数字と名前は、空白文字もしくはタブ文字で区切られます。この .I /etc/atalk.names ファイルは、空行もしくは、`#' 文字で始まるコメント行を含んでもかま いません。 .LP Appletalk アドレスは、以下のように表示されます。 .RS .nf .sp .5 \fInet.host.port\fP \f(CW144.1.209.2 > icsd-net.112.220 office.2 > icsd-net.112.220 -jssmag.149.235 > icsd-net.2\fP +jssmag.149.235 > icsd-net.2\fR .sp .5 .fi .RE (もし、この .I /etc/atalk.names がないか、このファイルの中にホスト番号及びネットワーク番号のエントリが 存在しない場合には、アドレスは数字で表示されます。) 最初の例は、ネットワーク 144.1 の中のノード 209 の NBP (DDP port 2) が、ネットワーク icsd のノード 112 のホストの ポート 220 を開いている何者かにデータを送信しています。 -次の行は、1 行めとほぼ同じ例ですが、送信元のノード名が既知である +次の行は、1 行めとほぼ同じ例ですが、始点のノード名が既知である (`office') ところが異なります。 3 行目の例は、ネットワーク jssmag のノード 149 のポート 235 から、icsd-net の NBP ポートにブロードキャストでデータ送信をしています (ブロードキャストアドレス (255) は、ホスト番号なしでネットワーク番号のみ が表示されているところでわかります。このことから、/etc/atalk.names では ノード名とネットワーク名を区別する方がよいことが分かります)。 .LP NBP (name binding protocol) および ATP (Appletalk transaction protocol) パケットでは、その内容は解釈されます。 他のプロトコルは、プロトコル名 (もしくは、プロトコルが登録されていない場 合には、プロトコル番号) およびパケットサイズをダンプします。 \fBNBP パケット\fP は、以下のような形式で表示されます。 .RS .nf .sp .5 \s-2\f(CWicsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@*" jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250 -techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186\fP\s+2 +techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186\fR\s+2 .sp .5 .fi .RE 最初の行は、レーザライタの名前検索要求であり、ネットワーク icsd のホスト 112 から送られ、ネットワーク jssmag へとブロードキャストされています。 検索のための nbp の ID は 190 です。 次の行は jssmag.209 からの、この要求の応答 (同じ ID を持つことに注意して下さ い) で、 ポート 250 に登録された RM1140 という名前のレーザライタがあると答 えています。 3 行めは、同じ要求に対する他のホストからの応答で、 ホスト techpit が、ポート 186 に登録されたレーザライタ "techpit" を持ってい ると答えています。 \fBATP パケット\fP の形式は、以下のように表示されます。 .RS .nf .sp .5 \s-2\f(CWjssmag.209.165 > helios.132: atp-req 12266<0-7> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:0 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:2 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:4 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp*12266:7 (512) 0xae040000 jssmag.209.165 > helios.132: atp-req 12266<3,5> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001 -jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002\fP\s+2 +jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002\fR\s+2 .sp .5 .fi .RE jssmag.209 は、ホスト helios に対し最大8個 ('<0-7>') までのパケットを 要求することで、トランザクション ID 12266 を開始します。行の最後の 16 進数は、 -要求の中の`ユーザデータ'のフィールドの値です。 +要求の中の「ユーザデータ」のフィールドの値です。 .LP helios は、8 つの 512 バイトのパケットで応答しています。トランザクション ID -の後につづく`:数'は、パケットシーケンス番号を、括弧中の数値は ATP ヘッダ +の後につづく「:数」は、パケットシーケンス番号を、括弧中の数値は ATP ヘッダ を除いたパケット中のデータ量を示しています。パケットシーケンス 7 のところ の `*' は、EOM ビットが設定されていることを示しています。 .LP jssmag.209 は、パケットシーケンス番号 3 と 5 のパケットの再送要求をしています。 helios はそれらを再送し、その後 jssmag.209 はトランザクションを解放します。 最後の行で、jssmag.209 は次の要求を開始します。この要求の表示 で付加されている `*' は、XO (`exactly once') が設定されていないことを示します。 .HD IP フラグメンテーション .LP フラグメントのあるインターネットデータグラムは、以下のように表示されます。 .RS .nf .sp .5 \fB(frag \fIid\fB:\fIsize\fB@\fIoffset\fB+)\fR \fB(frag \fIid\fB:\fIsize\fB@\fIoffset\fB)\fR .sp .5 .fi .RE (最初の形式では、まだフラグメントがあることを示し、2 番めの形式は、 これが最後のフラグメントであることを示しています。) .LP \fIid\fP は、フラグメント ID です。\fIsize\fP は、フラグメントサイズを バイト単位であらわしたものです。ただし IP ヘッダサイズは含みません。 \fIoffset\fP は、元のデータグラムでの本フラグメントのオフセットをバイト 単位であらわしたものです。 .LP フラグメント情報は、各フラグメントごとに表示されます。最初の フラグメントには、上位レベルのプロトコルヘッダが含まれるので、フラグ情 報がプロトコル情報の後に表示されます。2 つ目以降のフラグメントについて -は、上位レベルのプロトコルヘッダを含まないので、フラグ情報は送信元およ -び宛先アドレスの後ろに表示されます。 -例えば、これは arizona.edu から lbl-rtsg.arpa への CSNET 接続での ftp +は、上位レベルのプロトコルヘッダを含まないので、フラグ情報は始点およ +び終点アドレスの後ろに表示されます。 +例えば、これは arizona.edu から lbl-rtsg.arpa への CSNET 接続での ftp の様子の一部分ですが、どうやら 576 バイト以上のデータグラムを扱えないよ うです。 .RS .nf .sp .5 \s-2\f(CWarizona.ftp-data > rtsg.1170: . 1024:1332(308) ack 1 win 4096 (frag 595a:328@0+) arizona > rtsg: (frag 595a:204@328) rtsg.1170 > arizona.ftp-data: . ack 1536 win 2560\fP\s+2 .sp .5 .fi .RE 注意すべきことがいくつかあります。まず最初に、2 行目は ポート番号を含みません。これは、TCP プロトコル情報は、最初のフラグメント に全て入っており、後のフラグメントを出力する時にはポート番号やシーケンス 番号を知る術がないからです。 次に、最初の行の TCP シーケンス情報は、パケットが 308 バイトのユーザデータ を持ってるかのように表示されますが、実際には 512 バイトのユーザデータを 持っています (308 バイトが最初のフラグ分で、204 バイトが 2 番目のフラグ分で す)。シーケンススペースの穴をさがしたり、パケットの ack の対応が正しい かをこのデータで見ようとしてはいけません。 .LP フラグメント不可フラグが設定されたパケットは、最後の部分に \fB(DF)\fP と 印が付けられます。 .HD タイムスタンプ .LP デフォルトでは、すべての出力行は最初にタイムスタンプが出力されます。 タイムスタンプは、以下の形式で、現在のクロックタイムを表示します .RS .nf \fIhh:mm:ss.frac\fP .fi .RE そして、クロックの精度は、カーネルクロックの精度に依存します。 タイムスタンプは、カーネルが最初にパケットを見つけた時間を反映します。 イーサネットインタフェースがケーブルからパケットを取り出してカーネルが -`新規パケット'割り込みを受け付けるまでのタイムラグなどは補正されません +「新規パケット」割り込みを受け付けるまでのタイムラグなどは補正されません .SH 関連項目 bpf(4), pcap(3) .SH 作者 +元々の作者は次の通りです: +.LP Van Jacobson, Craig Leres and Steven McCanne, all of the Lawrence Berkeley National Laboratory, University of California, Berkeley, CA. .LP +現在は tcpdump.org で管理されています。 +.LP +現在のバージョンは http で次のところから取得可能です: +.LP +.RS +.I http://www.tcpdump.org/ +.RE +.LP +元々の配布は匿名 ftp で次のところから取得可能です: .RS .I ftp://ftp.ee.lbl.gov/tcpdump.tar.Z .RE .LP IPv6/IPsec サポートは WIDE/KAME プロジェクトが追加しました。 本プログラムは、特定の構成においては、 Eric Young の SSLeay ライブラリを使用します。 .SH バグ -バグレポートは、tcpdump@ee.lbl.gov へ送って下さい。 +問題、バグ、希望の機能拡張等については次のところに送ってください: +.LP +.RS +tcpdump-workers@tcpdump.org +.RE +.LP +ソースコードの寄贈等については次のところに送ってください: +.LP +.RS +patches@tcpdump.org +.RE .LP NIT では、外に出ていくトラフィックを観察できません。BPF ならできます。 後者を用いることを推奨します。 .LP +2.0[.x] カーネルの Linux システムにおいて: +.IP +ループバックデバイス上のパケットは 2 度観測されます。 +.IP +カーネル内でのパケットフィルタリングは不可能であり、 +全パケットがカーネルからコピーされてユーザモードでフィルタされます。 +.IP +スナップショットの長さ部分ではなく、パケット全体が、 +カーネルからコピーされます +(2.0[.x] のパケット捕捉機構は、 +パケットの一部をユーザランドへコピーするように依頼されると、 +パケットの正しい長さを報告しません。 +このため、ほとんどの IP パケットが +.BR tcpdump +でエラーとなってしまいます)。 +.LP +2.2 以降のカーネルにアップグレードすることをお勧めします。 +.LP IP フラグメントを再構成するか、もしくは少なくとも上位プロトコルの正し いデータサイズを計算するように設計しなおす必要があります。 .LP ネームサーバについての逆引きについては、正しくダンプされません。 実際の要求ではなく、(empty) クエスチョンセクションが、 アンサーセクションに出力されます。 -逆引きについてはそれ自体がバグであると信じ、tcpdump ではなく逆引きを要求する +逆引きについてはそれ自体がバグであると信じ、 +\fItcpdump\fP ではなく逆引きを要求する プログラムを修正するべきと考える人達もいます。 .LP -Apple Ethertalk DDP パケットは、KIP DDP パケットと同様に簡単にダンプ出来 -るようにしたいのですが、実際はそうではありません。 -もし我々が、Ethertalk の利用を奨めるために何かやろうという気になったとし -ても (そうではないのですが)、LBL (Lawrence Berkeley Laboratory) のどの -ネットワーク上にも Ethertalk を通すことは許されていませんから、そのコード -の試験は出来ません。 -.LP 夏時間との変更の時にパケットトレースを行うと、タイムスタンプは変更後の 時刻とはずれてしまいます (時間変化は無視されます)。 .LP -FDDI ヘッダを操作するようなフィルタの表現においては、全ての -FDDI パケットはカプセル化された Ethernet パケットであると仮定します。 +FDDI ヘッダおよび Token Ring ヘッダを操作するようなフィルタの表現においては、 +全ての FDDI パケットおよび Token Ring パケットは +SNAP でカプセル化された Ethernet パケットであると仮定します。 これは、IP, ARP, DECNET フェーズ 4 については正しいですが、ISO の CLNS 等の プロトコルについては正しくありません。したがって、フィルタ表現に正しく マッチしないようなパケットを偶然に受け入れてしまうことがあります。 .LP +Token Ring ヘッダ以外のフィールドに対するフィルタ式は、 +始点経路制御された Token Ring パケットを正しく扱わないことがあります。 +.LP .BR "ip6 proto" はヘッダチェーンを追跡すべきですが、現在のところはそうなっていません。 -.BR tcp -と -.BR udp -もまた、ヘッダチェーンを追跡すべきです。 +このために +.BR "ip6 protochain" +が提供されています。 .LP 例えば \fBtcp[0]\fP といったトランスポート層ヘッダに対する演算は、 IPv6 パケットに対しては動作しません。 IPv4 パケットだけを見ます。 diff --git a/ja_JP.eucJP/man/man5/ipf.5 b/ja_JP.eucJP/man/man5/ipf.5 index fc9d5db078..74f98c2a97 100644 --- a/ja_JP.eucJP/man/man5/ipf.5 +++ b/ja_JP.eucJP/man/man5/ipf.5 @@ -1,586 +1,586 @@ -.\" %FreeBSD: src/contrib/ipfilter/man/ipf.5,v 1.4.2.1 2001/02/17 20:36:26 darrenr Exp % +.\" %FreeBSD: src/contrib/ipfilter/man/ipf.5,v 1.4.2.2 2001/07/28 13:34:24 darrenr Exp % .\" WORD: filtering rule フィルタルール .\" WORD: semantics セマンティクス .\" WORD: inbound 内向き .\" WORD: outbound 外向き .\" WORD: forward 転送 .\" WORD: transmit 送出 .\" WORD: fall-through 継続(「通過」にするとblock/passと区別できない) .\" $FreeBSD: doc/ja_JP.eucJP/man/man5/ipf.5,v 1.6 2001/05/14 01:09:29 horikawa Exp $ .TH IPF 5 .SH 名称 ipf, ipf.conf \- IP パケットフィルタのルール文法 .SH 解説 .PP \fBipf\fP のルールファイルは、どんな名前でも良く、標準入力でもかまいません。 カーネル内部のフィルタリストを表示するとき、 \fBipfstat\fP は解釈可能なルールを出力しますので、 この出力を \fBipf\fP への入力としてフィードバックするのに使えます。 よって、入力パケットに対する全フィルタを除去するためには、次のようにします: .nf \fC# ipfstat \-i | ipf \-rf \-\fP .fi .SH 文法 .PP \fBipf\fP がフィルタルール構築に使用するフォーマットは、 BNF を使った文法で次のように示すことができます: \fC .nf filter-rule = [ insert ] action in-out [ options ] [ tos ] [ ttl ] [ proto ] [ ip ] [ group ]. insert = "@" decnumber . action = block | "pass" | log | "count" | skip | auth | call . in-out = "in" | "out" . options = [ log ] [ "quick" ] [ "on" interface-name [ dup ] [ froute ] ] . tos = "tos" decnumber | "tos" hexnumber . ttl = "ttl" decnumber . proto = "proto" protocol . ip = srcdst [ flags ] [ with withopt ] [ icmp ] [ keep ] . group = [ "head" decnumber ] [ "group" decnumber ] . block = "block" [ return-icmp[return-code] | "return-rst" ] . auth = "auth" | "preauth" . log = "log" [ "body" ] [ "first" ] [ "or-block" ] [ "level" loglevel ] . call = "call" [ "now" ] function-name . skip = "skip" decnumber . dup = "dup-to" interface-name[":"ipaddr] . froute = "fastroute" | "to" interface-name . protocol = "tcp/udp" | "udp" | "tcp" | "icmp" | decnumber . srcdst = "all" | fromto . fromto = "from" [ "!" ] object "to" [ "!" ] object . - + return-icmp = "return-icmp" | "return-icmp-as-dest" . object = addr [ port-comp | port-range ] . addr = "any" | nummask | host-name [ "mask" ipaddr | "mask" hexnumber ] . port-comp = "port" compare port-num . port-range = "port" port-num range port-num . flags = "flags" flag { flag } [ "/" flag { flag } ] . with = "with" | "and" . icmp = "icmp-type" icmp-type [ "code" decnumber ] . return-code = "("icmp-code")" . keep = "keep" "state" | "keep" "frags" . loglevel = facility"."priority | priority . nummask = host-name [ "/" decnumber ] . host-name = ipaddr | hostname | "any" . ipaddr = host-num "." host-num "." host-num "." host-num . host-num = digit [ digit [ digit ] ] . port-num = service-name | decnumber . withopt = [ "not" | "no" ] opttype [ withopt ] . opttype = "ipopts" | "short" | "frag" | "opt" ipopts . optname = ipopts [ "," optname ] . ipopts = optlist | "sec-class" [ secname ] . secname = seclvl [ "," secname ] . seclvl = "unclass" | "confid" | "reserv-1" | "reserv-2" | "reserv-3" | "reserv-4" | "secret" | "topsecret" . icmp-type = "unreach" | "echo" | "echorep" | "squench" | "redir" | "timex" | "paramprob" | "timest" | "timestrep" | "inforeq" | "inforep" | "maskreq" | "maskrep" | decnumber . icmp-code = decumber | "net-unr" | "host-unr" | "proto-unr" | "port-unr" | "needfrag" | "srcfail" | "net-unk" | "host-unk" | "isolate" | "net-prohib" | "host-prohib" | "net-tos" | "host-tos" | "filter-prohib" | "host-preced" | "cutoff-preced" . optlist = "nop" | "rr" | "zsu" | "mtup" | "mtur" | "encode" | "ts" | "tr" | "sec" | "lsrr" | "e-sec" | "cipso" | "satid" | "ssrr" | "addext" | "visa" | "imitd" | "eip" | "finn" . facility = "kern" | "user" | "mail" | "daemon" | "auth" | "syslog" | "lpr" | "news" | "uucp" | "cron" | "ftp" | "authpriv" | "audit" | "logalert" | "local0" | "local1" | "local2" | "local3" | "local4" | "local5" | "local6" | "local7" . priority = "emerg" | "alert" | "crit" | "err" | "warn" | "notice" | - "info" | "debug" . + "info" | "debug" . hexnumber = "0" "x" hexstring . hexstring = hexdigit [ hexstring ] . decnumber = digit [ decnumber ] . compare = "=" | "!=" | "<" | ">" | "<=" | ">=" | "eq" | "ne" | "lt" | "gt" | "le" | "ge" . range = "<>" | "><" . hexdigit = digit | "a" | "b" | "c" | "d" | "e" | "f" . digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" . flag = "F" | "S" | "R" | "P" | "A" | "U" . .fi .PP この文法は、可読性のためにいくぶん簡略化しています。 この文法にマッチする組み合わせであっても、 意味をなさないためにソフトウェアが許可しないものがあります (非 TCP パケットに対する tcp \fBflags\fP など)。 .SH フィルタルール .PP 「最短」かつ有効なルールは (現在のところ) 無動作と次の形式です: .nf block in all pass in all log out all count in all .fi .PP フィルタルールは順番通りにチェックされ、 最後にマッチしたルールがパケットの運命を決めます (例外: 後述 \fBquick\fP オプションを参照)。 .PP デフォルトでは、 フィルタはカーネルのフィルタリストの最後にインストールされます。 ルールの前に \fB@n\fP を付けると、 現在のリストの n 番目のエントリとして挿入するようになります。 これは、現在有効なフィルタのルールセットを修正したりテストする場合に有用です。 更なる情報は ipf(1) を参照してください。 .SH アクション .PP アクションは、 フィルタルールの残りの部分にパケットがマッチする場合に、 そのパケットをどのように扱うのかを示します。 各ルールは、アクションを 1 つ持つことが「必要です」。 次のアクションが認識されます: .TP .B block このパケットを、ドロップするように印を付けることを示します。 パケットをブロックすることに対し、 ICMP パケット (\fBreturn-icmp\fP) か、 元のパケット送信宛先起源を装う ICMP パケット (\fBreturn-icmp-as-dest\fP) か、 TCP 「リセット」 (\fBreturn-rst\fP) の、いずれかの返答パケットを返すよう、 フィルタに指示できます。 ICMP パケットは、任意の IP パケットの応答として生成でき、 そのタイプを指定することもできます。 TCP リセットは、TCP パケットに対して適用されるルールにおいてのみ使用できます。 \fBreturn-icmp\fP または \fBreturn-icmp-as-dest\fP を使うとき、 到達不可の 'タイプ' を指定可能です。 このタイプとは、 ネットワーク到達不可、ポート到達不可、権限による禁止のいずれかです。 指定方法は、 \fBreturn-icmp\fP または \fBreturn-icmp-as-dest\fP の直後に、 タイプに関連する ICMP コードを括弧で括るというものです。 例えば .nf block return-icmp(11) ... .fi .PP とすると、Type-Of-Service (TOS) ICMP 到達不可エラーを返します。 .TP .B pass このパケットを、そのままフィルタを通過させるように印を付けます。 .TP .B log このパケットのログを取ります (後述のロギング節参照)。 パケットがフィルタを通過可能か否かには、影響を与えません。 .TP .B count このパケットを、フィルタのアカウンティング統計に含めます。 パケットがフィルタを通過可能か否かには、影響を与えません。 統計は ipfstat(8) にて閲覧可能です。 .TP .B call このアクションは指定されたカーネル内関数を呼び出すために使用されます。 カーネル内関数は、特定の呼び出しインタフェースを満す必要があります。 カスタマイズしたアクションとセマンティクスを実装し、 利用可能なアクションを補うことができます。 知識があるハッカーが使用する機能であり、現在のところ文書化されていません。 .TP .B "skip " フィルタに、次の \fIn\fP フィルタルールをスキップさせます。 スキップされる範囲のルールに挿入または除去があった場合、 \fIn\fP の値は適切に調整されます。 .TP .B auth これにより、 ユーザ空間プログラムを実行して正当性を確認するパケット情報を待つことにより、 認証できます。 プログラムがカーネルに対してパケット通過を許すか否かの \fI実際の\fP フラグを返すまでの間、パケットは内部バッファに保持されます。 パケット通過を許す前または 認識されない送信元からのパケットをカーネルに落すよう指示する前に、 このようなプログラムは、 送信元アドレスを見るかもしれませんし、 ユーザからの (パスワード等の) ある種の認証を求めるかもしれません。 .TP .B preauth このクラスのパケットに対しては、 更なる明確化のために既に認証されたリストを見るべきであると、 フィルタに指示します。 更にマッチするルールが見付からないと、パケットは落とされます (FR_PREAUTH は FR_PASS と同じではありません)。 更にマッチするルールが見付かると、その結果が使用されます。 これが使用される状況は、 ユーザがファイアウォールに\fIログイン\fPし、 このユーザに関する一時的なルールを設定するような場合です。 .PP 次の語は \fBin\fP か \fBout\fP のいずれかである必要があります。 カーネル内部を通過するパケットは、内向き (インタフェースにて受信された ばかりで、 カーネルのプロトコル処理部に向って移動している) か、 外向き (プロトコルスタックにより送出または転送され、 インタフェースに向かっている) かのいずれかです。 各フィルタルールが入出力のどちら側に適用されるのかを、 明示的に示す必要があります。 .SH オプション .PP オプションの一覧は短く、事実すべて省略可能です。 オプションが使用されるところでは、ここに示す順序で置かれる必要があります。 次のオプションが現在サポートされています: .TP .B log 最後にマッチするルールの場合、 パケットヘッダが \fBipl\fP ログに書き込まれます (後述のロギング節参照)。 .TP .B quick フィルタを高速化したり後続のルールよりも優先させるために、 ルールの「ショートカット」を許します。 パケットが \fBquick\fP の印が付いたフィルタルールにマッチする場合、 このルールが最後にチェックされるルールになり、 「短絡 (short-circuit)」パスにより後続のルールが このパケットに対して処理されなくなります。 (現在のルールが適用された後に) パケットの現在の状態が、 パケットが通過されるかブロックされるかを決定します。 .IP このオプションが指定されないと、 ルールは「継続(fall-through)」ルールとされます。 つまり、マッチの結果 (ブロック/通過) が保存され、 更なるマッチがあるかをみるため処理が継続されます。 .TP .B on マッチ手続きにインタフェース名を組み込みます。 インタフェース名は "netstat \-i" で表示できます。 このオプションを使用すると、 指定した方向 (入出力) にこのインタフェースを通過するパケットに対してのみ、 このルールがマッチします。 このオプションが指定されないと、 ルールはこのパケットが置かれたインタフェースに依存せずに (すなわち全インタフェースに) 適用されます。 フィルタルールセットは全インタフェースに共通であり、 各インタフェースに対してフィルタリストを持つのではありません。 .IP このオプションは特に、単純な IP 詐称 (IP spoofing) に対する防御として有用です: 指定したインタフェース上で、 指定した送信元アドレスであるとされる入力パケットのみを通し、 他のパケットをログしたりドロップすることができます。 .TP .B dup-to パケットをコピーし、 複写したパケットを指定したインタフェースに対して外向きに送ります。 また、宛先 IP アドレスを指定して、変更することができます。 ネットワークスニファを使用して、ホスト外でログするために有用です。 .TP .B to 指定したインタフェースにおいて、パケットを外向きキューに移動させます。 カーネルのルーティングを回避するために使用でき、 パケットに対する残りのカーネル処理をバイパスするためにも使用できます (内向きルールに適用された場合)。 よって、ルータではなく、フィルタリングハブやスイッチのように、 透過的に動作するファイアウォールを構築することができます。 \fBfastroute\fP キーワードは、このオプションの同義語です。 .SH マッチングパラメータ -.PP +.PP この節に記載されているキーワードは、ルールがマッチするか否かを決定するときに、 パケットのどの属性を使用するのかを記述するために使用されます。 以下の汎用属性がマッチングに使用でき、この順序で使用する必要があります: .TP .B tos 異なるサービス型 (Type-Of-Service) 値を持つパケットをフィルタできます。 この上、個々のサービスレベルや組み合わせでフィルタできます。 TOS マスクに対する値は、16 進数または 10 進数の整数で表現されます。 .TP .B ttl パケットを生存時間 (Time-To-Live) 値で選択することもできます。 フィルタルールで与えられる値は、 マッチが行われるパケットの値と厳密にマッチする必要があります。 この値は、10 進数の整数でのみ与えることができます。 .TP .B proto 特定のプロトコルに対してマッチすることができます。 \fB/etc/protocols\fP 中の全プロトコル名が認識されますし、使用可能です。 また、プロトコルを 10 進数で指定することもできます。 これにより、あなた独自のプロトコルや 新しいプロトコルであるためリストが古くて掲載されていないものに対し、 マッチするルールを作成できます。 .IP TCP または UDP パケットにマッチする、 特殊なプロトコルキーワード \fBtcp/udp\fP を使用することができます。 このキーワードは、 同じルールをいくつも書かなくてもよいようにするため、追加されました。 .\" XXX grammar should reflect this (/etc/protocols) .PP \fBfrom\fP と \fBto\fP のキーワードは、 IP アドレス (および省略可能なポート番号) とマッチさせるために使用されます。 送信元と送信先の「両方の」パラメータを指定する必要があります。 -.PP +.PP IP アドレスの指定方法は、次の 2 つのうちのいずれかです: 数値によるアドレス\fB/\fPマスクまたは、ホスト名 \fBmask\fP ネットマスク。 ホスト名は、hosts ファイルまたは DNS 中 (設定やライブラリに依存します) の有効なホスト名か、ドット付き数値形式です。 ネットワーク指定として特別な記法はありませんが、ネットワーク名は認識されます。 フィルタルールを DNS に依存させると攻撃の余地を導入してしまうので、 勧められません。 .PP ホスト名には特殊な \fBany\fP が許され、0.0.0.0/0 と認識されます (後述のマスク書式参照)。これは全 IP アドレスにマッチします。 "any" だけがマスクを暗黙的に指定しますので、 他の状況では、ホスト名はマスクとともに指定する必要があります。 ホストとマスクに対して "any" を指定できるものの、 この言語においては、意味を持たなくなります。 .PP 数値フォーマット "x\fB/\fPy" は、 1 のビットが MSB から開始して y 個連続するマスクの生成を示します。 よって、y の値が 16 である場合には、0xffff0000 になります。 シンボリックな "x \fBmask\fP y" は、 マスク y がドット付き IP 表現、 または 0x12345678 の形式の 16 進数であることを示します。 ビットマスクが示す IP アドレスの全ビットと、 パケットのアドレスとが、厳密にマッチする必要があります; 現在、マッチの意味を反転する方法はありませんし、 ビットマスクにて容易に表現可能ではない IP アドレス範囲にマッチさせる方法もありません (たとえるなら、ここまで実現すると、もはや朝食とは言えないですね)。 .PP 送信元と送信先のどちらかまたは両者に \fBport\fP マッチを含む場合、 TCP と UDP のパケットに対してのみ適用されます。 .\" XXX - "may only be" ? how does this apply to other protocols? will it not match, or will it be ignored? \fBproto\fP マッチパラメータが無い場合、 どちらのプロトコルのパケットも比較されます。 これは、"proto tcp/udp" と等価です。 \fBport\fP の比較を行うときには、 サービス名および数値のポート番号のどちらでも使用できます。 ポートの比較を行う際、数値形式を比較演算子とともに使用したり、 ポート範囲を指定したりできます。 ポートが \fBfrom\fP オブジェクトの一部として登場する場合、 送信元ポート番号にマッチします。 ポートが \fBto\fP オブジェクトの一部として登場する場合、 送信先ポート番号にマッチします。 更なる情報は使用例を参照してください。 .PP \fBall\fP キーワードは、本質的に、 他のマッチパラメータを伴わない "from any to any" の同義語です。 .PP 送信元および送信先のマッチパラメータの後に、次の追加のパラメータを使用可能です: .TP .B with ある種のパケットのみが持つ特殊な属性にマッチする場合に使用します。 一般に、IP オプションが存在する場合にマッチさせるには、\fBwith ipopts\fP を使用します。 完全なヘッダを格納するには短かすぎるパケットにマッチさせるには、 \fBwith short\fP を使用します。 断片化されたパケットにマッチさせるためには、\fBwith frag\fP を使用します。 更に、IP オプション固有のフィルタリングに関しては、 各オプションを列挙可能です。 .IP \fBwith\fP キーワードの後にパラメータを続ける前に、 語 \fBnot\fP または \fBno\fP を挿入し、 オプションが存在しない場合にのみフィルタルールがマッチするようにできます。 .IP \fBwith\fP 節を連続して記述することが許されます。 また、キーワード \fBand\fP を、\fBwith\fP の代りに使用することができます。 これは、純粋に可読性向上のためです ("with ... and ...")。 複数の節を列挙したとき、すべてがマッチするときに、ルールがマッチします。 .\" XXX describe the options more specifically in a separate section .TP .B flags TCP フィルタリングにおいてのみ有効です。 使用可能なレターは、TCP ヘッダにて設定可能なフラグの 1 つを表現します。 関連は次の通りです: .LP .nf F - FIN S - SYN R - RST P - PUSH A - ACK U - URG .fi .IP 様々なフラグシンボルを組み合わせて使用できますので、 "SA" はパケット中の SYN-ACK の組み合わせを表現します。 "SFR" などの組み合わせの指定を制限するものはありません。 この組み合わせは、規則を守っている TCP 実装では通常生成されません。 しかしながら、異常を避けるために、 どのフラグに対してフィルタリングしているのかを示す必要があります。 このために、どの TCP フラグを比較するのか (すなわち、どのフラグを重要と考えるか) を示すマスクを指定できます。 これは、マッチ対象の TCP フラグ集合の後に、"/" を付けることで 実現できます。 例えば: .LP .nf ... flags S # "flags S/AUPRFS" になり、SYN フラグ「のみ」 # が設定されているパケットにマッチします。 ... flags SA - # "flags SA/AUPRFS" になり、SYN および ACK のフラグ + # "flags SA/AUPRFSC" になり、SYN および ACK のフラグ # のみが設定されているパケットにマッチします。 ... flags S/SA # SYN-ACK の組のうち、SYN フラグのみが設定されている # パケットにのみマッチします。これは共通の「確立」 # キーワード動作です。"S/SA" は SYN と ACK の組の # 「両方」が設定されているものにはマッチ「しません」 # が、"SFP" にはマッチ「します」。 .fi .TP .B icmp-type \fBproto icmp\fP とともに使用した場合にのみ有効であり、 \fBflags\fP とともに使用しては「なりません」。 多くのタイプがあり、この言語で認識される短縮形や、 これに関連付けられた数値で指定できます。 セキュリティの観点からみて最も重要なものは ICMP リダイレクトです。 .SH 履歴保存 .PP フィルタルールに設定可能な、最後から 2 番目のパラメータは、 パケットの履歴情報を記録するか否か、およびどのような履歴を保存するかです。 以下の情報を保存できます: .TP .B state 通信セッションのフロー情報を保存します。 TCP, UDP, ICMP の各パケットに関して状態が保存されます。 .TP .B frags 断片化されたパケットの情報を保存します。 この情報は、後に断片化する際に使用します。 .PP これらにマッチするパケットは素通しし、アクセス制御リストを通しません。 .SH グループ パラメータの最後の組はフィルタルールの「グルーピング」を制御します。 他のグループが指定されない限り、 デフォルトでは、全フィルタルールはグループ 0 に置かれます。 非デフォルトのグループにルールを追加するには、 グループの「頭 (head)」を作成するところから、グループを開始します。 パケットがグループの「頭」のルールにマッチする場合、 フィルタ処理はそのグループに切り替わり、 そのルールをそのグループのデフォルトとして使用します。 \fBquick\fP を \fBhead\fP ルールとともに使用する場合、 そのグループの処理から戻るまでは、ルール処理は停止しません。 .PP あるルールは、新規グループの頭でありかつ、 非デフォルトグループのメンバであることが可能です (\fBhead\fP と \fBgroup\fP を同一ルール内で同時に使用可能です)。 .TP .B "head " 新規グループ (番号 n) を作成することを示します。 .TP .B "group " このルールを、グループ 0 ではなく、グループ (番号 n) に置くことを示します。 .SH ロギング .PP \fBlog\fP アクションまたはオプションにて、パケットのログを行うとき、 パケットのヘッダが \fBipl\fP パケットロギング擬似デバイスに書き込まれます。 \fBlog\fP キーワードの直後に、次の修飾語句を (この順序で) 使用できます: .TP .B body パケットの内容の最初の 128 バイトを、ヘッダの後でログすることを示します。 .TP .B first ログが "keep" オプションと共に使用される場合、 本オプションも指定することを勧めます。 これにより、トリガとなるパケットのみをログして、 この後に状態情報にマッチする全パケットをログしないようになります。 .TP .B or-block なんらかの理由でフィルタがログを取れない場合 (ログ読み取りが非常に遅い場合など)、 このパケットに対するこのルールのアクションが \fBblock\fP であったと解釈 させます。 .TP .B "level " このパケットの情報ログに、 どのログファシリティと優先度を使用するか、 またはデフォルトファシリティでどの優先度を使用するかを指定します。 情報ログには、ipmon の -s オプションを使用します。 .PP このデバイスに書き込まれるレコードのフォーマットについては ipl(4) を参照してください。 このログを読み取って整形するには、ipmon(8) を使用します。 .SH 使用例 .PP \fBquick\fP オプションは次のようなルールに対して都合が良いです: \fC .nf block in quick from any to any with ipopts .fi .PP これは、 標準的な長さではないヘッダを持つ (IP オプションを持つ) パケットにマッチし、 この先のルール処理を行わずに、 マッチが発生したこととパケットをブロックすべきことを記録します。 .PP 次のような「継続」ルールの解釈により: .LP .nf block in from any to any port < 6000 pass in from any to any port >= 6000 block in from any to any port > 6003 .fi .PP 範囲 6000-6003 が許され、他は許さないように設定できます。 最初のルールの効果よりも、後続ルールが優先することに注意してください。 同じことを行う、他の (容易な) 方法は次の通りです: .LP .nf block in from any to any port 6000 <> 6003 pass in from any to any port 5999 >< 6004 .fi .PP 効果を持たせるためには、 "block" および "pass" の両方をここに書く必要があります。 なぜなら、"block" アクションにマッチしないことが通過を意味するわけではなく、 ルールが効果を持たないことを意味するだけだからです。 ポートが1024未満のものを許すには、次のようなルールを使用します: .LP .nf pass in quick from any to any port < 1024 .fi .PP これは、最初のブロックの前に置く必要があります。 le0/le1/lo0 からのすべての内向きパケットを処理し、 デフォルトでは内向きの全パケットをブロックする 新規グループを作成するには、次のようにします: .LP .nf block in all block in quick on le0 all head 100 block in quick on le1 all head 200 block in quick on lo0 all head 300 .fi .PP そして、le0 で ICMP パケットのみを許すには、次のようにします: .LP .nf pass in proto icmp all group 100 .fi .PP le0 からの内向きパケットのみがグループ 100 で処理されますので、 インタフェース名を再度指定する必要がないことに注意してください。 同様に、次のように TCP などの処理を分解できます: .LP .nf block in proto tcp all head 110 group 100 pass in from any to any port = 23 group 110 .fi .PP 最終行を、グループを使用せずに記述すると、次のようになります: .LP .nf pass in on le0 proto tcp from any to any port = telnet .fi .PP "port = telnet" と記述したい場合には、"proto tcp" を指定する必要があることに 注意してください。 なぜなら、 パーザは自己に基づいてルールを解釈し、 指定されたプロトコルによって全サービス/ポート名を修飾するからです。 .SH 関連ファイル /dev/ipauth .br /dev/ipl .br /dev/ipstate .br /etc/hosts .br /etc/services .SH 関連項目 ipftest(1), iptest(1), mkfilters(1), ipf(4), ipnat(5), ipf(8), ipfstat(8) diff --git a/ja_JP.eucJP/man/man5/periodic.conf.5 b/ja_JP.eucJP/man/man5/periodic.conf.5 index 7dd3cfc2b5..249e99b4e1 100644 --- a/ja_JP.eucJP/man/man5/periodic.conf.5 +++ b/ja_JP.eucJP/man/man5/periodic.conf.5 @@ -1,594 +1,614 @@ .\"- .\" Copyright (c) 2000 Brian Somers .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" %FreeBSD: src/share/man/man5/periodic.conf.5,v 1.8.2.14 2001/07/21 09:16:52 schweikh Exp % +.\" %FreeBSD: src/share/man/man5/periodic.conf.5,v 1.8.2.15 2001/07/28 11:44:23 brian Exp % .\" -.\" $FreeBSD: doc/ja_JP.eucJP/man/man5/periodic.conf.5,v 1.9 2001/07/12 00:16:02 horikawa Exp $ +.\" $FreeBSD: doc/ja_JP.eucJP/man/man5/periodic.conf.5,v 1.10 2001/07/23 02:26:59 horikawa Exp $ .Dd June 22, 2000 .Dt PERIODIC.CONF 5 -.Os FreeBSD +.Os .Sh 名称 .Nm periodic.conf .Nd 定期実行ジョブの設定情報 .Sh 解説 .Nm ファイルには、日次/週次/月次のシステムメンテナンスジョブを どのように実行するかが記述されています。 このファイルは .Pa /etc/defaults にあり、 .Pa /etc の下にある同名のファイルは部分的に優先されます。 そしてさらに .Pa /etc/periodic.conf.local が優先されます。 .Pp .Nm は実際にはそれぞれの定期実行スクリプトからシェルスクリプトとして 取り込まれ、単にデフォルトの設定変数を提供することを意図しています。 .Pp 以下の変数は .Xr periodic 8 自身によって使用されます: .Bl -tag -offset 4n -width 2n -.It Ar local_periodic -(文字列) 定期実行スクリプトを検索するディレクトリのリスト。 +.It Va local_periodic +.Pq Vt 文字列 +定期実行スクリプトを検索するディレクトリのリスト。 このリストは .Xr periodic 8 の引数が絶対パスのディレクトリ名でなかった場合にのみ使用され、常に .Pa /etc/periodic が前置きされます。 -.It Ar dir Ns No _output -(パスまたはリスト) +.It Va dir Ns No _output +.Pq Vt パス No または Vt リスト .Ar dir ディレクトリから起動されるスクリプトの出力をどうするか記述します。 この変数に絶対パスが指定された場合、出力はそのファイルに行われます。 絶対パスではなかった場合は、一つ以上のスペースで区切られた 複数のメールアドレスと解釈され、それらのユーザにメールで送られます。 この変数が設定されてない場合や変数が空であった場合は、 標準出力に出力されます。 .Pp それほど気にかけていないマシンでは -.Ar $daily_output 、 -.Ar $weekly_output -そして -.Ar $monthly_output +.Va daily_output , +.Va weekly_output , +.Va monthly_output はそれぞれ .Dq /var/log/daily.log , -.Dq /var/log/weekly.log -そして +.Dq /var/log/weekly.log , .Dq /var/log/monthly.log にしておくといいでしょう。すると .Xr newsyslog 8 が、(もしファイルがあれば) これらのファイルを適切な時に切替えます。 -.It Ar dir Ns No _show_success -.It Ar dir Ns No _show_info -.It Ar dir Ns No _show_badconfig -(ブール値) これらの変数は +.It Va dir Ns No _show_success +.It Va dir Ns No _show_info +.It Va dir Ns No _show_badconfig +.Pq Vt ブール値 +これらの変数は 起動されたスクリプトの戻り値に従って、 .Xr periodic 8 が出力を抑制するかどうかを制御します (ここで .Ar dir はそれぞれのスクリプトが置かれてるディレクトリ名です)。 もしスクリプトの戻り値が .Sq 0 で、 -.Ar dir Ns No _show_success が +.Va dir Ns No _show_success +が .Dq NO に設定されていた場合、 .Xr periodic 8 はスクリプトの出力を抑制します。 もしスクリプトの戻り値が .Sq 1 で、 -.Ar dir Ns No _show_info が +.Va dir Ns No _show_info が .Dq NO に設定されていた場合、 .Xr periodic 8 はスクリプトの出力を抑制します。 もしスクリプトの戻り値が .Sq 2 で、 -.Ar dir Ns No _show_badconfig が +.Va dir Ns No _show_badconfig +が .Dq NO に設定されていた場合、 .Xr periodic 8 はスクリプトの出力を抑制します。 もしこれらの変数が .Dq YES にも .Dq NO にも設定されていなかった場合は、それぞれのデフォルト値は .Dq YES , .Dq YES そして .Dq NO です。 .Pp スクリプトの戻り値がどのように解釈されるかは .Xr periodic 8 のマニュアルページを参照して下さい。 .El .Pp 以下の変数は .Pa /etc/periodic/daily にある標準のスクリプトによって使用されます: .Bl -tag -offset 4n -width 2n -.It Ar daily_clean_disks_enable -(ブール値) -.Ar daily_clean_disks_files +.It Va daily_clean_disks_enable +.Pq Vt ブール値 +.Va daily_clean_disks_files にマッチしたファイルを毎日削除したい場合 .Dq YES にします。 -.It Ar daily_clean_disks_files -(文字列) マッチさせるファイル名のリストを設定します。 +.It Va daily_clean_disks_files +.Pq Vt 文字列 +マッチさせるファイル名のリストを設定します。 ワイルドカードも使用できます。 -.It Ar daily_clean_disks_days -(整数) -.Ar daily_clean_disks_enable +.It Va daily_clean_disks_days +.Pq Vt 整数 +.Va daily_clean_disks_enable が .Dq YES の場合、何日間ファイルにアクセスや修正がなかったら 削除するかをこの変数に設定する必要もあります。 -.It Ar daily_clean_disks_verbose -(ブール値) 削除したファイル名を日次の出力で報告させたい場合 +.It Va daily_clean_disks_verbose +.Pq Vt ブール値 +削除したファイル名を日次の出力で報告させたい場合 .Dq YES に設定します。 -.It Ar daily_clean_tmps_enable -(ブール値) 毎日一時ディレクトリをきれいにしたい場合 +.It Va daily_clean_tmps_enable +.Pq Vt ブール値 +毎日一時ディレクトリをきれいにしたい場合 .Dq YES に設定します。 -.It Ar daily_clean_tmps_dirs -(文字列) -.Ar daily_clean_tmps_enable +.It Va daily_clean_tmps_dirs +.Pq Vt 文字列 +.Va daily_clean_tmps_enable が .Dq YES に設定されていた場合にきれいにするディレクトリ名のリストを指定します。 -.It Ar daily_clean_tmps_days -(整数) -.Ar daily_clean_tmps_enable +.It Va daily_clean_tmps_days +.Pq Vt 整数 +.Va daily_clean_tmps_enable が設定されていた場合、何日間ファイルにアクセスや修正がなかったら 削除するかをこの変数に設定する必要もあります。 -.It Ar daily_clean_tmps_ignore -(文字列) -.Ar daily_clean_tmps_enable +.It Va daily_clean_tmps_ignore +.Pq Vt 文字列 +.Va daily_clean_tmps_enable が .Dq YES に設定されていた場合に削除させたくないファイルのリストを設定します。 ワイルドカードも使用可能です。 -.It Ar daily_clean_tmps_verbose -(ブール値) 削除したファイル名を日次の出力で報告させたい場合 +.It Va daily_clean_tmps_verbose +.Pq Vt ブール値 +削除したファイル名を日次の出力で報告させたい場合 .Dq YES に設定します。 -.It Ar daily_clean_preserve_enable -(ブール値) +.It Va daily_clean_preserve_enable +.Pq Vt ブール値 .Pa /var/preserve から古いファイルを削除したい場合 .Dq YES に設定します。 -.It Ar daily_clean_preserve_days -(整数) 何日間ファイルに修正がなかったら削除するかを +.It Va daily_clean_preserve_days +.Pq Vt 整数 +何日間ファイルに修正がなかったら削除するかを この変数に設定します。 -.It Ar daily_clean_preserve_verbose -(ブール値) 削除したファイル名を日次の出力で報告させたい場合 +.It Va daily_clean_preserve_verbose +.Pq Vt ブール値 +削除したファイル名を日次の出力で報告させたい場合 .Dq YES に設定します。 -.It Ar daily_clean_msgs_enable -(ブール値) 古いシステムメッセージを削除する場合 +.It Va daily_clean_msgs_enable +.Pq Vt ブール値 +古いシステムメッセージを削除する場合 .Dq YES に設定します。 -.It Ar daily_clean_msgs_days -(整数) 何日間ファイルに修正がなかったら削除するかを設定します。 +.It Va daily_clean_msgs_days +.Pq Vt 整数 +何日間ファイルに修正がなかったら削除するかを設定します。 この変数が空白だった場合、 .Xr msgs 1 のデフォルト値が使われます。 -.It Ar daily_clean_rwho_enable -(ブール値) +.It Va daily_clean_rwho_enable +.Pq Vt ブール値 .Pa /var/who の下の古いファイルを削除したい場合 .Dq YES に設定します。 -.It Ar daily_clean_rwho_days -(整数) 何日間ファイルに修正がなかったら削除するかを設定します。 -.It Ar daily_clean_rwho_verbose -(ブール値) 削除したファイル名を日次の出力で報告させたい場合 +.It Va daily_clean_rwho_days +.Pq Vt 整数 +何日間ファイルに修正がなかったら削除するかを設定します。 +.It Va daily_clean_rwho_verbose +.Pq Vt ブール値 +削除したファイル名を日次の出力で報告させたい場合 .Dq YES に設定します。 -.It Ar daily_clean_hoststat_enable -(ブール値) +.It Va daily_clean_hoststat_enable +.Pq Vt ブール値 .Pa /var/spool/.hoststat の下の古いファイルを削除したい場合 .Dq YES に設定します。 -.It Ar daily_clean_hoststat_days -(整数) 何日間ファイルに修正がなかったら削除するかを設定します。 -.It Ar daily_clean_hoststat_verbose -(ブール値) 削除したファイル名を日次の出力で報告させたい場合 +.It Va daily_clean_hoststat_days +.Pq Vt 整数 +何日間ファイルに修正がなかったら削除するかを設定します。 +.It Va daily_clean_hoststat_verbose +.Pq Vt ブール値 +削除したファイル名を日次の出力で報告させたい場合 .Dq YES に設定します。 -.It Ar daily_backup_passwd_enable -(ブール値) +.It Va daily_backup_passwd_enable +.Pq Vt ブール値 .Pa /etc/master.passwd ファイルと .Pa /etc/group ファイルのバックアップをとりリポートを出力させたい場合 .Dq YES に設定します。 リポートは、両ファイルに対する修正点と .Pa group ファイルに .Xr chkgrp 8 をかけた結果を出力します。 -.It Ar daily_backup_aliases_enable -(ブール値) +.It Va daily_backup_aliases_enable +.Pq Vt ブール値 .Pa /etc/mail/aliases ファイルのバックアップをとり修正点を日次の出力で報告させたい場合 .Dq YES に設定します。 -.It Ar daily_backup_distfile_enable -(ブール値) +.It Va daily_backup_distfile_enable +.Pq Vt ブール値 .Pa /etc/Distfile ファイルのバックアップをとり修正点を日次の出力で報告させたい場合 .Dq YES に設定します。 -.It Ar daily_calendar_enable -(ブール値) 毎日 +.It Va daily_calendar_enable +.Pq Vt ブール値 +毎日 .Ic calendar -a を行いたい場合 .Dq YES に設定します。 -.It Ar daily_accounting_enable -(ブール値) 毎日アカウンティングファイルを +.It Va daily_accounting_enable +.Pq Vt ブール値 +毎日アカウンティングファイルを 切り替えたい場合 .Dq YES にします。 .Xr rc.conf 5 の中の -.Ar accounting_enable +.Va accounting_enable が有効になっていない場合は切り替える必要はありません。 -.It Ar daily_accounting_compress -(ブール値) 日々のアカウンティングファイルを +.It Va daily_accounting_compress +.Pq Vt ブール値 +日々のアカウンティングファイルを .Xr gzip 1 を使用して圧縮したい場合 .Dq YES に設定します。 -.It Ar daily_accounting_save -(数値) -.Ar daily_accounting_enable +.It Va daily_accounting_save +.Pq Vt 数値 +.Va daily_accounting_enable が設定されている場合、 保存すべき日々のアカウンティングファイル数を指定します。 デフォルトは .Dq 3 です。 -.It Ar daily_accounting_flags -(文字列) -.Ar daily_accounting_enable +.It Va daily_accounting_flags +.Pq Vt 文字列 +.Va daily_accounting_enable が .Dq YES に設定されていた場合に ( .Fl s に加えて) .Xr sa 1 ユーティリティに渡すフラグを指定します。 デフォルトは .Fl q です。 -.It Ar daily_distfile_enable -(ブール値) 毎日 +.It Va daily_distfile_enable +.Pq Vt ブール値 +毎日 .Xr rdist 1 を実行したい場合 .Dq YES に設定します。その場合 .Pa /etc/Distfile も存在していなければなりません。 .It Pa daily_news_expire_enable -(ブール値) +.Pq Vt ブール値 .Pa /etc/news.expire を実行したい場合 .Dq YES に設定します。 .It Pa daily_uuclean_enable -(ブール値) +.Pq Vt ブール値 .Ic uustat -a を実行したい場合 .Dq YES に設定します。 -.It Ar daily_status_disks_enable -(ブール値) +.It Va daily_status_disks_enable +.Pq Vt ブール値 .Po -.Ar daily_status_disks_df_flags +.Va daily_status_disks_df_flags を引数に指定して .Pc .Xr df 1 を実行し、また .Ic dump -W を実行したい場合 .Dq YES に設定します。 -.It Ar daily_status_disks_df_flags -(文字列) -.Ar daily_status_disks_enable +.It Va daily_status_disks_df_flags +.Pq Vt 文字列 +.Va daily_status_disks_enable が .Dq YES の場合、 .Xr df 1 ユーティリティに渡す引数を設定します。 -.It Ar daily_status_uucp_enable -(ブール値) +.It Va daily_status_uucp_enable +.Pq Vt ブール値 .\" 原文の /etc/uuclean.daily は誤りと思われる [man-jp-reviewer 3018], .\" docs/2267 .Ic uustat -a を実行したい場合 .Dq YES に設定します。 -.It Ar daily_status_network_enable -(ブール値) +.It Va daily_status_network_enable +.Pq Vt ブール値 .Ic netstat -i を実行したい場合 .Dq YES に設定します。 -.It Ar daily_status_network_usedns -(ブール値) +.It Va daily_status_network_usedns +.Pq Vt ブール値 .Xr netstat 1 を実行する時、(DNS を参照するための) .Fl n オプションをつけずに実行したい場合 .Dq YES に設定します。 -.It Ar daily_status_rwho_enable -(ブール値) +.It Va daily_status_rwho_enable +.Pq Vt ブール値 .Xr uptime 1 を実行したい場合 (もしくは .Pa /etc/rc.conf の中で -.Ar rwhod_enable +.Va rwhod_enable を .Dq YES に設定していて .Xr ruptime 1 を実行したい場合) .Dq YES に設定します。 -.It Ar daily_status_mailq_enable -(ブール値) +.It Va daily_status_mailq_enable +.Pq Vt ブール値 .Xr mailq 1 を実行したい場合 .Dq YES に設定します。 -.It Ar daily_status_mailq_shorten -(ブール値) -.Ar daily_status_mailq_enable +.It Va daily_status_mailq_shorten +.Pq Vt ブール値 +.Va daily_status_mailq_enable を .Dq YES に設定していて .Nm mailq の出力を短くしたい場合 .Dq YES に設定します。 -.It Ar daily_status_security_enable -(ブール値) +.It Va daily_status_security_enable +.Pq Vt ブール値 .Pa /etc/security を実行したい場合 .Dq YES に設定します。 -.It Ar daily_status_security_inline -(ブール値) +.It Va daily_status_security_inline +.Pq Vt ブール値 .Pa /etc/security .\" inline -> その場 をその場で実行したい場合 .Dq YES に設定します。 デフォルトでは、 -.Ar $daily_status_security_output +.Va daily_status_security_output の値に従い、出力をメールするかログします。 -.It Ar daily_status_security_output -(文字列) -.Ar $daily_status_security_inline +.It Va daily_status_security_output +.Pq Vt 文字列 +.Va daily_status_security_inline が .Dq NO である場合の、 .Pa /etc/security の送信先です。 この変数は、前述の -.Ar *_output +.Va *_output 変数と同様に振舞います。 すなわち、1 個以上の email アドレスか、1 個の絶対パス指定のファイル名です。 -.It Ar daily_status_security_noamd -(ブール値) +.It Va daily_status_security_noamd +.Pq Vt ブール値 前日のファイルシステムのマウント状況と比較する時に .Xr amd 8 によるマウントを無視したい場合 .Dq YES に設定します。 -.It Ar daily_status_security_nomfs -(ブール値) -前日のファイルシステムのマウント状況と比較する時に -.Xr mfs 8 -によるマウントを無視したい場合 -.Dq YES -に設定します。 -.It Ar daily_status_mail_rejects_enable -(ブール値) +.It Va daily_status_mail_rejects_enable +.Pq Vt ブール値 .Pa /var/log/maillog に記録された 前日分のメール拒否を要約したい場合 .Dq YES に設定します。 -.It Ar daily_status_named_enable -(ブール値) +.It Va daily_status_named_enable +.Pq Vt ブール値 前日文の拒否されたゾーン転送 (AXFR と IXFR) を要約したい場合 .Dq YES に設定します。 -.It Ar daily_status_named_logs -(数値) -前日文の拒否されたゾーン転送のチェック対象となる、 -ログファイル数を設定します。 -.It Ar daily_status_named_usedns -(ブール値) +.It Va daily_status_named_usedns +.Pq Vt ブール値 DNS の逆引き検索を有効にしたい場合 .Dq YES に設定します。 -.It Ar daily_status_mail_rejects_logs -(整数) 前日分のメール拒否をチェックするべき +.It Va daily_status_mail_rejects_logs +.Pq Vt 整数 +前日分のメール拒否をチェックするべき maillog ファイルの数を設定します。 -.It Ar daily_local -(文字列) 他のすべての日次スクリプトの後に実行する +.It Va daily_queuerun_enable +.Pq Vt ブール値 +Set to +.Dq YES +if you want to manually run the mail queue at least once a day. +.It Va daily_local +.Pq Vt 文字列 +他のすべての日次スクリプトの後に実行する 追加スクリプトのリストを設定します。 すべてのスクリプトは絶対パスで指定されなければなりません。 .El .Pp 以下の変数は .Pa /etc/periodic/weekly にある標準のスクリプトによって使用されます: .Bl -tag -offset 4n -width 2n -.It Ar weekly_clean_kvmdb_enable -(ブール値) +.It Va weekly_clean_kvmdb_enable +.Pq Vt ブール値 古い .Pa /var/db/kvm_*.db ファイルを削除したい場合 .Dq YES に設定します。 現在のカーネルが使っている kvm ファイルは削除されません。 -.It Ar weekly_clean_kvmdb_days -(整数) 何日間ファイルにアクセスがなかったら +.It Va weekly_clean_kvmdb_days +.Pq Vt 整数 +何日間ファイルにアクセスがなかったら 削除するかをこの変数に設定する必要があります。 -.It Ar weekly_clean_kvmdb_verbose -(ブール値) 削除したファイル名を週次の出力で報告させたい場合 +.It Va weekly_clean_kvmdb_verbose +.Pq Vt ブール値 +削除したファイル名を週次の出力で報告させたい場合 .Dq YES に設定します。 -.It Ar weekly_uucp_enable -(ブール値) +.It Va weekly_uucp_enable +.Pq Vt ブール値 .Pa /usr/libexec/uucp/clean.weekly を実行したい場合 .Dq YES に設定します。 -.It Ar weekly_locate_enable -(ブール値) +.It Va weekly_locate_enable +.Pq Vt ブール値 .Pa /usr/libexec/locate.updatedb を実行したい場合 .Dq YES に設定します。このスクリプトは .An nobody ユーザとして .Ic nice -5 を使用して実行され、 .Xr locate 1 コマンドによって使われるテーブルを生成します。 -.It Ar weekly_whatis_enable -(ブール値) +.It Va weekly_whatis_enable +.Pq Vt ブール値 .Pa /usr/libexec/makewhatis.local を実行したい場合 .Dq YES に設定します。このスクリプトは .Xr apropos 1 コマンドによって使われるデータベースを再生成します。 -.It Ar weekly_catman_enable -(ブール値) +.It Va weekly_catman_enable +.Pq Vt ブール値 .Pa /usr/libexec/catman.local を実行したい場合 .Dq YES に設定します。 このスクリプトはすべての古くなったマニュアルページを処理して、 ディスク容量を消費する代わりに .Xr man 1 コマンドを速くします。 -.It Ar weekly_noid_enable -(ブール値) システム上でみなしごになったファイルを +.It Va weekly_noid_enable +.Pq Vt ブール値 +システム上でみなしごになったファイルを 探したい場合 .Dq YES に設定します。 みなしごになったファイルとは、 無効なユーザやグループのものとなっているファイルです。 -.It Ar weekly_noid_dirs -(文字列) みなしごになったファイルを探したいディレクトリのリストを +.It Va weekly_noid_dirs +.Pq Vt 文字列 +みなしごになったファイルを探したいディレクトリのリストを 指定します。これは通常 .Pa / に設定されます。 -.It Ar weekly_status_pkg_enable -(ブール値) インストールされているパッケージの中で +.It Va weekly_status_pkg_enable +.Pq Vt ブール値 +インストールされているパッケージの中で 古くなったものを .Xr pkg_version 1 を使用して一覧にしたい場合 .Dq YES に設定します。 -.It Ar weekly_local -(文字列) 他のすべての週次スクリプトの後に実行する +.It Va weekly_local +.Pq Vt 文字列 +他のすべての週次スクリプトの後に実行する 追加スクリプトのリストを設定します。 すべてのスクリプトは絶対パスで指定されなければなりません。 .El .Pp 以下の変数は .Pa /etc/periodic/monthly にある標準のスクリプトによって使用されます: .Bl -tag -offset 4n -width 2n -.It Ar monthly_accounting_enable -(ブール値) +.It Va monthly_accounting_enable +.Pq Vt ブール値 .Xr ac 8 コマンドによってログインのアカウンティング処理を行いたい場合 .Dq YES に設定します。 -.It Ar monthly_local -(文字列) 他のすべての月次スクリプトの後に実行する +.It Va monthly_local +.Pq Vt 文字列 +他のすべての月次スクリプトの後に実行する 追加スクリプトのリストを設定します。 すべてのスクリプトは絶対パスで指定されなければなりません。 .El .Sh 関連ファイル .Bl -tag -width /etc/defaults/periodic.conf .It Pa /etc/defaults/periodic.conf デフォルト設定ファイルです。 このファイルはすべてのデフォルトの変数と設定値が記述されています。 .It Pa /etc/periodic.conf 通常、システム特有の変数を優先させるためのファイルです。 .It Pa /etc/periodic.conf.local さらに追加して優先させるためのファイルで、 .Pa /etc/periodic.conf を共有していたり、配布していたりする場合に役立ちます。 .El .Sh 関連項目 .Xr apropos 1 , .Xr calendar 1 , .Xr df 1 , .Xr gzip 1 , .Xr locate 1 , .Xr man 1 , .Xr msgs 1 , .Xr netstat 1 , .Xr nice 1 , .Xr pkg_version 1 , .Xr rdist 1 , .Xr rc.conf 5 , .Xr ac 8 , .Xr chkgrp 8 , .Xr dump 8 , -.Xr mfs 8 , .Xr newsyslog 8 , .Xr periodic 8 .Sh 歴史 .Nm ファイルは .Fx 4.1 で登場しました。 .Sh 作者 .An Brian Somers Aq brian@Awfulhak.org diff --git a/ja_JP.eucJP/man/man9/style.9 b/ja_JP.eucJP/man/man9/style.9 index bcebfe80ff..ab1f9dac68 100644 --- a/ja_JP.eucJP/man/man9/style.9 +++ b/ja_JP.eucJP/man/man9/style.9 @@ -1,606 +1,608 @@ .\" Copyright (c) 1995 FreeBSD Inc. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL [your name] OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: doc/ja_JP.eucJP/man/man9/style.9,v 1.9 2001/07/12 00:16:04 horikawa Exp $ +.\" $FreeBSD: doc/ja_JP.eucJP/man/man9/style.9,v 1.10 2001/07/23 02:27:01 horikawa Exp $ .\" .Dd December 14, 1995 .Dt STYLE 9 .Os FreeBSD .Sh 名称 .Nm style .Nd カーネルソースファイルのスタイルガイド .Sh 解説 このファイルは .Fx ソースツリーのカーネルソースに好ましいスタイルを明記しています。 これはユーザランドのコードスタイルの手引きでもあります。 .\" $ と FreeBSD を続けるとキーワード置換されるので、\& を挿入 .\" 2001/05/23 horikawa@jp.FreeBSD.org .Bd -literal /* * FreeBSD のためのスタイルガイドです。 * CSRG の KNF (Kernel Normal Form, カーネル標準書式) に基づいています。 * * @(#)style 1.14 (Berkeley) 4/28/95 - * $\&FreeBSD: src/share/man/man9/style.9,v 1.32.2.12 2001/07/21 09:16:58 schweikh Exp $ + * $\&FreeBSD: src/share/man/man9/style.9,v 1.32.2.13 2001/07/23 09:48:20 dd Exp $ */ /* * とても重要な 1 行のコメントはこのようにします。 */ /* 殆どの 1 行のコメントはこのようにします。 */ /* * 複数行にわたるコメントはこのようにします。実際の文章を書きます。実際の * 段落に見えるように埋めていきます。 */ .Ed .Pp 著作権ヘッダの後には空行を 1 行入れ、ソースファイルには .Va rcsid を付けます。 バージョン管理システムの ID タグは、ファイル中に 1 個のみあるべきです (このファイルでは違いますが)。 C/C++ ソースファイル以外はこの例に従いますが、 C/C++ ソースファイルは以降の例に従います。 外部から入手したファイルの すべての VCS (バージョン管理システム) リビジョン識別子は、維持します。 これには、ファイルの来歴を示す複数の ID も含みます。 一般的に、`$' も含めて、ID はそのままとします。 ほとんどの非 FreeBSD の VCS ID は、 コメント中ではタブでインデントされているでしょう。 .Bd -literal #ifndef lint #if 0 static char sccsid[] = "@(#)style 1.14 (Berkeley) 4/28/95"; #endif static const char rcsid[] = "$\&FreeBSD: src/share/man/man9/style.9,v 1.32.2.12 2001/07/21 09:16:58 schweikh Exp $"; #endif /* not lint */ .Ed .Pp この後に空行を 1 行付けます。 .Pp カーネルのインクルードファイル (すなわち、sys/*.h) が初めに来ます。 通常、 または のどちらかが必要ですが、 両方は必要ないでしょう。 をインクルードしており、 依存関係は問題ありません。 .Bd -literal #include /* 角括弧による非ローカルインクルード */ .Ed .Pp ネットワークプログラムである場合は、 次にネットワークインクルードファイルを置きます。 .Bd -literal #include #include #include #include #include .Ed .Pp それから空行を置き、/usr インクルードファイルを続けます。 /usr インクルードファイルはソートされているべきです。 .Bd -literal #include .Ed .Pp グローバルなパス名は /usr/include/paths.h で定義されています。 プログラムにローカルなパス名はローカルディレクトリの pathnames.h に入れます。 .Bd -literal #include .Ed .Pp それから、空行があって、ユーザインクルードファイルが来ます。 .Bd -literal #include "pathnames.h" /* " " によるローカルインクルード */ .Ed .Pp アプリケーションインタフェースを実装している場合を除き、 実装の名前空間で #define したり名前を定義したりしてはいけません。 .Pp .Dq Li 安全でない マクロ (副作用を持っているもの) の名前と、 明らかな定数のマクロの名前はすべて大文字です。 式のように展開されるマクロは、単一のトークンにするか外側に括弧をつけます。 .Ql #define とマクロ名の間にタブ文字を 1 個入れます。 マクロがある関数のインライン展開である場合は、 関数名は全て小文字で、マクロはすべて大文字の同じ名前を持ちます。 .\" XXX 上記は名前が同じマクロを #undef すれば関数を使える .\" という ANSI のスタイルと衝突します。 .\" これは MALLOC() については言えないし、インライン関数を使う時の .\" 一般的なやりかたではありません。 マクロが 1 行以上必要な場合は、ブレース .Po .Sq \&{ と .Sq \&} .Pc を使用します。 バックスラッシュは右揃えします。こうすると読みやすくなります。 マクロが複合文をカプセル化する場合には、それを .Dq Li do ループで囲みます。 これにより、 .Dq Li if 文で安全に使用できます。 最後の文の終端のセミコロンは、 マクロではなくマクロの実施時に付けられるべきです。 これにより、清書器やエディタで文法解析しやすくなります。 .Bd -literal #define MACRO(x, y) do { \e variable = (x) + (y); \e (y) += 2; \e } while(0) .Ed .Pp 列挙値は全て大文字を使用します。 .Bd -literal enum enumtype { ONE, TWO } et; .Ed .Pp 構造体の中で変数を宣言する時には、 使用順、サイズ順、アルファベット順にソートして宣言します。 最初の区分は通常適用しませんが、例外があります。 各宣言は、それぞれ独立した行にて行います。 最初の語の後にタブ文字を 1 個置きます、すなわち .Ql int^Ix; と .Ql struct^Ifoo *x; です。 .Pp 重要な構造体は、それが使用されるファイルの先頭で宣言されるか、 複数のソースファイルで使用される場合は別のヘッダファイルで宣言されるべきです。 構造体がヘッダファイルで宣言されている場合には、 それら構造体の使用は、宣言とは分けられるべきで、かつ "extern" であるべきです。 .Bd -literal struct foo { struct foo *next; /* 使用中の foo リスト */ struct mumble amumble; /* mumble のコメント */ int bar; }; struct foo *foohead; /* グローバルな foo リストの先頭 */ .Ed .Pp 可能な時には必ず、あなた自身でリストを操作するのではなく、 .Xr queue 3 マクロを使用してください。 従って、前の例をより良く書くと次のようになります。 .Bd -literal #include struct foo { LIST_ENTRY(foo) link; /* foo リスト用のキューマクロの糊 */ struct mumble amumble; /* mumble のコメント */ int bar; }; LIST_HEAD(, foo) foohead; /* グローバルな foo リストの先頭 */ .Ed .Pp 構造体の型に typedef を使用する事は避けてください。 使用してしまうと、 構造体へのポインタを不透明 (opaque) に使用することが、 アプリケーションにとって不可能となります。 通常の struct タグを使用すると、これが可能となり、かつ有益です。 規約が typedef を要求する場合には、その名前を構造体タグに一致させます。 標準 C または .Tn POSIX によって明示されたものを除いては、 .Dq Li \&_t で終る typedef を避けてください。 .Bd -literal /* 構造体名と typedef を一致させます */ typedef struct _bar { int level; } BAR; .Ed .Pp 全ての関数はどこかでプロトタイプされます。 .Pp 私的な関数 (すなわち、他のどこでも使用されない関数など) の関数プロトタイプは、 最初のソースモジュールの先頭に置かれます。 単一のソースモジュールにローカルな関数は、 .Ql static で宣言されるべきです。 .Pp カーネルの別の部分から使用される関数は、 関連のあるインクルードファイルの中でプロトタイプされます。 .Pp 複数のモジュールでローカルに使用される関数は、 .Pa extern.h 等の分離したヘッダファイルの中に置かれます。 .Pp 一般にソースファイルが K&R 旧約聖書コンパイラで コンパイル可能である (べき) 時にのみ、 インクルードファイル の __P マクロを使用します。 新しいコードでの __P マクロの使用は反対されていますが、 既存のファイルに対する修正はそのファイルの規約と首尾一貫しているべきです。 .Pp ファイルの 50% かそれ以上を巻き込んだ修正の場合は、 一般にコードは .Dq 新しいコード とみなすことができます。 これは既存のコードの慣例を破り、 現在のスタイルガイドラインを使用するのに十分です。 .Pp カーネルはパラメータの型に関連付けられた名前を持ちます。 例えば、カーネル内でこのように使用します。 .Bd -literal void function(int fd); .Ed .Pp ユーザランドのアプリケーションに対して見えるヘッダファイルの中では、 可視のプロトタイプは、 型を伴った保護された名前を使用するか、 型だけで名前を使用しないかのどちらかが必要です。 保護された名前の使用がより望ましいです。 例えば、このように使用します。 .Bd -literal void function(int); .Ed .Pp または .Bd -literal void function(int _fd); .Ed .Pp プロトタイプは関数名の行揃えを行なうために、タブの後に追加のスペース文字を 置いても構いません。 .Bd -literal static char *function(int _arg, const char *_arg2, struct foo *_arg3, struct bar *_arg4); static void usage(void); /* * 全ての主要なルーチンはそれが何をするのかを簡潔に記述した * コメントを持つべきです。"main" ルーチンの前のコメントは * そのプログラムが何をするのかを記述するべきです。 */ int main(int argc, char *argv[]) { long num; int ch; char *ep; .Ed .Pp 一貫性のために、オプションの解析には getopt が使用されるべきです。 getopt 呼び出しと switch 文では、オプションをソートすべきですが、 switch 文のカスケードの一部の場合は例外です。 switch 文のカスケード要素は FALLTHROUGH コメントを持つべきです。 数値の引数は精度をチェックされるべきです。 到達できないコードは NOTREACHED コメントを持つべきです。 .Bd -literal while ((ch = getopt(argc, argv, "abn:")) != -1) switch (ch) { /* switch をインデント */ case 'a': /* case はインデントしない */ aflag = 1; /* FALLTHROUGH */ case 'b': bflag = 1; break; case 'n': num = strtol(optarg, &ep, 10); if (num <= 0 || *ep != '\e0') { warnx("illegal number, -n argument -- %s", optarg); usage(); } break; case '?': default: usage(); /* NOTREACHED */ } argc -= optind; argv += optind; .Ed .Pp 予約語 (if, while, for, return, switch) の後にスペースを入れます。 何も伴わないかただ 1 つの文を伴う制御文は、ブレースを使用しません。 1 つの文が 複数行である文の場合には、これは許されます。 無限ループは while ではなく for で行ないます。 .Bd -literal for (p = buf; *p != '\e0'; ++p) ; /* 何もなし */ for (;;) stmt; for (;;) { z = a + really + long + statement + that + needs + two lines + gets + indented + four + spaces + on + the + second + and + subsequent + lines; } for (;;) { if (cond) stmt; } if (val != NULL) val = realloc(val, newsize); .Ed .Pp for ループの各部は空のまま残しても構いません。 異常に複雑なルーチンでない限りは、ブロックの中に宣言を置いてはなりません。 .Bd -literal for (; cnt < 15; cnt++) { stmt1; stmt2; } .Ed .Pp インデントは 8 文字のタブです。 第 2 レベルのインデントは 4 文字のスペースです。 +長い分を折り返す必要がある場合、オペレータを行末に置きます。 .Bd -literal - while (cnt < 20) + while (cnt < 20 && this_variable_name_is_too_long_for_its_own_good && + ep != NULL) z = a + really + long + statement + that + needs + two lines + gets + indented + four + spaces + on + the + second + and + subsequent + lines; .Ed .Pp 空白文字を行末に追加してはいけません。 また、インデントを形成するためには、タブとその後にスペースのみを使用します。 タブが生み出す以上のスペースや、タブの前のスペースは使用しません。 .Pp ブレースの終了と開始は else と同じ行に置かれます。 必要でないブレースは省いても構いません。 .Bd -literal if (test) stmt; else if (bar) { stmt; stmt; } else stmt; .Ed .Pp 関数名の後はスペースを空けません。 コンマの後にはスペースを持ちます。 .Sq \&( または .Sq \&[ の後ろまたは .Sq \&] または .Sq \&) の前にはスペースを空けません。 .Bd -literal error = function(a1, a2); if (error != 0) exit(error); .Ed .Pp 単項演算子はスペースを要求しませんが、二項演算子は要求します。 優先順位が要求する場合または文が括弧なしでは混乱する場合以外は、 括弧は使用しません。 他人はあなたよりも混乱しやすいかもしれないということを覚えておいてください。 あなたは以下を理解できますか? .Bd -literal a = b->c[0] + ~d == (e || f) || g && h ? i : j >> 1; k = !(l & FLAGS); .Ed .Pp 成功時には 0 で、または .Xr sysexits 3 にあらかじめ定義してある値で exit するべきです。 .Bd -literal exit(EX_OK); /* * "Exit 0 on success." (成功時は 0 で終了) * の様に明白なコメントは避けてください */ } .Ed .Pp 関数の型は、関数自身に先行する行にあるべきです。 .Bd -literal static char * function(int a1, int a2, float fl, int a4) { .Ed .Pp 関数の中で変数を宣言する時には、サイズ順に、次にアルファベット順に ソートして宣言します。 1 行に複数の宣言は可能です。 行が溢れる場合は、型の予約語を再度使用します。 .Pp 宣言時に変数を初期化することによってコードを 不明瞭にしない様に注意してください。 この機能は良く考えて使用してください。 初期化に関数呼び出しを使用しないでください。 .Bd -literal struct foo one, *two; double three; int *four, five; char *six, seven, eight, nine, ten, eleven, twelve; four = myfunction(); .Ed .Pp 他の関数の内部で関数を宣言しないでください。 ANSI C によると、このような宣言は、宣言のネスティングによらず、 ファイルスコープになります。 ローカルスコープに見えるものの中にファイルの宣言を隠すことは好ましくなく、 良いコンパイラは苦情を言います。 .Pp キャストと sizeof 演算子の後にはスペースを続けません。 この規則は .Xr indent 1 が理解しないことに注意してください。 .Pp NULL は、好まれるヌルポインタ定数です。 コンパイラが型を知っている文脈、例えば代入では、 (type *)0 または (type *)NULL の代わりに、NULL を使用します。 他の文脈では、特に全ての関数の引数では、 (type *)NULL を使用します。 (関数のプロトタイプがスコープ外かもしれない場合に、 キャストはいろいろな引数にとって必須で、その他の引数にとっても必要です。) ポインタは NULL と比較します。例えば、 .Bd -literal !(p = f()) .Ed .Pp ではなく、このように使います。 .Bd -literal (p = f()) == NULL .Ed .Pp 真理値ではない場合、テストには '!' を使用しないでください。 例えば、下記のように使います。 .Bd -literal if (*p == '\e0') .Ed .Pp 下記のようには使いません。 .Bd -literal if (!*p) .Ed .Pp void * を返すルーチンでは、 戻り値をどのポインタ型にもキャストしてはなりません。 .Pp .Xr err 3 または .Xr warn 3 を使用し、勝手に作らないでください。 .Bd -literal if ((four = malloc(sizeof(struct foo))) == NULL) err(1, (char *)NULL); if ((six = (int *)overflow()) == NULL) - errx(1, "Number overflowed."); + errx(1, "number overflowed"); return (eight); } .Ed .Pp 古いスタイルの関数宣言はこのようになっています。 .Bd -literal static char * function(a1, a2, fl, a4) int a1, a2; /* int 型も宣言します、デフォルトにしないこと */ float fl; /* double と float の違いに気を付けてください */ int a4; /* 出てきた順に宣言します */ { .Ed .Pp あなたが明確に K&R との互換性を必要とする場合以外は、 ANSI の関数宣言を使用してください。 長いパラメータリストの折り返しには、 4 個の空白による通常のインデントを付けます。 .Pp 可変個数の引数はこのようにします。 .Bd -literal #include void vaf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); STUFF; va_end(ap); /* void 型の関数に return は不要です */ } static void usage() { /* 関数がローカル変数を持たない場合、空行をいれます */ .Ed .Pp fputs/puts/putchar 等ではなく、 .Xr printf 3 を使用してください。 これは速くて大抵はきれいで、言うまでもなくつまらないバグを避けます。 .Pp 使用法 (usage) の文はマニュアルページの書式の様であるべきです。 使用法の文は、次の構造であるべきです: .Pp .Bl -enum .It オペランドの無いオプションが、最初にアルファベット順に、 1 組の大括弧 .Po .Sq \&[ と .Sq \&] .Pc でくくられます。 .It オプションとそのオペランドがこれもアルファベット順に続き、 それぞれのオプションとその引数を 1 組の大括弧でくくります。 .It 必須の引数 .Pq もしあれば が続き、 コマンドラインで指定されるべき順で一覧されます。 .It 最後に、 すべての任意の引数が指定されるべき順で、 すべて大括弧の中に一覧されます。 .El .Pp 縦棒 .Pq Sq \&| は、二者択一のオプションまたは引数を分割し、 同時に使用するオプションと引数は、単一の大括弧でくくります。 .Pp .Bd -ragged -offset 4n "usage: f [-aDde] [-b b_arg] [-m m_arg] req1 req2 [opt1 [opt2]]\en" "usage: f [-a | -b] [-c [-dEe] [-n number]]\en" .Ed .Bd -literal (void)fprintf(stderr, "usage: f [-ab]\en"); exit(EX_USAGE); } .Ed .Pp 新しい中心的なカーネルのコードは、適度にスタイルガイドに従うべきです。 サードパーティが保守するモジュールやデバイスドライバのためのガイドラインは より緩やかですが、最低限内部的には彼らの一貫したスタイルであるべきです。 .Pp ソースリポジトリの文体の変更 (空白文字の変更を含む) は困難で、 正当な理由なしには避けるべきです。 リポジトリの中のおおよそ .Xr style 9 に適合しているコードは、この適合から離れてはなりません。 .Pp 可能な時にはいつでも、 コードはコードチェッカ (例えば、 .Xr lint 1 または "gcc -Wall") を 通過し、発生する警告は最小限となるべきです。 .Sh 関連項目 .Xr indent 1 , .Xr lint 1 , .Xr err 3 , .Xr sysexits 3 , .Xr warn 3 .Sh 歴史 このページは .Tn BSD 4.4-Lite2 release の src/admin/style/style ファイルに大きく基づいていて、 現在の実装と .Fx プロジェクトの要望を反映して、更新してあります。