Форум: "Сети";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизСамодельный файервол для чата. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.084 c