Netcat 作为端口 1815 上的 inetd 服务,并将传入重定向到 /dev/ttyS2

Netcat 作为端口 1815 上的 inetd 服务,并将传入重定向到 /dev/ttyS2

我正在尝试让我的 Debian 7 系统监听端口 1815,netcat并将传入流量重定向到 VacuumFluorecentDisplay。Iptables 已打开,我使用的是 inetd 而不是 xinetd(发行版自带)。但我无法让它按我想要的方式工作

在 /etc/services 中添加以下行

vfd             1815/tcp                      
vfd             1815/udp    

在 /etc/inetd.conf 中添加以下行。

vfd stream tcp nowait  root     /bin/nc "-l 1815 > /dev/ttyS2"

答案1

这几乎在所有方面都是错误的。

  1. inetd 中的命令行参数需要指定为单独的单词 - 而不是用引号括起来的单个字符串。例如(仅用于演示语法更改;它仍然无法按原样工作):

    -- vfd stream tcp nowait root /bin/nc "-l 1815 > /dev/ttyS2"
    ++ vfd stream tcp nowait root /bin/nc -l 1815 > /dev/ttyS2
    
  2. 由于历史原因,inetd 需要服务的二进制文件第 0 个命令行参数需要单独指定,即使它们通常是相同的。例如(请注意,现在指定了两次“nc”):

    -- vfd stream tcp nowait root /bin/nc -l 1815 > /dev/ttyS2
    ++ vfd stream tcp nowait root /bin/nc nc -l 1815 > /dev/ttyS2
    
  3. inetd 不使用 shell 来启动服务,因此没有任何东西可以解释> /dev/ttyS2重定向;所有内容都只是作为命令行参数传递给 nc,而 nc 不知道如何处理它。

    这个需要进行重大更改 - 要么明确使用 shell 来运行命令......

    -- vfd stream tcp nowait root /bin/nc nc -l 1815 > /dev/ttyS2
    ++ vfd stream tcp nowait root /bin/sh sh -c "nc -l 1815 > /dev/ttyS2"
    

    ...或者使用完全不同的工具,该工具无需依赖 shell 重定向即可打开文件:

    -- vfd stream tcp nowait root /bin/nc nc -l 1815 > /dev/ttyS2
    ++ vfd stream tcp nowait root /bin/socat socat -u tcp-listen:1815 file:/dev/ttyS2
    
  4. 最后,不能让两个程序单独监听同一个端口。inetd 的重点在于inetd 并且仅 inetd将创建初始的“监听”套接字,而基于 inetd 的服务将只使用它们已经遗传来自“父”inetd。(在“等待”模式下,它们继承“监听”套接字,而在“不等待”模式下,它们继承各个客户端连接套接字。)

    换句话说,将其用作nc -linetd 服务是没有意义的,因为您要求它重复 inetd 已完成的所有工作。相反,该服务需要使用现有的 stdin/stdout(inetd 已将其附加到连接套接字)。

    例如,这最终应该可以正常工作:

    vfd stream tcp nowait root /bin/sh sh -c "cat > /dev/ttyS2"
    

    这也应该有效:

    vfd stream tcp nowait root /bin/socat socat -u stdio file:/dev/ttyS2
    

相关内容