Сейчас на форуме: vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Принцип работы Sock proxy
Посл.ответ Сообщение

Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 20 февраля 2008 20:36
· Личное сообщение · #1

Доброго времени суток уважаемые форумчане.
Возник следующий вопросик у меня при написании сервера носка. Изучение RFC1928 не помогло. Значит к делу. Предположим есть клиент, которому нужно установить 2 TCP соединения и прокси на 1080 порту. С одним соединением все ясно - описано все подробно в RFC - обмен инфой, аутентификация, запрос на коннект и в случае удачи прокси сервер просто работает как посредник, пересылая данные в обе стороны. Но не врублюсь как же установить с ним второе соединение, если его порт 1080 занят. Может кто сталкивался. Благодарен за любую информация по сабжу, ссылки на исходники, ссылки на документы RFC и тд



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 20 февраля 2008 21:09 · Поправил: HiEndsoft
· Личное сообщение · #2

smex пишет:при написании сервера носка. чего-чего? Странно глупые вопросы про открытые порты, при имеющемся знании "носков". smex пишет:RFC1928...порт 1080 занят MSDN не рулит?

-----
продавец резиновых утёнков





Ранг: 192.7 (ветеран), 154thx
Активность: 0.070
Статус: Участник
The ONE

Создано: 20 февраля 2008 21:18 · Поправил: TrueLies
· Личное сообщение · #3

smex
Как обработать 10 тысяч одновременных соединений. http://sysoev.ru/prog/links.html Две верхние ссылки.

И тут http://www.alhem.net/Sockets/ посмотри.

-----
Сотрудник DHARMA





Ранг: 233.1 (наставник), 30thx
Активность: 0.210
Статус: Участник

Создано: 20 февраля 2008 21:20
· Личное сообщение · #4

Вот хорошая прокся 3proxy.ru http://3proxy.ru/
фри и опенсорс...

-----
AutoIt




Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 20 февраля 2008 21:25
· Личное сообщение · #5

Ох ты сколько всего интересного, пойду изучать ))).

PS: Люди только еще один вопросик, подскажите может кто знает снифер для отдельной проги. Ато я в сетевом программировании, как вы заметили новичок, а так бы посниферил трафие от прокси серверов чтобы понять как они работают с несколькими клиентами.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 20 февраля 2008 21:28
· Личное сообщение · #6

smex пишет:
Но не врублюсь как же установить с ним второе соединение, если его порт 1080 занят.

Ээээ... ты про соединение на dest port 1080? Ести так, то один клиент может открыть несколько соединений - у них будут различные src ports.



Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 20 февраля 2008 21:43 · Поправил: smex
· Личное сообщение · #7

Ага, s0larian немножко прояснил ситуацию. Забыл что 2 типа портов бывает. Выходит что сервер должен просто напрсто все поступившие на него подключения обрабатывать точно также, как и в случае с одним клиентом. Если так, тогда становится все на свои места. Пойду пробовать )).

PS: И все таки снифер бы не помешал, хочется воочию глянуть как же работает socks5 сервер. Может кто посоветует что нибудь простенькое, высокоуровневое. Ато те сниферы которые я знаю показывают все на уровне пакетов и для все системы.



Ранг: 63.8 (постоянный), 2thx
Активность: 0.030
Статус: Участник

Создано: 20 февраля 2008 22:00
· Личное сообщение · #8

smex
после того как порт забинден на него циклом принимаются клиентские соединения. а по поводу самого протокола (там их 3 версии socks4, socks4a, socks5) в rfc все структуры весьма понятно разжёваны



Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 20 февраля 2008 23:12 · Поправил: smex
· Личное сообщение · #9

drin
Да собственно непонятно следующее. Порт забинден, на него пришел коннект, они меняются сведениями по поводу протокола, авторизация, коннект и работает дальше просто по принципу перенаправления данных. Но потом кто то новый подрубается, в то время, когда уже с данным проксиком работа идет. Что то мне кажется много крови будет )=.

И еще вопрос. К сожалению с английским не сильно дружен, статью "Как обработать 10 тысяч одновременных соединений" прочитать не удалось. Может кто подскажет как работать например, если имеется 100 одновременных конеектов (или 1000). Это же множестово FD_SET не понятнет. Потоки тоже не катят, все мы понимаем какое снижение быстродействия произойдет при 1000 коннектах - переключение контекста операция не из быстрых. Может в 2х словах натолкнете на мысль.



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 20 февраля 2008 23:26
· Личное сообщение · #10

В 2-х словах: там используется OVERLAPPED.

-----
продавец резиновых утёнков




Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 21 февраля 2008 03:53
· Личное сообщение · #11

HiEndsoft
Ну даеш, уложился даже в одно слово. А главное что все понятно. Спасибо.

Правда как я понимаю аналога OVERLAPPED в POSIX нету. А программа нужна кроссплатформенная... Чувствую придется использовать потоки, много потоков, вернее очень много потоков...

PS: Сталкиваясь с такими проблемами непереносимости я наконец то понял зачем придумали этот извращенный язык под названием ЯВА - как понимаю единственная предпоссылка создания этого языка - кроссплатформенность.



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 21 февраля 2008 11:42 · Поправил: HiEndsoft
· Личное сообщение · #12

Даже если ты будешь использовать многопоточность и синхронные сокеты, тебе придется использовать объекты синхронизации, со всемы вытекающими. В POSIX наверняка есть аналогия APC и callback.

-----
продавец резиновых утёнков





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 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. Протоколы разбирает и потоки данных показывает.



Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 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 порту.

9d10_21.02.2008_CRACKLAB.rU.tgz - socks.exe




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 22 февраля 2008 21:09 · Поправил: s0larian
· Личное сообщение · #15

smex пишет:
Что то мне подсказывает, что в UNIX нет аналога этой фишки...

В linux есть epoll() - это тебе даёт асинхронные уведомления из файловых и сокетовых descriptors.

smex пишет:
че то не врублюсь как он коннекты получает. Насколько мне известо - сервер должен ждать коннекта функцией accept, находясь в блокированном состоянии.

Блокируется функцией select().

smex пишет:
Этот же экзешник гоняет в каком то цикле, делает select c таймаутом 1 секунда. Что за ерунда такая?

Это какой-то poll.... Скорее всего просыпается и проверяет что-то помимо сокетов.



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 22 февраля 2008 21:42
· Личное сообщение · #16

-->Winsock (для UNIX...<-- http://www.citforum.ru/nets/semenov/7/sock_71.shtml

-----
продавец резиновых утёнков



 eXeL@B —› Программирование —› Принцип работы Sock proxy
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати