Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Прозрачный прокси


Автор: ASGDeveloper 9.5.2006, 18:08
Вопрос такой, существует ли способ написания subj'а на дельфях? 

Автор: Демо 9.5.2006, 18:14
Цитата(ASGDeveloper @  9.5.2006,  18:08 Найти цитируемый пост)
Вопрос такой, существует ли способ написания subj'а на дельфях? 


Естественно. И ничем не отличается от любого другого сетевого приложения. 

Автор: ASGDeveloper 9.5.2006, 18:36
Цитата(Демо @  9.5.2006,  18:14 Найти цитируемый пост)
Естественно. И ничем не отличается от любого другого сетевого приложения.

Пример можешь дать? 

Автор: Демо 9.5.2006, 20:29
ASGDeveloper, 
Да просто смотри уже готовый TIdHTTPProxyServer на закладке Indy Servers в палитре компонентов.

Добавлено @ 20:30 
Цитата(ASGDeveloper @  9.5.2006,  18:36 Найти цитируемый пост)
Пример можешь дать?


А реальный пример - это ж не просто бросить компоненты на форму. Нужно писать код, и немало.
 

Автор: ASGDeveloper 9.5.2006, 20:45
Демо, 
Цитата(Демо @  9.5.2006,  20:29 Найти цитируемый пост)
Да просто смотри уже готовый TIdHTTPProxyServer на закладке Indy Servers в палитре компонентов.

Хе-х... Версия Indy как я понимаю 10? smile
Жаль, проект привязан к Indy 9 smile


Цитата(Демо @  9.5.2006,  20:29 Найти цитируемый пост)
А реальный пример - это ж не просто бросить компоненты на форму. Нужно писать код, и немало.

Может хотя бы инфа есть по этой теме? 

Автор: Демо 9.5.2006, 21:33
http://www.delphisources.ru/pages/sources/internet/2005_year/alt_http_proxy.html
ж) 

Автор: ASGDeveloper 9.5.2006, 21:58
Цитата(Демо @  9.5.2006,  21:33 Найти цитируемый пост)
http://www.delphisources.ru/pages/sources/...http_proxy.html
ж)  

как же, видел. это разве прозрачный проксик? smile) 

Автор: Демо 9.5.2006, 22:01
Цитата(ASGDeveloper @  9.5.2006,  21:58 Найти цитируемый пост)
как же, видел. это разве прозрачный проксик?


Так это же пример!
и что ты называешь прозрачным прокси? 

Автор: ASGDeveloper 9.5.2006, 23:05
Цитата(Демо @  9.5.2006,  22:01 Найти цитируемый пост)
Так это же пример!

Пример обычного прокси.
Цитата(Демо @  9.5.2006,  22:01 Найти цитируемый пост)
и что ты называешь прозрачным прокси?

как и все: это принудительное проксирование. 
то есть например, браузер отправляет запрос на www.sait.com:80, а прокся принудительно перенавляет на какой-нить localhost:8078

или проще говоря форвардинг трафика с одного порта на другой (грубо говоря) 

Автор: Демо 10.5.2006, 00:23
Цитата(ASGDeveloper @  9.5.2006,  23:05 Найти цитируемый пост)
как и все: это принудительное проксирование. 
то есть например, браузер отправляет запрос на www.sait.com:80, а прокся принудительно перенавляет на какой-нить localhost:8078

или проще говоря форвардинг трафика с одного порта на другой (грубо говоря) 


Ты неправильно трактуешь понятие  "Прозрачный прокси-сервер"(или "Transparent Proxy-Server").

Прозрачные прокси - это proxy, которые не являются анонимными. Они, во-первых дают знать, что используется proxy-сервер, а во-вторых "выдают" IP-адрес своего клиента. Задачами таких proxy, как правило, является кэширование информации и / или обеспечение выхода в Internet нескольких компьютеров через одно соединение.

Проще сказать, они в заголовке передают в поле X-Forwarded-For адрес клиента.

То, что ты называешь прозрачностью, не что иное, как TCP-PortMapping.

Простейший пример: http://forum.vingrad.ru/index.php?showtopic=95193 

Автор: ASGDeveloper 10.5.2006, 06:35
Цитата(Демо @  10.5.2006,  00:23 Найти цитируемый пост)
Ты неправильно трактуешь понятие  "Прозрачный прокси-сервер"(или "Transparent Proxy-Server").

Странно, но даже поиск в гугле дает аналогичное моему объяснение. smile
Цитата(Демо @  10.5.2006,  00:23 Найти цитируемый пост)
То, что ты называешь прозрачностью, не что иное, как TCP-PortMapping.

Тогда может подказать, как форвардить трафик с одного порта на другой? 

Автор: Демо 10.5.2006, 08:42
Цитата(ASGDeveloper @  10.5.2006,  06:35 Найти цитируемый пост)
Тогда может подказать, как форвардить трафик с одного порта на другой?


На маршрутизаторах этим занимается файрволл, будь то встроенный(например, на Cisco), или программный(Squid).

Как работает portMapping:

Есть хост (192.168.0.2), на нем крутится WEB-Сервер(порт 81);
Есть Доступ из интернета к внешнему маршрутизатору (111.111.111.111)
На маршрутизаторе реализована следующая процедура:
  При обращении из интернет по адресу 111.111.111.111:80 маршрутизатор отправляет приходящие пакеты на хост во внутренней сети 192.168.0.2:81, а ответ отправляет исходному автору запроса.

Как работает прокси:

Есть прокси-вервер по адресу 192.168.0.2

В параметрах подключения в браузере у клиента указывается его адрес.
При запросе от клиента на прокси в заголовок запроса добавляется дополнительный параметр - Proxy-Connection: Keep-Alive
Далее прокси сервер делает запрос на реальный хост, указанный в запросе, результат передает клиенту.
Если прокси прозрачный, в запросе реальному хосту он передает адрес клиента в параметре X-Forwarded-For, если анонимный - не передает.

Определи, что тебе точно нужно - первый вариант, или второй.

Добавлено @ 08:43 
Кстсти, в предыдущем посте есть ссылка на пример первого варианта. 

Автор: Snowy 10.5.2006, 08:55
Снова отправляю на пример маппера:
http://forum.vingrad.ru/index.php?showtopic=89811&view=findpost&p=689298 

Автор: ASGDeveloper 10.5.2006, 10:01
я не понимаю, зачем мне маппер, хотя видимо я задачу не пояснил, сорри  smile 
у меня такая задача, нужно чтобы браузер, без настройки проксей, гнал свой трафик например через localhost:8080 

Автор: Snowy 10.5.2006, 10:15
Без настройки прокси, он этого делать не станет.
Есть, конечно варианты. Но они далеко не простые. 

Автор: ASGDeveloper 10.5.2006, 10:40
Цитата(Snowy @  10.5.2006,  10:15 Найти цитируемый пост)
Без настройки прокси, он этого делать не станет.

Вот и я о том.
Цитата(Snowy @  10.5.2006,  10:15 Найти цитируемый пост)
Есть, конечно варианты. Но они далеко не простые.

Мы простых путей не ищем! smile
ИМХО моя квалификация позволяет это сделать. Ты главное хотя намекни, как можно осуществить форвардинг трафика на другой порт.

ЗЫ Гугл с яндексом молчат, ничего путного не узнал от них.
Все больше про линукс. smile 

Автор: RA 10.5.2006, 11:00
Цитата(ASGDeveloper @  10.5.2006,  10:01 Найти цитируемый пост)
я не понимаю, зачем мне маппер, хотя видимо я задачу не пояснил, сорри  smile 
у меня такая задача, нужно чтобы браузер, без настройки проксей, гнал свой трафик например через localhost:8080  


тогда тебе сюда freecap.ru, за описухой и сорсами.

Добавлено @ 11:01 
Потом ставь себе прокси делай его прозрачным, подключай праузер через freecap к проксю, и радуйся жизни. 

Автор: Snowy 10.5.2006, 11:22
Варианты:
1. Сложный, но грамотный.
Перехватывать все пакеты, идущие на 80-й порт и перенаправлять через нужный тебе хост-порт.
2. Попроще. Подменить все DNS запросы. Тут разные варианты. Все запросы будут идти на один IP, независимо от адреса (кроме тех, где адрес указан фактически). А эти запросы уже перенаправлять, спрашивая их IP у честного DNS.
3. Хук на WinInet запросы. Будет действовать не на всех, но на IE будет точно.

Из этих вариантов гарантированный 1-й. Остальные имеют недостатки. Но первый самый сложный в реализации. 

Автор: Nickel 10.5.2006, 14:09
Обрати внимание на файлик hosts в WINDOWS\system32\drivers\etc
Цитата
This file contains the mappings of IP addresses to host names

Немного не в тему, но может пригодиться.
Что касается сабжа, может я чего-то не понимаю... Наскока я знаю прозрачные прокси ставят в локалке для доступа в интеренет.  Пользователю не надо указывать прокси не в настройках браузера, ни использовать freecap, чтобы например поиграться в сетевую игрушку через инет. Как это работает можно почитать http://en.wikipedia.org/wiki/Proxy_server#Proxy_transparency. Кстати, у того же самого squid'а реализована возможность Transparent Proxy, посмотри сорцы. 

Автор: ASGDeveloper 10.5.2006, 14:30
Цитата(Snowy @  10.5.2006,  11:22 Найти цитируемый пост)
1. Сложный, но грамотный.
Перехватывать все пакеты, идущие на 80-й порт и перенаправлять через нужный тебе хост-порт.

Не подскажешь как можно реализовать?

У меня тут еще идея пришла, что если хучить функцию connect из winsock api и ставить нужный мне адрес? Вроде работать будет 100% со всеми браузерами. (идея взята из freecap). 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)