Сейчас на форуме: vasilevradislav, tyns777, zombi-vadim (+3 невидимых) |
![]() |
eXeL@B —› Программирование —› Принцип работы Sock proxy |
Посл.ответ | Сообщение |
|
Создано: 20 февраля 2008 20:36 · Личное сообщение · #1 Доброго времени суток уважаемые форумчане. Возник следующий вопросик у меня при написании сервера носка. Изучение RFC1928 не помогло. Значит к делу. Предположим есть клиент, которому нужно установить 2 TCP соединения и прокси на 1080 порту. С одним соединением все ясно - описано все подробно в RFC - обмен инфой, аутентификация, запрос на коннект и в случае удачи прокси сервер просто работает как посредник, пересылая данные в обе стороны. Но не врублюсь как же установить с ним второе соединение, если его порт 1080 занят. Может кто сталкивался. Благодарен за любую информация по сабжу, ссылки на исходники, ссылки на документы RFC и тд ![]() |
|
Создано: 20 февраля 2008 21:09 · Поправил: HiEndsoft · Личное сообщение · #2 |
|
Создано: 20 февраля 2008 21:18 · Поправил: TrueLies · Личное сообщение · #3 |
|
Создано: 20 февраля 2008 21:20 · Личное сообщение · #4 |
|
Создано: 20 февраля 2008 21:25 · Личное сообщение · #5 Ох ты сколько всего интересного, пойду изучать ))). PS: Люди только еще один вопросик, подскажите может кто знает снифер для отдельной проги. Ато я в сетевом программировании, как вы заметили новичок, а так бы посниферил трафие от прокси серверов чтобы понять как они работают с несколькими клиентами. ![]() |
|
Создано: 20 февраля 2008 21:28 · Личное сообщение · #6 |
|
Создано: 20 февраля 2008 21:43 · Поправил: smex · Личное сообщение · #7 Ага, s0larian немножко прояснил ситуацию. Забыл что 2 типа портов бывает. Выходит что сервер должен просто напрсто все поступившие на него подключения обрабатывать точно также, как и в случае с одним клиентом. Если так, тогда становится все на свои места. Пойду пробовать )). PS: И все таки снифер бы не помешал, хочется воочию глянуть как же работает socks5 сервер. Может кто посоветует что нибудь простенькое, высокоуровневое. Ато те сниферы которые я знаю показывают все на уровне пакетов и для все системы. ![]() |
|
Создано: 20 февраля 2008 22:00 · Личное сообщение · #8 |
|
Создано: 20 февраля 2008 23:12 · Поправил: smex · Личное сообщение · #9 drin Да собственно непонятно следующее. Порт забинден, на него пришел коннект, они меняются сведениями по поводу протокола, авторизация, коннект и работает дальше просто по принципу перенаправления данных. Но потом кто то новый подрубается, в то время, когда уже с данным проксиком работа идет. Что то мне кажется много крови будет )=. И еще вопрос. К сожалению с английским не сильно дружен, статью "Как обработать 10 тысяч одновременных соединений" прочитать не удалось. Может кто подскажет как работать например, если имеется 100 одновременных конеектов (или 1000). Это же множестово FD_SET не понятнет. Потоки тоже не катят, все мы понимаем какое снижение быстродействия произойдет при 1000 коннектах - переключение контекста операция не из быстрых. Может в 2х словах натолкнете на мысль. ![]() |
|
Создано: 20 февраля 2008 23:26 · Личное сообщение · #10 |
|
Создано: 21 февраля 2008 03:53 · Личное сообщение · #11 HiEndsoft Ну даеш, уложился даже в одно слово. А главное что все понятно. Спасибо. Правда как я понимаю аналога OVERLAPPED в POSIX нету. А программа нужна кроссплатформенная... Чувствую придется использовать потоки, много потоков, вернее очень много потоков... PS: Сталкиваясь с такими проблемами непереносимости я наконец то понял зачем придумали этот извращенный язык под названием ЯВА - как понимаю единственная предпоссылка создания этого языка - кроссплатформенность. ![]() |
|
Создано: 21 февраля 2008 11:42 · Поправил: HiEndsoft · Личное сообщение · #12 |
|
Создано: 22 февраля 2008 00:48 · Поправил: s0larian · Личное сообщение · #13 smex, количество сокетов для select() можно поднять - есть #define. Но, если ты хочешь высоко-скоростную реализацию, то разбирайся с IO Completion Ports. Тебе придётся написать абстракцию для асинхронной работы с данными - completion ports на windows и epoll на Linux. В обоих случаях у тебя пачка потоков и каждый обрабатывает пачку соединений. Кста, для С++ есть несколько реализаций таких библиотек. Посмотри на sf.net и у гугла спроси. Чичас вспоминается только ACE - там есть event de-multiplexor на select() и WaitForMultipleObjects(). Про completion ports не помню. Sniffer - wireshark. Протоколы разбирает и потоки данных показывает. ![]() |
|
Создано: 22 февраля 2008 02:16 · Поправил: smex · Личное сообщение · #14 Всем огромнейшее спасибо. Такой поток информации, что понимаю насколько мало всего знаю. Пока нет смысла задавать дальше вопросы, не изучив все сказанное вами выше. Пошел ставить снифер, изучать IO Completion Ports ) HiEndSoft Слышиш, а к тебе все таки вопроc, неужели ты думаеш что в Posix усть аналогия APC и callback? Ведь данное семейство ОС сильно отличается от Windows, и главное на сколько мне известно там нет сообщений, какие существуют в Windows. B все эти WSASend разработка самой майкрософт. Эти функции никак не укладываются в идеологию сокетов Беркли. Что то мне подсказывает, что в UNIX нет аналога этой фишки... PS: Парни, я все таки достал рабочий SOCKS5 прокси сервак, но к сожалению только экзешник. Пробовал отреверсить - че то не врублюсь как он коннекты получает. Насколько мне известо - сервер должен ждать коннекта функцией accept, находясь в блокированном состоянии. Этот же экзешник гоняет в каком то цикле, делает select c таймаутом 1 секунда. Что за ерунда такая? Что за новый способ установления связи с клиентом? Подскажите хоть в какую степь копать. Экзешник socks5 прокси прилагается. Висит на 1080 порту. ![]() ![]() |
|
Создано: 22 февраля 2008 21:09 · Поправил: s0larian · Личное сообщение · #15 smex пишет: Что то мне подсказывает, что в UNIX нет аналога этой фишки... В linux есть epoll() - это тебе даёт асинхронные уведомления из файловых и сокетовых descriptors. smex пишет: че то не врублюсь как он коннекты получает. Насколько мне известо - сервер должен ждать коннекта функцией accept, находясь в блокированном состоянии. Блокируется функцией select(). smex пишет: Этот же экзешник гоняет в каком то цикле, делает select c таймаутом 1 секунда. Что за ерунда такая? Это какой-то poll.... Скорее всего просыпается и проверяет что-то помимо сокетов. ![]() |
|
Создано: 22 февраля 2008 21:42 · Личное сообщение · #16 |
![]() |
eXeL@B —› Программирование —› Принцип работы Sock proxy |