Муню

X
//
Главная » All » Сервер – Клиент Изнутри. На примере и разработка программы!

Сервер – Клиент Изнутри. На примере и разработка программы!

Время чтение: 9 минут 2014-05-07

Если Вам интересно посмотреть, как пишутся «Программы сервер – клиент» и как они работают на реальном примере, предлагаю прочитать пост до конца. Будет интересно!

Пример программы я решил писать на Delphi! Так как, это проще и хорошо подходит для маленького, но реального примера. Что касается грозного слова «Троян» которое я упомянул выше,  то тут, получается действительно, самый настоящий троян, но с малым и безобидным функционалом.

Вы узнаете, по какому принципу пишутся «Трояны» и как они работают изнутри! Но, есть одно «НО» Трояны не пишут, так как – это будет описано ниже. Поскольку в нашем примере, «Серверная» часть программы будет много весить (Это не приемлемо для реального трояна), и мы не будет её скрывать в системе. В реальном, «Вредоносном ПО» дела обстоят немного по другому.

Серверную часть программы стараются разработать с малым размером, ну примерно «100 КБ» Плюс — минус сколько-то КБ. И скрывают её в системе, так, что искать её придется долго!…

Но все ровно, принцип разработки один! И данный пример идеально подойдёт для понимания, как работаю программы по принципу «Сервер — Клиент» Просто  у нас не правильный тон разработки трояна, а оно нам надо? Правильно. НЕТ!!! Мы же хорошие ребята и хулиганить не собираемся!

Как работают программы по принципу «Сервер – Клиент»

Просто и в двух словах картина выглядит вот так: Вы на своём компьютере запускаете «Клиентскую» часть программы, как правило, она имеет «GUI» то есть интерфейс пользователя (Если клиент не консольный)

На компьютере, к которому вы желаете получить доступ, запускается «Серверная» часть программы, она же открывает определённый порт на чужом компьютере и не видна в системе.

Через этот порт происходит соединения, Вы в клиенте указываете порт и IPадрес компьютера, на котором запущен сервер, подключаетесь к серверу и можете спокойно выполнять какие-то действия на чужом ПК со своего компьютера! Ещё можно прочитать мой прошлый пост и узнать:

Надеюсь, что здесь объяснил, вроде как понятно и простым человеческим языком! Если что-то не ясно, дальше, на примере все станет ясно! Далее давайте определимся, какие действия буду выполняться на удалённом ПК вследствие работы нашего маленького трояна!

Какой функционал в данном примере программы Сервер – Клиент.

Честно сказать, на этом этапе, когда размышлял, что бы показать я как-то замешкался и не как не мог придумать, что-то интересное! В общем пусть будет функционал из одной возможности и до жути простой:

— Пользователь будет получать Ваше сообщение.

Не вижу смысла добавлять какие-то другие возможности. Так как, считаю, что для примера и понимание этого вполне достаточно. Так же, думаю, не стоит писать много кода, то, что имеется ниже, то же достаточно, что бы посмотреть на программу изнутри!

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

Ну, а  у нас будет такой прикол! Человек, сидя за компьютером, неожиданно получит сообщение, например

«Привет, я шастаю по твоему компу»

представляете реакцию человека? Думаю это смешно, было бы увидеть его выражение лица!!!

Разработка программы по принципу «Сервер – Клиент»

Приступаем к самому интересному! И начнём мы с разработки самого «Сервера» после чего напишем под него клиент! Я не буду объяснять код программы, просто, буду приводить примеры, все же у меня не блог по программированию, да и цель поста показать поэтапно процесс разработки подобных программ по типу «Сервер – Клиент»

Разработка Сервера!

Изначально, нужно научить «Сервер» открывать какой-то порт на компьютере, дабы в дальнейшем иметь возможность подключиться к нему из «Клиента» а уже после научим принимать команды и выполнять какие-то действия на ПК.

Откроем порт следующим кодом, который до боли прост:

procedure TForm1.FormCreate(Sender: TObject);

begin
      ServerSocket1.Port := 666;
      ServerSocket1.Active := true;
end;

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

А пока убедимся, что сервер работает и порт открыт, вспоминаем команду «netstat» и смотрим результат.

Сервер – Клиент

Как видим на компьютере, вследствие запуска нашей программы действительно был открыт порт с номером «666» Это говорит только ободном, программа работает, и пришла пора научить «Сервер» принимать сообщение.

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

  Socket: TCustomWinSocket);
  var
     komm:string;

  Begin
       komm:=socket.ReceiveText;

       if copy(komm,1,12) = 'MESSAGE_TEXT' then

       begin
           Delete(komm, 1, 12);
           ShowMessage(komm);
       end;

end;

Тут дела обстоят следующие образом! Если серверу придёт команда с названием «MESSAGE_TEXT» (Название может быть любое) то сработает процедура «ShowMessage» и покажет сообщение, которое пришло вмести с командой и хранится в строковой переменной «komm»

Соответственно текст сообщение будем набирать в «Клиенте» и он может быть любого содержание!

В прочем, на этом разработка «Серверной» части закончена. В итоге у нас получился файлик «Server.exe» и пока отложим его в сторону до того момента пока не напишем «Клиент»

Разработка Клиента!

Клиент у нас будет по понятным причинам с графическим интерфейсом пользователя (GUI) и должен иметь элементы управление, кнопки и поля ввода. У меня получился вот такой вид программы:

Пример трояна Сервер – Клиент

Определимся со всеми элементами! Хотя и так понят но, как говорится, на всякий случай поясню.

 — IP: Поля для ввода IPкомпьютера, где запущен сервер.
 — Port: Указываем номер порта на котором висит сервер.
 — Подключится: Кнопка для подключения к серверу.
 — Текст сообщение: Поле для ввода сообщение, которое нужно отправить.
 — Отправить сообщение…: Соответственно кнопка для отправки сообщение.
 — Статус соединение: Тут мы узнаем, подключились или нет!

Дальше пробуем научить «Клиент» подключаться к серверу и проверим, как это работает. В данном варианте, код для кнопки «Подключится» выглядит так:

procedure TForm1.Button1Click(Sender: TObject);

begin

        ClientSocket.Host := IP.Text;
        ClientSocket.Port := StrToInt(Port.Text);
        ClientSocket.Open;

end;

Можно уже прям сейчас, запустить программу, и попробовать подключиться к «Серверу» но мы не узнаем результат, подключились или нет. Перед проверкой исправим это и научим программу показывать результат соединение.

procedure TForm1.ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket);

begin

     Label4.Caption := ('Удалось выполнить подключение к: ' + IP.Text);
     Label4.Font.Color := clGreen;

end;

И на тот случай, если все токи не удалось подключиться к серверу, например потому-что «Сервер» на удалённом ПК не запущен и соответственно порт «666» закрыт.

  procedure TForm1.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);

begin

      if ErrorCode = 10061 then

          begin

            ClientSocket.Active := False;
            Label4.Font.Color := clRed;
            Label4.Caption := ('НЕУдалосьвыполнитьподключениек:' + IP.Text);
            ErrorCode := 0;

          end;
    end;

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

Троян

Подключиться не удалось, все верно! Сервер же не запущен, соответственно подключаться не куда!

Проверим, как работает программа с запущенным сервером немного ниже, а пока научим «Клиент» отправлять нашу команду «MESSAGE_TEXT» помните? Мы её указали в «Сервере» если она придёт, то сообщение показать!

procedure TForm1.Button2Click(Sender: TObject);

begin
     ClientSocket.Socket.SendText('MESSAGE_TEXT' + MSG_TEXT.text);
end;

Вот такой код будет для кнопки «Отправить сообщение на удалённый компьютер» При нажатии этой кнопки сервер получит команду «MESSAGE_TEXT»и выполнит соответствующие действия, в нашем же случае, покажет сообщение из поля клиента «Текст сообщение»

Теперь когда «Клиент» умеет определять статус подключение к «Серверу» самое время все проверить. Запустим Сервер и Клиент. Далее пробуем подключиться к «Серверу» и смотрим статус.

принцип работы программы Сервер – Клиент

Видим, что статус подключения к удалённому компьютеру (В данном случае – это локальный) положительный, то есть мы успешно подключились к серверу по нужно порту.

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

Сервер – Клиент на примере

Видим, что сообщение с текстом вышло успешно – это свидетельствует о том, что наша «Программа» работает хорошо.

Если Вы не знали о таком типе программ, которые работают по принципу «Клиент — Сервер» то сейчас я надеюсь, для Вас стало все ясно и понятно!

Выше разработанную программу я закину в архив и дам ссылку на загрузку чуть ниже, на тот случай если Вам интересно попробовать. Например, киньте «Сервер» жене на компьютер, а сами со своего компьютера шлите ей сообщение, после смейтесь и наблюдайте за её реакцией.

Я так уже делал, прикольно!

Скачать.

X