как процесс может выполнить сетевой код - PullRequest
0 голосов
/ 14 августа 2010

Я новичок в сети, и у меня есть несколько вопросов, касающихся сетей.1) Как процесс может выполнить код, отправленный с другого компьютера в сети.Как правило, сегмент кода процесса не может быть изменен после загрузки для обеспечения защиты.(Также я могу выполнить некоторый произвольный код для повреждения памяти процесса) 2) Также может ли процесс прослушивать несколько портов?А несколько процессов могут прослушивать один и тот же порт?Например, два https, связанные с портом 80. Как отличить процессы и как обеспечить защиту?3) Также хотелось бы узнать, как прослушивание реализовано в сокетах.Они реализованы как программные прерывания?

Любые хорошие книжные рекомендации очень ценятся.

Спасибо и С уважением,

Мышонок.

Ответы [ 2 ]

2 голосов
/ 14 августа 2010

В: Как процесс может выполнить код, отправленный с другого компьютера?
A: Как правило, это плохая идея, поскольку проблемы безопасности трудно полностью изучить. Однако это можно сделать, сохранив доставленный по сети код в отдельный исполняемый файл, а затем запустив эту новую программу. Это также можно сделать на большинстве систем, просто обработав необработанные байты, полученные как код; загрузите байты в кучу (не в стек!), приведите адрес к указателю функции и вызовите его. Опять же, это почти наверняка плохая идея .

В: Может ли процесс прослушивать несколько портов одновременно?
A: Да. Кстати, HTTPS - это порт 443. HTTP - это порт 80.

В: Могут ли несколько процессов прослушивать один и тот же порт (с одним и тем же протоколом, по одному и тому же адресу)?
A: Нет. Другие процессы могут быть в состоянии подслушивать и также получать пакеты, но они не связаны напрямую с портом. Как правило, только один процесс может быть связан с данным протоколом / портом / адресом с тремя кортежами.

В: Как реализована блокировка при прослушивании на сокете?
A: По операционной системе, по-своему. Обычно поток переводится в состояние «блокирования», когда он вызывает accept, read или poll / select в неподготовленном сокете, и не будет получать процессорное время, пока не поступят некоторые данные. 1019 *

1 голос
/ 14 августа 2010

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

Это не имеет ничего общего с сетью.Как только вы получаете данные через сокет, они находятся в вашей локальной памяти.То, что вы делаете после этого, зависит от ОС.Например, в Windows вы можете использовать VirtualProtect, чтобы пометить страницы как исполняемые.

2) Также может ли процесс прослушивать несколько портов?

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

3) Также мне хотелось бы узнать, как в слушателях реализовано прослушивание.Они реализованы как программные прерывания?

Это полностью зависит от ОС.listen просто настраивает сокет, чтобы он мог принимать соединения.Любые запросы на подключение, которые поступают после этого (это, вероятно, происходит где-то в драйвере TCP / IP), помещаются в очередь ОС.При последующем вызове accept ОС извлекает первое ожидающее соединение из этой очереди и возвращает ему сокет.

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