2010-08-14 2 views
0

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

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

Благодарности & С уважением,

мышиный.

ответ

2

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

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

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

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

+0

Если да, то каким образом мой браузер Chrome Chrome сможет получать HTTP-запросы одновременно. – mousey

+0

@mousey Это не веб-серверы, поэтому они не слушают порт 80. Другой конец. –

+0

Чтобы уточнить, что сказал выше, Chrome и Firefox прослушивают (разные) случайные порты с высоким номером, а не порт 80. – Borealid

1

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

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

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

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

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

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

+0

На самом деле, я не думаю, что «слушать» - это блокирующий вызов. Возможно, вы думаете о «принятии». – Borealid

+0

yes listen is not blocking call. Accept или recv блокируются – mousey

+0

Упс, исправлено. Я не знаю, о чем я думал, когда писал это. :) – casablanca

Смежные вопросы