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。 (在「等待」模式下,它們繼承「偵聽」套接字,在「無等待」模式下,它們繼承各個客戶端連接套接字。)

    換句話說,用作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
    

相關內容