На самом деле кермит - мое предпочтительное решение этой проблемы, я попробовал его, и оно работает, однако все это упражнение предназначено для работы (мы берем кучу стандартных недорогих штуковин и превращаем их в совместную работу таким образом, чтобы они не были предназначены для), и требование состоит в том, чтобы коробка контролировалась SOAP. Как я уже говорил выше, я могу кросс-компилировать небольшой SOAP-сервер и управлять им; проблема заключается в чтении вывода оболочки. Может быть, я мог бы просто читать напрямую из / dev / ttyAS0? (больше ничего не должно выводить туда) Но как мне читать с необработанного терминала?

я следующая ситуация: у меня много мелких штуковин (довольно близко к маршрутизаторам, не совсем, но в любом случае это не имеет значения); они работают на основе дистрибутива Linux на основе MIPS.

Чтобы управлять ими, можно подключиться через telnet (через последовательный порт) и выдать команды интерактивной оболочке, похожей на bash, которая затем записывает некоторые выходные данные. Вход и выход оболочки подключены к / dev / ttyAS0.

Теперь я хотел бы автоматизировать все это, то есть написать программу, которая будет работать внутри gizmo, быть небольшим сервером, прослушивающим какой-либо порт, который будет передавать любую команду указанной оболочке, захватывать выходные данные оболочки и ретранслировать ее. вернуться к тому, кто связался с сервером.

Я:

1) может устанавливать (маленькие, <500KB) программы внутри gizmo 2) не может изменять ОС, сценарии запуска, оболочку и прочее 3) иметь root-права 4) знать, как писать сервер SOAP 5) знать, как получить SOAP-сообщение, переведите его в команду и вставьте в / dev / ttyAS0. 6) НЕ ЗНАЙТЕ, как перехватить ответ оболочки. ,

В общем, проблема в том, что 6): как, вставив строку в / dev / ttyAS0 и, таким образом, заставив оболочку выполнить ее, захватить вывод оболочки?

Я в курсе

http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/

то есть я знаю, что я мог бы изменить стандартный вывод оболочки, если бы у меня был запущен GDB (или strace) внутри коробки, но я не могу установить его там - он слишком большой, и в любом случае этот подход кажется слишком взломанным.

Итак, подведем итоги:

Как root может захватить стандартный вывод уже запущенного процесса, IN PURE C, без gdb или strace, без доступа к способу запуска процесса?

Или - почти эквивалентно - как захватить то, что записывается в терминал, IN PURE C?

 maxelost20 янв. 2011 г., 12:28
С большими трудностями. :-п

Ответы на вопрос(2)

Решение Вопроса

reptyr, Вероятно, потребуется некоторая адаптация для работы вашей системы, хотя

 Leszek24 янв. 2011 г., 16:10
Спасибо чувак! На самом деле reptyr только для i386, но использование ptrace меня очень просветило! Проблема решена, теперь у меня есть окончательная программа :)

Кермит скрипт? Я бы, вероятно, воздержался от попыток вставить более хитрый прокси на устройство и просто попробовать управлять существующим интерфейсом.

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

 Leszek20 янв. 2011 г., 17:42
На самом деле кермит - мое предпочтительное решение этой проблемы, я попробовал его, и оно работает, однако все это упражнение предназначено для работы (мы берем кучу стандартных недорогих штуковин и превращаем их в совместную работу таким образом, чтобы они не были предназначены для), и требование состоит в том, чтобы коробка контролировалась SOAP. Как я уже говорил выше, я могу кросс-компилировать небольшой SOAP-сервер и управлять им; проблема заключается в чтении вывода оболочки. Может быть, я мог бы просто читать напрямую из / dev / ttyAS0? (больше ничего не должно выводить туда) Но как мне читать с необработанного терминала?

Ваш ответ на вопрос