接続を受け入れてからすべての入力を削除する(テストツールで使用するために)TCPリスナーを実装しようとしています。
私は現在使用していますが、socat - tcp-listen:2003,fork,reuseaddr
入力はstdoutに印刷されます。私はそれをしたくありません。
/dev/null
現在位置にあるため、出力を次にリダイレクトできません。アルパイン/ソキャットドックコンテナ実際にはシェルを使用していないため、リダイレクトは機能しません。
を使用しようとすると、socat /dev/null tcp-listen:2003,fork,reuseaddr
すべての接続がすぐに切断されます。おそらくsocat
読めないからです/dev/null
。
すべてを床に落とすTCPリスナーを実装する最良の方法は何ですか?
答え1
socat /dev/null,ignoreeof tcp-listen:2003,fork,reuseaddr
答え2
最適というのは難しい基準ですが、これにはMicrosoft ExcelほどDockerが必要であることがわかります。 ☺
私たちはすでにEOFまで入力を読み込み、それを効果的に削除するUnixプログラムを知っています。
猫> / dev / null
これをTCPサーバーに変換するのは非常に簡単な練習です。 これがUCSPI-TCPのすべてです。 標準I / Oを使用するプログラムをインポートし、それを中心に単純なフレームワークをラップしてTCPサーバーにします。転送について心配することなく他のものに置き換えて、cat
サービス契約を変更することができます。同様に、UCSPI-TCPツールをUCSPI-LOCALツールと交換してくださいcat
。
複数のUCSPI-TCPツールセットがあります。ダニエル・J・バーンスタイン(Daniel J. Bernstein)が書いた。 Laurent Bercotが1つ書きました。 Gerrit Papeが1つ書きました。アダム・サンプソンが書いた。私は一つを書いた。さらに、複数のツールセットのツールを組み合わせて一致させることができ、意図的に簡単に組み合わせることができます。私のツールfdredir
やLaurent Bercotのツールを使用することも、redirfd
非対話型ツールを作成することもできますsh
。 (最初の2つは本格的なツールよりもオーバーヘッドが低く、sh
noshツールfdredir
も組み込まれているため、チェーン接続によるオーバーヘッドをさらに回避できます。外部コマンド。)
これを行う方法はいくつかあります。
- Bernstein
tcpserver
(オリジナルまたはdjbwares、IPv6をサポートしていません)tcpserver -R -H -l 0 0.0.0.0 2003 fdredir --write 1 /dev/null cat
tcpserver -R -H -l 0 0.0.0.0 2003 redirfd -w 1 /dev/null cat
tcpserver -R -H -l 0 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Hoffman
tcpserver
(IPv4 および IPv6 サポート、元の Bernstein 基本 DNS および INFO ルックアップ機能があり、オフにする必要があります)tcpserver -R -H -l 0 ::0 2003 fdredir --write 1 /dev/null cat
tcpserver -R -H -l 0 ::0 2003 redirfd -w 1 /dev/null cat
tcpserver -R -H -l 0 ::0 2003 sh -c 'exec > /dev/null cat'
- 私の
tcpserver
shim(IPv4とIPv6の両方をサポートしていますが、それぞれに対して別々のインスタンスを実行する必要があり、より近代的なデフォルトがあります)tcpserver ::0 2003 fdredir --write 1 /dev/null cat
tcpserver ::0 2003 redirfd -w 1 /dev/null cat
tcpserver ::0 2003 sh -c 'exec > /dev/null cat'
- 私のUCSPI-TCPツール(LinuxとFreeBSDの両方でIPv4とIPv6の両方をサポート)
tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept fdredir --write 1 /dev/null cat
tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept redirfd -w 1 /dev/null cat
tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept sh -c 'exec > /dev/null cat'
- Bercot
s6-tcpserver6
(s6-tcpserver4
IPv4の代替)s6-tcpserver6 ::0 2003 fdredir --write 1 /dev/null cat
s6-tcpserver6 ::0 2003 redirfd -w 1 /dev/null cat
s6-tcpserver6 ::0 2003 sh -c 'exec > /dev/null cat'
- Bercot s6 - ネットワークツール(
s6-tcpserver4
IPv4の代替)s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d fdredir --write 1 /dev/null cat
s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d redirfd -w 1 /dev/null cat
s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d sh -c 'exec > /dev/null cat'
- Pappu
tcpsvd
(IPv6をサポートしていません)tcpsvd 0.0.0.0 2003 fdredir --write 1 /dev/null cat
tcpsvd 0.0.0.0 2003 redirfd -w 1 /dev/null cat
tcpsvd 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Sampson
onenetd
(IPv4とIPv6の両方をサポートしますが、それぞれに対して別々のインスタンスを実行する必要があります)onenetd -6 ::0 2003 fdredir --write 1 /dev/null cat
onenetd -6 ::0 2003 redirfd -w 1 /dev/null cat
onenetd -6 ::0 2003 sh -c 'exec > /dev/null cat'
選択肢を楽しむ
16進ダンプ -C 1>&2または(なし
sh
)fdmove -c 1 2 16進ダンプ -Cテスト中のクライアントプログラムが実行する操作のローカルログを取得するためにサーバープログラムで使用されます。 ☺
追加読書
- 規約:
- ジョナサンデボインポラード(2016)。UNIXクライアント - サーバープログラミングインターフェースのgen。よく与えられる答えです。
- バーンスタイン、ダニエル(1996)。UNIXクライアント - サーバープログラムインターフェース。 cr.yp.to.
- ツールセット:
- 参考書:
- ダニエルJ.バーンスタイン。
tcpserver
プログラム。 ucspi-tcp。 - アービン・ホフマン。
tcpserver
。 ucspi-tcp6。 fehcom.de. s6-tcpserver4
。ローランベルコ。 s6ネットワーク。 skarnet.org.s6-tcpserver6
。ローランベルコ。 s6ネットワーク。 skarnet.org.fdmove
。ローランベルコ。 実装する。 skarnet.org.redirfd
。ローランベルコ。 実装する。 skarnet.org.tcpsvd
。 ipsvd。 Gerrit Papp.smarden.org.- ジョナサンデボインポラード(2019)。
tcpserver
。 DJBウェア。ソフトウェア。 - ジョナサンデボインポラード(2019)。
fdredir
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2019)。
fdmove
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2019)。
tcp-socket-listen
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2019)。
tcp-socket-accept
。 スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2019)。
tcpserver
。 スナックガイド。ソフトウェア。
- ダニエルJ.バーンスタイン。