Рейтинг:1

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

флаг us

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

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

Рейтинг:0
флаг cl
A.B

Как это?

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

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

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

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

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

    с /путь/к/myscript.sh:

    #!/бин/ш
    лс
    исполняемый сокат - tcp:localhost:80
    

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

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

$ env - socat TCP-LISTEN:8080,reuseaddr,fork exec:printenv
SOCAT_PID=1057351
SOCAT_PPID=1057284
SOCAT_VERSION=1.7.4.1
СОКАТ_СОКАДДР=127.0.0.1
SOCAT_SOCKPORT=8080
SOCAT_PEERADDR=127.0.0.1
SOCAT_PEERPORT=42970
hyogy avatar
флаг us
Это потрясающе! Спасибо!(: Еще один совет: используя эту строку, как бы вы декодировали строки в base64? Я имею в виду: данные, проходящие через порт 8080, закодированы в base64, но я хочу декодировать их до того, как данные достигнут порта 80 (данные возврат из порта 80 не должен быть закодирован)
A.B avatar
флаг cl
A.B
Как только вы где-нибудь используете канал (например: `base64 -d | socat...`), связь не будет полностью двунаправленной. Тогда это , вероятно , потребует разветвления некоторых команд в сценарии , чтобы заставить работать два половинчатых направления . Вы должны раскрыть (возможно, в другом вопросе) свою полную проблему. Проверьте https://xyproblem.info/. Вы думаете, что можете решить ее с помощью Y = socat, но мы ничего не знаем об X. Даже если socat может решить ее, я не могу сказать, потому что не знаю вашей проблемы.
hyogy avatar
флаг us
Спасибо за вашу помощь!! Я придумаю новый вопрос и сообщу, если хотите!(;
A.B avatar
флаг cl
A.B
на самом деле для этого конкретного случая это просто, за исключением того, что у вас возникает проблема со временем: нет способа узнать, когда заканчивается ввод, поэтому общение должно закончиться первым, и тогда, вероятно, не будет ответа, отправленного вовремя. вот строка для myscript.sh: `exec base64 -d | сокат - tcp:localhost:80`. `-` означает STDIO, и хотя входные данные поступают из `base64 -d`, выходные данные отправляются обратно без изменений, как написано в комментарии.
hyogy avatar
флаг us
Я разместил относительный вопрос, если вам интересно (: https://serverfault.com/questions/1070792/bidirectional-communication-unidirectional-decode
A.B avatar
флаг cl
A.B
Вы только что переписали задачу XY, а я уже дал ответ в комментариях. В моем комментарии говорилось, что в конце концов он работает в двух направлениях. Извините, если это не то, что я написал в предыдущем комментарии.
hyogy avatar
флаг us
У меня есть идеальное решение, проверьте вопрос, если хотите!(:

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.