Netcat como servicio inetd en el puerto 1815 y redireccionamiento entrante a /dev/ttyS2

Netcat como servicio inetd en el puerto 1815 y redireccionamiento entrante a /dev/ttyS2

Estoy intentando permitir que mi sistema Debian 7 escuche en el puerto 1815 netcaty redirija el tráfico entrante a VacuumFluorecentDisplay. Las iptables están abiertas y estoy usando inetd en lugar de xinetd (viene con la distribución). Pero no puedo hacer que funcione como quiero.

agregó la siguiente línea a /etc/services

vfd             1815/tcp                      
vfd             1815/udp    

Agregué la siguiente línea a /etc/inetd.conf.

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

Respuesta1

Esto está mal en casi todos los sentidos posibles.

  1. Los parámetros de la línea de comandos en inetd deben especificarse como palabras individuales, no entre comillas como una sola cadena. Por ejemplo (solo para demostrar el cambio de sintaxis; aún así no funcionará tal como está):

    -- vfd stream tcp nowait root /bin/nc "-l 1815 > /dev/ttyS2"
    ++ vfd stream tcp nowait root /bin/nc -l 1815 > /dev/ttyS2
    
  2. Por razones históricas, inetd requiere el binario del servicio.yel argumento 0 de la línea de comandos se especificará por separado, aunque normalmente sean los mismos. Por ejemplo (tenga en cuenta que 'nc' ahora se especifica dos veces):

    -- 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 no utiliza un shell para iniciar los servicios, por lo que no hay nada que interprete la > /dev/ttyS2redirección; todo se pasa simplemente a nc como argumento de línea de comandos y nc no sabe qué hacer con ello.

    Éste requiere cambios significativos, ya sea usando explícitamente un shell para ejecutar su comando...

    -- 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"
    

    ...o usando una herramienta completamente diferente, una que sea capaz de abrir el archivo sin depender de la redirección del 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. Finalmente, no se puede decir a dos programas que escuchen individualmente en el mismo puerto. El objetivo de inetd es queinetd y solo inetdcreará el socket de "escucha" inicial y los servicios basados ​​en inetd solo usarán los sockets que hayanheredadodel inetd "padre". (En el modo 'espera' heredan el socket de "escucha" y en el modo "nowait" heredan los sockets de conexión de cliente individuales).

    En otras palabras, no tiene sentido usarlo nc -lcomo servicio de inetd, porque le estás pidiendo que duplique todo lo que inetd ya ha hecho. En su lugar, el servicio necesita utilizar la entrada/salida estándar existente (que inetd ha conectado al socket de conexión).

    Por ejemplo, esto finalmente debería funcionar correctamente:

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

    Esto también debería funcionar:

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

información relacionada