我正在尝试实现一个接受连接的 TCP 侦听器,然后简单地丢弃其所有输入(它用于测试工具)。
现在,我正在使用socat - tcp-listen:2003,fork,reuseaddr
,但这会将输入打印到标准输出。我不想要那个。
我无法将输出重定向到/dev/null
,因为我在alpine/socat docker 容器中执行此操作,并且它实际上并未使用 shell,因此重定向不起作用。
如果我尝试使用socat /dev/null tcp-listen:2003,fork,reuseaddr
,那么任何连接都会立即断开,大概是因为socat
无法从/dev/null
.
实现 TCP 侦听器的最佳方式是什么?
最佳是一个棘手的标准,但可以看出 Docker 与 Microsoft Excel 一样必要。☺
我们已经知道一个 Unix 程序在 EOF 之前读取它的输入并有效地丢弃它:
把它变成一个 TCP 服务器是一个非常简单的练习。 这就是 UCSPI-TCP 的全部意义所在。 它采用使用标准 I/O 的程序并围绕它们包装一个简单的框架,使它们成为 TCP 服务器。可以用其他东西代替
cat
并更改服务协议,而不必担心传输。可以类似地用 UCSPI-LOCAL 工具替换 UCSPI-TCP 工具,并更改传输,而无需对cat
.有几个 UCSPI-TCP 工具集。Daniel J. Bernstein 写了一篇。Laurent Bercot 写了一篇。Gerrit Pape 写了一篇。亚当桑普森写了一篇。我写了一个。此外,人们可以混合和匹配来自多个工具集的工具,这些东西是有意容易组合的。可以使用我的
fdredir
或 Laurent Bercot 的redirfd
,甚至生成一个非交互式的sh
. (前两者的开销比完整的 低sh
,对于 nosh 工具fdredir
甚至是内置的,因此它进一步避免了通过外部命令链接的开销。)所以有几种方法可以做到这一点:
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'
tcpserver
(同时支持 IPv4 和 IPv6;对于需要关闭的 DNS 和 INFO 查找具有原始 Bernstein 默认值)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
垫片(同时支持 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'
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'
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'
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'
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'
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'
享受替代品
或(不带sh
) 用于服务器程序,以便您获得正在测试的客户端程序正在执行的本地日志。☺进一步阅读
tcpserver
程序。ucspi-tcp。tcpserver
. ucspi-tcp6 . fehcom.des6-tcpserver4
. 劳伦特·伯科特。 s6-网络。skarnet.org。s6-tcpserver6
. 劳伦特·伯科特。 s6-网络。skarnet.org。fdmove
. 劳伦特·伯科特。 执行线。skarnet.org。redirfd
. 劳伦特·伯科特。 执行线。skarnet.org。tcpsvd
. ipsvd。格里特佩佩。smarden.org。tcpserver
. djbwares。软件。fdredir
. 小吃指南。软件。fdmove
. 小吃指南。软件。tcp-socket-listen
. 小吃指南。软件。tcp-socket-accept
. 小吃指南。软件。tcpserver
. 小吃指南。软件。