Запишите в сокете, открытом другим процессом в Linux

Сценарии не могут изменить среду своего родительского processe. Из-за этого потеряны любые изменения среды, сделанные в сценарии.

Для запущения скрипта в том же процессе можно 'получить' сценарий как это

. /path/to/script.sh args
8
12.03.2012, 01:25
2 ответа

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

  • Сокеты двунаправлены.
  • Существуют различные типы сокетов. Некоторые сокеты не являются потоками байтов (например, сокеты UDP являются датаграммными сокетами, которые отправляют пакеты и не байты).
  • Сокеты выполняют мультиплексирование (и существует некоторая перегрузка между сокетами, используемыми серверами, ожидающими соединений, и снабжает сокетом используемый фактическими открытыми соединениями).

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

При попытке связаться с тем же сервером как существующий клиент и не лавировать на существующий разговор, уже существует способ сделать это: свяжитесь сервер таким же образом (откройте сокет в файловой системе, или к порту TCP или UDP). Если сокет является неназванным между двумя процессами, это - хорошая подсказка, что Вы, как предполагается, не присоединяетесь, таким образом, операционная система не помогает.

С датаграммным сокетом (не случай здесь), Вы не могли непосредственно ввести данные, потому что оболочка только понимает потоки байтов, это не знает для вызова send вместо write отправить пакет.

Если у Вас есть сотрудничество одной конечной точки, можно сказать, делают дескриптор файла использования передающим 1 2 3.

Иначе можно сделать процесс, который имеет открытый сокет, отправляют сами данные, с ptrace (это что gdb использование под капотом). Это приостанавливает процесс, очень дизайном, так, чтобы Ваши злые шутки не путали процесс слишком много. Даже с приостановленным процессом, Вы рискуете создания структур данных процесса, несовместимых с действительностью данных или модификаций среды, которые Вы ввели. (Обратите внимание, что, даже если бы система позволила вводить данные по сокету, было бы подобное, если меньший, риск путания процесса с этими несоответствиями.)

5
27.01.2020, 20:12

Я сказал бы, что это возможно, но оба процесса должны сотрудничать, чтобы сделать это. У Вас может быть один процесс, отправляют дескриптор файла по сокетному соединению с другим процессом. Я нашел этот пример, который, кажется, работает над актуальным Arch машина Linux.

1
27.01.2020, 20:12

Теги

Похожие вопросы