Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Самодельный файервол для чата.   Найти похожие ветки 

 
MegaVolt ©   (2004-11-03 09:24) [0]

Есть локальная сеть. В ней исспользуется чат. Чата работает через сервер. Протокол обмена известен. Есть хулиганы которые пользуются ошибками в реализации сервера и могут например менять имена другим пользователям.
Есть идея поставить небольшой самописный экран на сервер чтобы данные от пользователей приходили на экран там проверялось бы разрешенность команд и осуществлялась бы фильтрация неразрешенных.
Как можно организовать такой экран? Сокеты подожли бы на ура но они по моему не позволяют определить от кого (IP/MAC) пришло сообщение :( Как можно другим способом организовать экран?
Буду рад любой помощи. Сил больше нету терпеть их выходки.


 
Rouse_ ©   (2004-11-03 09:37) [1]

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


 
MegaVolt ©   (2004-11-03 09:47) [2]

У меня iChat. Протокол имеется. Я интересуюсь как на дельфях сделать экран с обработкой. Как делать обработку я представляю прекрасно а вот как сделать экран не очень :( Подскажите какие механизмы исспользовать чтобы я мог точно определить с какого IP/MAC пришли данные. Т.е. у меня возникают затруднения именно в самогм механизме который примет данные на себя, передаст их серверу и вернёт ответ сервера пользователю.
Кто может наметить пути реализации этого буду премного благодарен. Если есть какие то примеры моей радости не будет границ :)


 
Rouse_ ©   (2004-11-03 10:06) [3]

Ну так я же объясняю, част садишь на другой порт, а на порт чата садишь свою программу которая через себя перегоняет пакеты от сервера к чату и обратно по дороге их просматривая, что не ясно то? ;)


 
MegaVolt ©   (2004-11-03 10:11) [4]

Это понятно :) Как сделать чтобы прога прогоняла через себя? Если исспользовать сокеты то вроде там работаешь только с данными а информации от кого она нету. Или я ошибаюсь? Если я ошибаюсь может есть где то примерЫ?


 
MegaVolt ©   (2004-11-03 10:28) [5]

В простейшем случае как сделать прозрачное перенаправление с одного порта на другой чтобы работа программ не нарушилась а я мог мониторить с какого IP/MAC послан пакет.


 
atruhin ©   (2004-11-03 11:29) [6]

>>работаешь только с данными а информации от кого она нету
Это с чего-же? Ты хоть какую-нибудь статью про сокеты прочитай.
Или список функций посмотри. (см. getpeername)


 
MegaVolt ©   (2004-11-03 11:44) [7]

Я же писал сразу что я не уверен в том что инфы нету. Сейчас займусь литературкой :)


 
MegaVolt ©   (2004-11-03 11:45) [8]

Я же писал сразу что я не уверен в том что инфы нету. Сейчас займусь литературкой :)


 
MegaVolt ©   (2004-11-03 13:43) [9]

Народ подскажите структуру програмки организующую тпрозрачное перенаправление данных с одного порта на другой?

Я так понимаю что исспользовать нужно UDP протокол и для каждого подключившегося открывать новый сокет. Данные из этой кучи сокетов отправлять в выходной порт. А как поступать с данными поступающими от моего чата. Их же нужно раздавать разным пользователям. А чат же уже не знает с каким пользователем он работает?

Поправте если не прав.


 
MegaVolt ©   (2004-11-03 15:12) [10]

Tcnm идея исспользовать пару сокетов на одного юзера. Оидн для общения с юзером другой с чатом. Так?


 
able ©   (2004-11-03 16:10) [11]

iChat работает через mailslots или с выделенным сервером?


 
Rouse_ ©   (2004-11-03 16:12) [12]


> Их же нужно раздавать разным пользователям. А чат же уже
> не знает с каким пользователем он работает?
>
> Поправте если не прав.

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

и гоняешь данные оттуда - туда


 
MegaVolt ©   (2004-11-03 16:40) [13]

iChat работает с выделенным сервером.

Одно уточнение мне нужно чтобы прога работала возле сервера. Т.е. пользователи коннектятся к проге (все пользователи) а прога общается с чатом одновременно фильтрую некорректные комманды.

Сделал приёмный сокет. В результате чат коннектится к моей проге и при успешном коннекте пишет что соединение удалось хотя реально с сервером связь не устанавливалась :( Как можно не подтверждать установление связи до тех пор пока не будет установлено реальное соединения с сервером.


 
Rouse_ ©   (2004-11-03 18:03) [14]


> Как можно не подтверждать установление связи до тех пор
> пока не будет установлено реальное соединения с сервером

Просто до тех пор пока сам не соединился с сервером, не создавай в своей программе серверный сокет для подключения клиентов ;)


 
Verg ©   (2004-11-03 19:53) [15]


> [12] Rouse_ ©   (03.11.04 16:12)


Есть один отрицательный момент в TCP-maping-е: Сервер будет получать все соединения от одного адресата.
Как это скажется на его работе зависит от него самого.
Мало ли что там у него "на уме".


 
Rouse_ ©   (2004-11-04 09:10) [16]

> [15] Verg ©   (03.11.04 19:53)
Хм действительно... об этом я не подумал...
Хотя вполне возможно что работа с пользователями на уровне сервера ведется по никам а на по IP адресам...
Ладно, подождем автора, что он скажет...


 
MegaVolt ©   (2004-11-04 09:31) [17]

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


 
Verg ©   (2004-11-04 10:00) [18]


> [17] MegaVolt ©   (04.11.04 09:31)
> Как быть между моей программой и чатом? Там должен быть
> один сокет и программа сама должна решать кому отправлять
> данные. Или как мне предложили исспользовать на каждого
> пользователя свой сокет для связи с чатом. У меня есть сомнения
> на то что куча сокетов настроенных на один и тот же IP и
> порт сможет сама разобратся кому пришло сообщение.


Сумбур какой-то у тебя.

Вот есть сервис (приложение) - некий чат сервер.
Он принимает соединения на порту номер N. Этот порт закрыт файерволом хоста от внешнего мира.
Есть второй сервис (приложение) на том же хосте (компьютере) - TCP мапер.
Он принимает соединения на порту M, который доступен из вешнего мира и равен номеру порта декларированного для участников чата в сети. Они все (участники чата) будут соединятся к товему хосту именно на порт M.
TCP мапер получив соединения на порт M обарзует сокет (ф-цией accept) и структуру данных в которую помещает дескриптор этого сокета (M). Так же в этой структуре он образует сокет (N) путем его создания (socket) и присоединения на адрес 127.0.0.1 (localhost) к порту N. После чего, все что будет приниматся с сокета (M) надо отправлять в сокет (N) и наоборот. При этом, естесственно, содержимое всех пакетов становится доступным для TCP мапера. Так же ему достоверно известен дальний IP адрес и дальний (remote) порт клиента, подключишегося извне на порт M. Видел как иногда кладут две телефонных трубы "валетом", чтобы дать поговорить между собой двум разным абонентам?
Эта структура (связка, сокетный дуэт в контексте кода ее обрабатывающего) живет до тех пор, пока не произойдет disconnect на любом из (M) или (N). При этом необходимо выполнить закрывание соединения на оставшемся в живих сокете (ф-ция shutdown). После всего этого дескрипторы сокетов закрываются, а сама структура их содержащая уничтожается.
Такой структуром может быть, например, наследник TThread для блокирующего режима сокетов или наследник TCustomWinSocket для асинхронных режимов с применением TClient/ServerSocket.



Страницы: 1 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.027 c
1-1105538319
Толян
2005-01-12 16:58
2005.01.23
Загрузка и сохранение таюлици ListView


14-1104493741
Кудесник
2004-12-31 14:49
2005.01.23
Вот почему "С лёгким паром" показывают каждый год...


6-1099476097
vic_vm
2004-11-03 13:01
2005.01.23
Контроль правильности открытия страницы в WebBrowser


3-1103550189
/glokk
2004-12-20 16:43
2005.01.23
FIBPlus (backup/restore)


14-1104815872
cyborg
2005-01-04 08:17
2005.01.23
Как хорошо!