Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.108 c
4-1101586279
TankMan
2004-11-27 23:11
2005.01.23
Кто-нибудь может дать примерчик в котором можно было-бы


3-1103299148
alex145
2004-12-17 18:59
2005.01.23
Отчет по базе Данных


14-1104551223
Думкин
2005-01-01 06:47
2005.01.23
С днем рождения! 1 января


1-1105388433
m0l0doy
2005-01-10 23:20
2005.01.23
чужое окно


3-1103555237
Сергей Яковлев
2004-12-20 18:07
2005.01.23
lblPage в QuickRep - это кто?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский