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-listen
noshを参照)。標準入力がデータグラムソケットである場合は、必ずうまく対処できます。
参考文献
- プロトコル:
- ツールセット:
- ダニエルJ.バーンスタイン。ucspi-tcp。cr.yp.to。
- s6-networking。ローラン・ベルコット。skarnet.org。
- s6。ローラン・ベルコット。skarnet.org。
- ジョナサン・デ・ボイン・ポラール(2016)。間食。 ソフトウェア。
- ipsvd。ジェリット・パプ。smarden.org。
- リファレンスマニュアル: