D. J. Bernstein
TCP/IP
ucspi-tcp
tcpserver は入ってくる TCP 接続を受け付けます。
使い方
tcpserver opts host port prog
opts は getopt 形式のオプション郡です。
host は一つの引数です。
port は一つの引数です。
prog は一つ以上の引数から成ります。
tcpserver は TCP クライアントからの接続を待ちます。
それぞれの接続に対して prog を起動します。
このとき、記述子 0 でネットワークから読み取り、記述子 1 でネットワークへの書き出します。
いくつかの 環境変数 も設定します。
サーバのアドレスは host と port により与えられます。
port は /etc/services での名前あるいは番号です。
0 であれば、tcpserver は空いている TCP ポートを選びます。
host は任意のローカル IP アドレスへの接続を許可する 0 か、そのアドレスのみの接続を許可するドット付き10進表記 IP アドレスか、そのホストの 最初の IP アドレスへの接続を許可するホスト名です。
ホスト名は dns_ip4_qualify を用いた 限定/修飾(qualification) を通して与えられます。
tcpserver は SIGTERM を受け取ると終了します。
オプション
一般オプション:
- -q: 無言モード。エラーメッセージを出力しません。
- -Q: (デフォルト) エラーメッセージを出力します。
- -v: 多言モード。エラーメッセージとステータスメッセージを出力します。
接続オプション:
- -c n:
n を越えた接続をさせません。
n 個の prog が同時に起動していたら、どれか一つが終了するまで新しい接続を受け付けません。
n は正の正数でなければなりません。
デフォルト: 40。
- -x cdb:
tcprules を使って cdb にコンパイルされた規則に従います。
この規則は環境変数を設定や不正な起点からの接続の拒否を指定します。
tcpserver が起動していても、tcprules を再実行して規則を変えることができます。
- -X:
オプション -x cdb と一緒に用いて、cdb が存在しなくても接続を許可します。
普通、tcpserver は cdb が存在しなければ接続を落とします。
- -B banner:
接続開始時にネットワークへ banner を書き出します。
tcpserver は $TCPREMOTEHOST を調べる前に、$TCPREMOTEINFO を調べる前に、そして cdb を照合する前に banner を書き出します。
この特徴はクライアントがサーバからの挨拶を待つようなプロトコルでの待ち時間を削減するために使用できます。
- -g gid:
接続準備完了時にグループ ID を gid に切り替えます。
gid は正の整数でなければなりません。
- -u uid:
接続準備完了時にユーザ ID を uid に切り替えます。
uid は正の整数でなければなりません。
- -U:
-g $GID -u $UID と同じ。
例によって $GID と $UID は envuidgid を使って設定されます。
- -1:
接続準備完了時に標準出力にローカルポート番号を印字します。
- -b n:
おおよそ n 個の TCP SYN のバックログ(backlog)を許します。
システムによっては n は何も言わずに 5 に制限されます。
SYN cookies をサポートしているシステムでは、バックログは無意味です。
- -o:
IP オプションをそのままにしておきます。
クライアントが IP ソースルート指定のパケットを送っていたら、同じルートでパケットを送り返します。(訳者注:セキュリティ上危険なので設定しないでください)
- -O:
(デフォルト) IP オプションを殺します。
クライアントは接続やデータ送信にソースルーティングを使うことができます。
しかし、パケットはデフォルトルートに沿って送り返されるでしょう。
- -d:
リモートホストの返答が遅いときにはデータ送信を遅らせます。
これは今のところデフォルトですが、今後はそうでないかもしれません。
遅らせたいのであれば、はっきりと設定してください。
- -D:
データ送信を遅らせません。TCP_NODELAY を有効にします。
データ収集オプション:
- -h: (デフォルト)
環境変数 $TCPREMOTEHOST を設定するために DNS でリモートホスト名を調べます。
- -H:
DNS でリモートホスト名を調べません。
環境変数 $TCPREMOTEHOST を取り除きます。
ループを避けるために、TCP 53番ポートを用いるサーバではこのオプションを使わなければなりません。
- -p:
パラノイドモード。
DNS でリモートホスト名を検索後、そのホスト名の IP アドレスを DNS で検索します。そのアドレスのどれもクライアントの IP アドレスと一致しなければ、環境変数 $TCPREMOTEHOST を取り除きます。
- -P:
(デフォルト) パラノイドの解除。
- -l localname:
DNS でローカルホスト名を調べません。
環境変数 $TCPLOCALHOST には localname を使います。
localname の共用選択(common choice)は 0 です。
ループを避けるために、TCP 53番ポートを用いるサーバではこのオプションを使わなければなりません。
- -r: (デフォルト)
リモートホストから $TCPREMOTEINFO の取得を試みます。
- -R:
リモートホストから $TCPREMOTEINFO の取得を試みません。
ループを避けるために、TCP 53番ポートと113番ポートを用いるサーバではこのオプションを使わなければなりません。
- -t n:
n 秒後に $TCPREMOTEINFO 接続の試みを諦めます。
デフォルト: 26。
訳:滝澤 隆史
Last modified: Sun Nov 19 22:19:34 2000