tnetsrv は、外部からのネットワーク接続を待ちうけ、接続があった場合、指定したプログラム(または共有ライブラリ関数)を実行します。
tnetsrv [options] port child-program [program-arg(s)]
tnetsrv は、port で指定されたポート番号で待ちうけ、新規接続が行われた時に、child-program を実行します。child-program は、標準入力(ファイルディスクリプタ0)から読み込む事で、ネットワークから受信する事が出来、標準出力(ファイルディスクリプタ1)に書き込む事で、ネットワークに送信を行う事が出来ます。
port には、/etc/services に記載されているサービス名または数値を設定します。
tnetsrv は、デーモン化(バックグラウンドへ以降)を行いません。tnetsrv をバックグラウンドへ移行させたければ、コマンドの最後に '&' をつけて起動してください。
オプションを何も設定しない場合の、tnetsrv の動作は以下の通りです。
tnetsrv は、新規接続があり、child-program を実行する際、以下の環境変数を設定してから、child-program を実行します。
環境変数名 | 内容 | 格納例 |
NETSRV_PROTO | 待ち受けプロトコル | tcp |
NETSRV_LOCALIP | 待ち受けIPアドレス | 192.168.10.2 |
NETSRV_LOCALPORT | 待ち受けポート | 10080 |
NETSRV_REMOTEIP | 接続IPアドレス | 192.168.10.210 |
NETSRV_REPOTEPORT | 接続先ポート | 12345 |
NETSRV_REMOTEHOST | 接続先ホスト名(-lオプション有効時のみ) | hostname |
NETSRV_REMOTEHOST は、-l オプションが設定されたときのみ有効で、-l オプションが指定されていない場合、NETSRV_REMOTEHOST は設定しません。
'NETSRV_' は、-E [ENV_Prefix] で変更できます。例えば、-E TCP とした場合、NETSRV_LOCALIP は、TCPLOCALIP となります。
tnetsrv は、SIGINT,SIGTERM を受け取ると終了します。
child-program で実行できるプログラムは、受信・送信に、標準入出力を使用していれば、利用できます(inetdから起動できるものは、そのまま利用できるはずです)。なお、child-program 実行時、標準エラー出力は、tnetsrv の標準出力と同じ所に向けられますので、child-program 側で、何らかのログ出力を行いたい場合は、標準エラー出力に出力するか、syslog を使用してください。
tnetsrv は、新規接続が IP_OPTIONS 指定を含んで接続してきた場合、IP_OPTIONS の内容をログに出力します。また、IP_OPTIONS の指定に関わらず、必ず IP_OPTIONS を無効にしてから、child-program を実行します。この動作により、(tnetsrv がバグってなければ)ソースルーティング指定におけるIPアドレス詐称に対して効果があります(詳しい情報は、http://www.trusnet.com/secinfo/docs/ipspoof/ に書かれています)。
tnetfwd は、標準入出力のデータをネットワークに転送します。
tnetfwd [-v] hostname port [udp]
tnetfwd は、hostname , port で示す接続先ホスト、ポートに接続します。その後、標準入力のデータを、接続先にそのまま送信し、接続先からの受信データは、そのまま標準出力に出力します。
tnetsrv の child-program に tnetfwd を指定する事で、簡易パケットレピータとして動作します。
([udp] は現在未対応で、TCP のみの接続となります)