Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2010, 22:31   #421
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
...кровь из носу админка должна автоматом присваиваться.
Сообщение #404, там все описано. При идентификации, в Case 1: должна быть проверка на админа, ...все админы в файле, читаем файл по строкам, сверяем с ником клиента, есть совпадение ника и IP-адреса, значит он админ, делаем пометку админа, ...все! он админ, пока на связи.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 08.06.2010, 22:59   #422
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

В посте #410 у вас в коде цикл
Код:
For i := 0 to 15 do
Он для примера или его нужно дописать?
Цитата:
Сообщение от Beermonza Посмотреть сообщение
Сообщение #404, там все описано. При идентификации, в Case 1: должна быть проверка на админа, ...все админы в файле, читаем файл по строкам, сверяем с ником клиента, есть совпадение ника и IP-адреса, значит он админ, делаем пометку админа, ...все! он админ, пока на связи.
Да, но в том случае как я понял админка должна активироваться вручную с клиента. Или я не прав?
Как правельно отослать на клиента команду бан/разбан при удалённом управлении
Код:
// Отошлём команду бана
ServerSocket.Socket.Connections[ServerSocket.Socket.ActiveConnections - 1].SendText('4');
Данный способ предназначен для работы с клиентами на самом сервере.

Последний раз редактировалось Shouldercannon; 09.06.2010 в 09:57.
Shouldercannon вне форума Ответить с цитированием
Старый 09.06.2010, 02:37   #423
morfey
 
Регистрация: 18.05.2010
Сообщений: 7
По умолчанию

Люди помогите где здесь ошибка

procedure TForm1.htmlLite1ImageClick(Sender, Obj: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var st:string;
begin
st:=stringreplace (TImageObj(Obj).Source,extractfilep ath(application.exename)+'img\',' *',[]);
st:=stringreplace(st,'.gif',' ',[]);
if (Obj is TImageObj) then Memo1.SelText:=st;
end;


и еще как сделать бан систему и регистрацию в чате оч надо
morfey вне форума Ответить с цитированием
Старый 09.06.2010, 10:05   #424
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
и еще как сделать бан систему и регистрацию в чате оч надо
Уже обсуждалось в этой теме, смотри с самой первой страницы.
Shouldercannon вне форума Ответить с цитированием
Старый 09.06.2010, 16:32   #425
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

morfey, не засоряйте тему сторонними вопросами и кодами. Если вам попутно нужно что-то править, это не значит, что в этой теме можно спрашивать подобное, ...вообще не известно что за процедура, что она делает с рисунком, и какого типа ошибка. Совет - начать учиться программированию, с вопросами в раздел "Помощь студентам", там всем "оч надо".

Shouldercannon, в посте #410 примеры правильного написания кода, если хотите чтобы ошибки находились быстро и самостоятельно. Цикл взят с потолка, просто показать как он должен быть записан, от назначения с началом и концом.

Цитата:
Сообщение от Shouldercannon
Да, но в том случае как я понял админка должна активироваться вручную с клиента. Или я не прав?
Админка по описанию будет автоматической, как только клиент зайдет в чат, при идентификации ( Case 1: ) сервер пометит админа и даст ему права удаленного администрирования, читаем внимательно #404 как это нужно сделать.

Цитата:
Сообщение от Shouldercannon
Данный способ предназначен для работы с клиентами на самом сервере.
Код:
// Отошлём команду бана
ServerSocket.Socket.Connections[ServerSocket.Socket.ActiveConnections - 1].SendText('4');
ActiveConnections - число рабочих каналов, на которых находятся клиенты, если использовать этот код, то он будет блокировать последнего подключившегося клиента. Мы знаем, что в виду разной загрузки сети и ПК, ответы клиентов на идентификацию могут приходить позже, чем те, у которых сеть свободна и ПК разгружен. Подключившись и "ответив" по разному оба забаненых клиента будут находится в разных условиях. Обе команды на бан получит тот, кто "ответил" позже, если он по списку числится последним, т.е. ActiveConnections - 1. Если список коннектов будет расширяться, то и отправка будет плыть, отправляться последнему клиенту в списке. Вместо этого нужно использовать конкретный канал пользователя, который должен быть заблокирован:
Код:
ServerSocket.Socket.Connections[i-1].SendText('4');
Это i-1 только что вошел, это он после проверки (создайте цикл перебора списка блокируемых, пусть условие находит номера каналов в массиве для работы с ними) должен быть заблокирован, ему конкретно и пойдет команда, но не последнему в списке коннектов.
Что касается сервера, ...у него есть список подключившихся, мышью выбираем клиента (так же как и в привате), в цикле ищем имя в массиве UserMas[j].Name, по совпадению отправляем пакет так же, но по j, почему? ...массив числится от 0 до ActiveConnections-1.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 09.06.2010 в 16:34.
Beermonza вне форума Ответить с цитированием
Старый 09.06.2010, 22:57   #426
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
В процедуре UpdateUserMas, в ней первыми строками идет очистка прежней информации. Создайте в типе TUserList запись Admin: Boolean, она будет отвечать за администрацию, True - администратор, Flase - нет. Вот часть обновления:
Код:
procedure TForm1.UpdateUserMas;
begin
  If ServerSocket.Socket.ActiveConnections > 0 then
    Begin
// очищаем массив
      For i:=1 to 255 do
        Begin
          UserMas[i].Status := 0;
          UserMas[i].Admin := False; // не администратор
        end;

......

    end;

.....

end;
Как только при идентификации пользователя по IP узнается что он админ, запись Admin переводите в True.
Пробую сделать
Код:
type
  TUserList = object
  Status: Byte;    // 1 - сервер, 2 - клиент
  Rec: Boolean;    // Отметка записи пользователя в список
  Name: string;    // Имя (ник)
  Image: Byte;     // Индекс иконки
  Admin: Boolean;  // Проверка на админа
end;
дальше ступор. Проверку на админа
Код:
                // Обработка админов
                for n := 0 to 255 do
                  begin
                    if AdminIPMas[n] = ServerSocket.Socket.Connections[i - 1].RemoteAddress then
                      ServerSocket.Socket.Connections[i - 1].SendText('8');
                  end;
переносить в procedure TForm1.UpdateUserMas;?
Shouldercannon вне форума Ответить с цитированием
Старый 09.06.2010, 23:57   #427
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Проверка на админа в таймере в Case 1:

Код:
// код приема ника клиента -----------------------------------------------------
1: Begin
      // запишем в массив полученный ник
      UserMas[i].Name:=Copy(text,2,len);
      // отметим, что пользователь записан в список
      UserMas[i].Rec:=True;
      // отметим авторизацию счетчиком
      Inc(Autores);

       // Обработка админов
       for n := 0 to 255 do
         begin
           if AdminIPMas[n] = ServerSocket.Socket.Connections[i - 1].RemoteAddress then UserMas[i].Admin := True;
         end;

    end;
// -----------------------------------------------------------------------------
...если IP-адрес будет найден, то подключившийся клиент сразу станет админом. Отправлять с пункта 1: ничего нельзя!!!! ...следом идет процедура обновления списка в конце такта таймера, она отсылает списки, ...игнорировать это обстоятельство нельзя, иначе получите слепленные пакеты.
Придется админу делать отдельный запрос на администрирование, и это будет правильно, ...не обязательно пользователь сразу хочет быть админом, путь нажимает кнопку "администрирование", в кнопке запрос по коду "8", сервер пусть принимает и проверяет сначала запись UserMas[i].Admin, если она истинна, то отправляет уже ему пакет с разрешением удаленного администрирования.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 10.06.2010 в 00:01.
Beermonza вне форума Ответить с цитированием
Старый 10.06.2010, 02:08   #428
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Админка по описанию будет автоматической, как только клиент зайдет в чат, при идентификации ( Case 1: ) сервер пометит админа и даст ему права удаленного администрирования, читаем внимательно #404 как это нужно сделать.
Вот видите, снова пришли к ручной активации, значит под автоматически подразумевалось
Код:
       // Обработка админов
       for n := 0 to 255 do
         begin
           if AdminIPMas[n] = ServerSocket.Socket.Connections[i - 1].RemoteAddress then UserMas[i].Admin := True;
         end;
а не отсылка сразу команды активации.

Цикл в любом случае офрмлять так, даже если между begin и end одна строка кода?
Код:
for m := 0 to UserListView.Items.Count - 1 do
  begin
    ...
  end;
Тут тоже ошибок насажал. В место ServerSocket.Socket.Connections[ServerSocket.Socket.ActiveConnectio ns - 1] нужно применить ServerSocket.Socket.Connections[i - 1] и на сервере в списке юзеров есть ник, а справа его IP, может его брать из списка, а не получать с помощью ServerSocket.Socket.Connections[i - 1].RemoteAddress?

Количество команд перевалило за 9, сделал оптимизацию:
4 - запрет входа в чат (проверка диапазона)
5 - 0 (разбанить), 1 (забанить), 2 (автобан)
6 - 0 (деактивировать админку), 1 (активировать админку)
Вложения
Тип файла: txt Code.txt (8.3 Кб, 124 просмотров)

Последний раз редактировалось Shouldercannon; 10.06.2010 в 15:47.
Shouldercannon вне форума Ответить с цитированием
Старый 10.06.2010, 16:11   #429
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

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

Если нужно расширить код команд, вводите второй байт, кодировка изменится таким образом: 00 - 09, 10 - 19, 20 - 29 и так до 99, первый байт отвечает за тип команды, второй - за вид, например:

0 - тип передачи пакетов пользователей,
подтипы: 0 - сообщение, 1 - приватное сообщение, 2 - файл;

1 - тип идентификации пользователей,
подтипы: 0 - запрос сервера на ник, 1 - ответ пользователя, 2 - список пользователей;

2 - тип удаленного администрирования,
подтипы: 0 - запрос пользователя на администрирование, 1 - разрешение сервера на администрирование, 2 - передача администратора предупреждения для пользователя, 3 - запрос администратора на блок пользователя, 4 - запрос администратора на отключение пользователя;

и т.д. и тп.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 10.06.2010, 17:04   #430
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Чёрт с ним пусть будет активация в ручную, главное чтобы стабильно работало.

1. Что можете сказать по поводу реализации бан/разбан, дать/забрать админку в прикреплённом файле?

2. Не понятно.
Цитата:
Это i-1 только что вошел, это он после проверки (создайте цикл перебора списка блокируемых, пусть условие находит номера каналов в массиве для работы с ними) должен быть заблокирован, ему конкретно и пойдет команда, но не последнему в списке коннектов.
для какой именно работы?

3. При даче/отнятии админки придётся пересматривать флаг UserMas[i].Admin := True;. Допустим, пришёл юзер и определился как админ UserMas[i].Admin := True; и через 5 мин у него забирают админку, отсылая командку 60, а так как до этого произошло UserMas[i].Admin := True;, то получается что при очередной проверке на администратора он снова будет админом при условии того, что во время снятия с админства он был в чате.
Вложения
Тип файла: txt Code.txt (8.3 Кб, 116 просмотров)
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Создание клиент-сервера Pblog Обсуждение статей 0 03.10.2007 17:12
обновление в блоге - Диплом. Создание и продвижение сайта - готовь сани летом, а дипл Pblog Обсуждение статей 0 31.08.2007 20:00
обновление в блоге - USB Холодильник Pblog Обсуждение статей 0 25.06.2007 14:13
обновление в блоге - О ярлыках Pblog Обсуждение статей 0 27.05.2007 03:17