Как внедрить протоколирование связи по каналам - PullRequest
0 голосов
/ 27 января 2020

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

Есть ли какие-нибудь тривиальные способы сделать это? Я пытался использовать strace, но он просто дает много шума, и я скорее хочу захватить всю последовательность, поэтому я хочу запустить ее, когда произойдет exec.

Я был Подумайте о создании небольшой программы, которая будет находиться между вызывающим и вызываемым объектами, и после того, как она exec отредактировала реальный вызываемый объект, читает из stdin, регистрирует, помещает это в stdin вызываемых и затем ждет, когда что-то вернется на Вызовите stdout, запишите это, а затем запишите это обратно вызывающей стороне.

Звучит просто, но я был немного напуган установкой соединений канала и трудностью отладки такой программы. Поэтому я подумал, что я прошу здесь найти более простое решение, прежде чем приложить к этому усилия.

Я немного погуглил, но мне сложно сформулировать хороший запрос. В основном заканчиваются такими вещами, как this , который все еще является кодом и захватывает только одностороннюю связь.

1 Ответ

0 голосов
/ 29 января 2020

Хорошо, поэтому я укусила пулю и написала программу ...

Нам нужны три дочерних процесса, два для мониторинга, распространения и регистрации stdin и stdout соответственно и один для exe c реальная цель.

Хитрость в том, как соединить трубы. Я изучил некоторые основы из видео Rame sh Yerraballi , которое позволило мне собрать кусочки.

Вот репозиторий для для моей реализации инъекции трубы -шпион между двумя процессами, связывающимися по каналам.

...