AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 511849
Accepted
Roger Lipscombe
Roger Lipscombe
Asked: 2019-04-12 00:31:59 +0800 CST2019-04-12 00:31:59 +0800 CST 2019-04-12 00:31:59 +0800 CST

TCP侦听器丢弃所有输入?

  • 772

我正在尝试实现一个接受连接的 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 侦听器的最佳方式是什么?

socat
  • 2 2 个回答
  • 1285 Views

2 个回答

  • Voted
  1. Best Answer
    sourcejedi
    2019-04-12T02:31:27+08:002019-04-12T02:31:27+08:00
    socat /dev/null,ignoreeof tcp-listen:2003,fork,reuseaddr
    
    • 1
  2. JdeBP
    2019-04-12T03:36:12+08:002019-04-12T03:36:12+08:00

    最佳是一个棘手的标准,但可以看出 Docker 与 Microsoft Excel 一样必要。☺

    我们已经知道一个 Unix 程序在 EOF 之前读取它的输入并有效地丢弃它:

    猫 > /dev/null

    把它变成一个 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甚至是内置的,因此它进一步避免了通过外部命令链接的开销。)

    所以有几种方法可以做到这一点:

    1. Bernstein tcpserver(原创或 djbwares;不支持 IPv6)
      1. tcpserver -R -H -l 0 0.0.0.0 2003 fdredir --write 1 /dev/null cat
      2. tcpserver -R -H -l 0 0.0.0.0 2003 redirfd -w 1 /dev/null cat
      3. tcpserver -R -H -l 0 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
    2. Hoffman tcpserver(同时支持 IPv4 和 IPv6;对于需要关闭的 DNS 和 INFO 查找具有原始 Bernstein 默认值)
      1. tcpserver -R -H -l 0 ::0 2003 fdredir --write 1 /dev/null cat
      2. tcpserver -R -H -l 0 ::0 2003 redirfd -w 1 /dev/null cat
      3. tcpserver -R -H -l 0 ::0 2003 sh -c 'exec > /dev/null cat'
    3. 我的tcpserver垫片(同时支持 IPv4 和 IPv6,但必须为每个运行单独的实例;具有更现代的默认值)
      1. tcpserver ::0 2003 fdredir --write 1 /dev/null cat
      2. tcpserver ::0 2003 redirfd -w 1 /dev/null cat
      3. tcpserver ::0 2003 sh -c 'exec > /dev/null cat'
    4. 我的 UCSPI-TCP 工具(在 Linux 和 FreeBSD 上同时使用 IPv4 和 IPv6)
      1. tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept fdredir --write 1 /dev/null cat
      2. tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept redirfd -w 1 /dev/null cat
      3. tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept sh -c 'exec > /dev/null cat'
    5. Bercot s6-tcpserver6(替代s6-tcpserver4IPv4)
      1. s6-tcpserver6 ::0 2003 fdredir --write 1 /dev/null cat
      2. s6-tcpserver6 ::0 2003 redirfd -w 1 /dev/null cat
      3. s6-tcpserver6 ::0 2003 sh -c 'exec > /dev/null cat'
    6. Bercot s6 网络工具(替代s6-tcpserver4IPv4)
      1. s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d fdredir --write 1 /dev/null cat
      2. s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d redirfd -w 1 /dev/null cat
      3. s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d sh -c 'exec > /dev/null cat'
    7. Pape tcpsvd(不支持 IPv6)
      1. tcpsvd 0.0.0.0 2003 fdredir --write 1 /dev/null cat
      2. tcpsvd 0.0.0.0 2003 redirfd -w 1 /dev/null cat
      3. tcpsvd 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
    8. Sampson onenetd(同时支持 IPv4 和 IPv6,但必须为每个运行单独的实例)
      1. onenetd -6 ::0 2003 fdredir --write 1 /dev/null cat
      2. onenetd -6 ::0 2003 redirfd -w 1 /dev/null cat
      3. onenetd -6 ::0 2003 sh -c 'exec > /dev/null cat'

    享受替代品

    十六进制转储 -C 1>&2
    或(不带sh)

    fdmove -c 1 2 十六进制转储 -C
    用于服务器程序,以便您获得正在测试的客户端程序正在执行的本地日志。☺

    进一步阅读

    • 协议:
      • 乔纳森·德博因·波拉德 (2016)。UNIX 客户端-服务器程序接口上的 gen。经常给出答案。
      • 丹尼尔 J. 伯恩斯坦 (1996)。UNIX 客户端-服务器程序接口。cr.yp.to.
    • 工具集:
      • 丹尼尔·伯恩斯坦。ucspi-tcp . cr.yp.to.
      • s6-网络。劳伦特·伯科特。skarnet.org。
      • 执行线。劳伦特·伯科特。skarnet.org。
      • 乔纳森·德博因·波拉德 (2019)。诺什。 软件。
      • 乔纳森·德博因·波拉德 (2019)。djbwares。 软件。
      • ipsvd。格里特佩佩。smarden.org。
      • onenetd . 亚当桑普森。offog.org。
    • 参考手册:
      • 丹尼尔·伯恩斯坦。该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。格里特佩佩。smarden.org。
      • 乔纳森·德博因·波拉德 (2019)。tcpserver. djbwares。软件。
      • 乔纳森·德博因·波拉德 (2019)。fdredir. 小吃指南。软件。
      • 乔纳森·德博因·波拉德 (2019)。fdmove. 小吃指南。软件。
      • 乔纳森·德博因·波拉德 (2019)。tcp-socket-listen. 小吃指南。软件。
      • 乔纳森·德博因·波拉德 (2019)。tcp-socket-accept. 小吃指南。软件。
      • 乔纳森·德博因·波拉德 (2019)。tcpserver. 小吃指南。软件。
    • 1

相关问题

  • 除非通过 UDP 使用 socat 代理,否则将数据发送到 Unix 套接字失败

  • 如何将消息分隔符添加到 socat 正在管道的 UDP 流中?

  • 如何在没有文件路径的情况下嗅探 unix dgram 套接字?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve