UCSPI-TCPの方法
netcat以外のツールセットがあります。それらのいくつかを使用する方法を次に示します。これらはすべて、serviceを実行するスクリプトの存在を想定していますfunc。
#!/ bin / sh
読み取り中-r MESSAGE
行う
echo 1>&2 "$ {TCPREMOTEIP}" "$ {TCPREMOTEPORT}" rx "$ {MESSAGE}"
func
終わった
TCPREMOTEIPそしてTCPREMOTEPORT、環境変数はUCSPI-TCPプロトコルによって定義されています。
スクリプトは、さまざまなツールセットを使用して、TCP接続ごとに個別のプロセスとして生成されます。以下では、短いスクリプト内で使用されているツールを示しています。このようなスクリプトは、従来はと名付けられてrunいましたが、daemontools-familyサービスマネージャの下で実行する方法です。もちろん、直接呼び出すこともできます。
バーンスタインucspi-tcp
Daniel J. Bernsteinのucspi-tcpを使用して、スクリプトをtcpserver生成しserviceます。
#!/ bin / sh -e
exec tcpserver -v -P -R -H -l 0 0.0.0.0 7777 ./service
Bernstein ucspi-tcpのIPv6対応の拡張バージョンがあります。Erwin Hoffmanのtcpserver場合、IPv4とIPv6の両方を1つで処理しようとし(オペレーティングシステムがこれをサポートしている場合、サポートしていないものもあります)、serviceスクリプトを生成します。
#!/ bin / sh -e
exec tcpserver -v -P -R -H -l 0 :: 0 7777 ./service
Bercot s6-networking、s6、およびexecline
ローランBercotのS6-ネットワーキングで、s6-tcpserver4かつs6-tcpserver6個別にIPv4とIPv6を処理し、産卵serviceスクリプトを:
#!/ command / execlineb
s6-tcpserver4 -v 0.0.0.0 7777
。/サービス
#!/ command / execlineb
s6-tcpserver6 -v :: 0 7777
。/サービス
一つは、このようなツールを介在させることにより、より複雑なサーバを構築することができますs6-tcpserver-accessし、s6-applyuidgidチェーン内の直前に./service。
nosh UCSPIツール
noshツールセットtcp-socket-listenを使用して、TCPソケットをリッスンします。オペレーティングシステムがサポートしている場合は、IPv4とIPv6を同時に処理し、tcp-socket-acceptそこからserviceスクリプトを生成します。
#!/ bin / nosh
tcp-socket-listen --combine4and6 :: 7777
tcp-socket-accept --verbose --localname 0
。/サービス
または、OpenBSDなどのオペレーティングシステムで、2つの別個のプロセスを実行します。
#!/ bin / nosh
tcp-socket-listen 0.0.0.0 7777
tcp-socket-accept --verbose --localname 0
。/サービス
#!/ bin / nosh
tcp-socket-listen :: 7777
tcp-socket-accept --verbose --localname ::
。/サービス
一つは、このようなツールを介在させることにより、より複雑なサーバを構築することができますucspi-socket-rules-checkし、setuidgidチェーンに。
#!/ bin / nosh
tcp-socket-listen --combine4and6 :: 7777
setuidgid非特権ユーザー
tcp-socket-accept --verbose --localname 0
ucspi-socket-rules-check --verbose
。/サービス
Pape ipsvd
Gerrit Papeのipsvdを使用して、スクリプトをtcpsvd生成しserviceます。
#!/ bin / sh -e
exec tcpsvd -v 0.0.0.0 7777 ./service
UCSPI-UDP
共通serviceスクリプトは、標準入力がストリームソケットの場合に処理できます。しかし、TCPを明示的に指定していません。
前述のツールキットのいくつかを使用して、TCPサーバーを構築する方法と同様の方法でUDPサーバーを構築できます(udp-socket-listennoshを参照)。標準入力がデータグラムソケットである場合は、必ずうまく対処できます。
参考文献
- プロトコル:
- ツールセット:
- ダニエルJ.バーンスタイン。ucspi-tcp。cr.yp.to。
- s6-networking。ローラン・ベルコット。skarnet.org。
- s6。ローラン・ベルコット。skarnet.org。
- ジョナサン・デ・ボイン・ポラール(2016)。間食。 ソフトウェア。
- ipsvd。ジェリット・パプ。smarden.org。
- リファレンスマニュアル: