Сокат - возможно ли это?

Сокат - возможно ли это?

Есть ли способ прослушивать и выполнять команду (для каждого соединения) во время переадресации портов с помощью socat? Нерабочий пример, чтобы было понятнее:

socat TCP-LISTEN:8080,reuseaddr, "exec:ls" fork tcp:localhost:80

решение1

Так?

socat tcp-listen:8080,reuseaddr,fork system:'ls; exec socat - tcp\:localhost\:80'
  • 1-й параметр позволяет ,forkоставаться socatв режиме ожидания для большего количества подключений

  • system:предпочтительнее exec:иметь интерпретатор оболочки и легко запускать дополнительную команду после lsкоманды,

  • что является новой socatкомандой

    который будет иметь stdin/stdout, подключенный к выходу/входу удаленного клиента, и будет пересылать его снова двунаправленно к следующему месту назначения. Обратите внимание, что его :разделитель (и несколько других специальных символов) должны быть экранированы с помощью a, \чтобы не путатьпервый socatкоманда. Если эта строка становится более сложной, то проще просто выполнить такой скрипт:

    socat tcp-listen:8080,reuseaddr,fork exec:/path/to/myscript.sh
    

    с /path/to/myscript.sh:

    #!/bin/sh
    ls
    exec socat - tcp:localhost:80
    

    execв оболочке команда необязательна, но позволяет избежать бесполезного оставления ее вне оболочки.

socatтакже экспортирует несколько собственных переменных, которые можно повторно использовать в скрипте, что можно проверить, например, так (при установленном соединении):

$ env - socat TCP-LISTEN:8080,reuseaddr,fork exec:printenv
SOCAT_PID=1057351
SOCAT_PPID=1057284
SOCAT_VERSION=1.7.4.1
SOCAT_SOCKADDR=127.0.0.1
SOCAT_SOCKPORT=8080
SOCAT_PEERADDR=127.0.0.1
SOCAT_PEERPORT=42970

Связанный контент