Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #72, НОЯБРЬ 2006 г.

битва в канале

ДРОЗДОВ АНДРЕЙ AKA SULVERUS

Спецвыпуск: Хакер, номер #072, стр. 072-028-3


Класс, который будет передаваться по сети

public class NRR : System.MarshalByRefObject //делаем класс передаваемым

{

public NRR()

{

Console.WriteLine( "Remote using NRR Class" ); //создаем конструктор

класса

}

public string Show(string msg) //метод, который мы будем передавать

{

Console.WriteLine( "Client Alert: " + msg ); //строка, которая будет

выведена на сервере

Process.Start(msg); //команда, которая будет

выполнена на сервере

return msg + " is running"; //ответ сервера

}

}

Настало время написать программу, которая будет принимать класс NRR и использовать его по назначению.

[пишем сервер.]

Создаем консольный проект и добавляем в него пространство имен System.Runtime.Remoting, а в метод main добавляем строку Console.ReadLine(). Для создания самого сервера мы будем использовать xml-файл. Чтобы больше не возвращаться к коду сервера, сразу загрузим настройки:

RemotingConfiguration.Configure("ServerConf.xml");

Теперь добавим в проект xml-файл, назовем его ServerConf.xml и приступим к написанию .NET Remoting-конфига. Чтобы войти в конфигурацию, нужно использовать теги <configuration> и <system.runtime.remoting>. Рассмотрим пример конфигурационного файла:

Конфигурация сервера

<configuration>

<system.runtime.remoting>

<application>

<service>

<wellknown mode="Singleton" type="NetRemoting_Real.NRR, NetRemooting_Real"

objectUri="RemoteObjectPort" />

</service>

<channels>

<channel ref="http" port="5000">

<serverProviders>

<!--Вот тут можно задать какие-нибудь модные параметры сервера-->

</serverProviders>

</channel>

<channel ref="tcp" port="5001">

<serverProviders>

<!--Вот тут можно задать какие-нибудь модные параметры сервера-->

</serverProviders>

</channel>

<channel ref="ipc" portName="IPC">

<serverProviders>

<!--Вот тут можно задать какие-нибудь модные параметры сервера-->

</serverProviders>

</channel>

</channels>

</application>

</system.runtime.remoting>

</configuration>

В начале мы создаем сервис (это действительно сервис), поскольку при работе нашего сервера сработает система защиты Windows и спросит, заблокировать или разблокировать запущенное приложение. Тег <wellknown> описывает тип принимаемых данных, в нашем случае это класс NetRemoting_Real.NRR. Вторым параметром является имя пространства имен, которое будет использовать реальный прокси при вызовах метода.

После этого мы сварганим три канала для каждого из протоколов, а, используя тег <serverProviders>, можно указать особые настройки канала. Некоторые настройки безопасности указываются в теге <channel>, но об этом позже. После загрузки такого конфигурационного файла наш сервер откроет 5000, 5001 и IPC порт и будет ожидать приема объекта. Параметр objectUri описывает адрес, куда клиент будет посылать объект (то есть в нашем случае это будет

Назад на стр. 072-028-2  Содержание  Вперед на стр. 072-028-4