Прокси

apple

Пользователь
У меня стоит Федора 7...Как организовать хождение в инет через существующий прокси??? (но только не через браузер, где указываются все типы проксей, их адреса и порты)
В общем нужно как-то сделать так, чтобы, например, через порт 8080 я смог запускать программы, которые лезут в инет?
 

Mike22

Местный
Вопрос не является специфичным для Linux, он и в Windows тоже стоит.
Тут надо понимать какой у вас прокси, его тип. Ведь "универсальных" не бывает.
Сетевых протоколов сотни и тысячи а каждый прокси-сервер обслуживает лишь один/несколько протоколов.
Есть универсальный прокси - socks, но и он не всегда способен решить проблему.
Первое что нужно сделать - понять что вам хочется.
БОльшая часть программ имеет опции настроек для работы через прокси, с остальными придётся повозиться.
Решением может стать и socks и iptables (перенаправление/прозрачный прокси) и маршрутизация.
Самое универсальное - создать туннель (VPN - если так понятнее) до машины на котором ваш прокси и направить маршрут по умолчанию в этот туннель.
Конечно при этом придётся ещё прописать маршруты ко всем ресурсам на которые вы хотите попадать обычным путём (не через туннель) и ещё вам нужно будет иметь полный доступ к этой второй машине (на которой прокси :( ).

Вобщем решений много и ничего особо сложного тут нет, но нужно чётко понять что вы хотите получить.
 

yohans

Уже освоился
А как вообще можно организовать локальный прокси на своем компьютере??

Я нашел инфу только по squid' у и то на английском. Там рассматриваются
возможности прокси в "глобальном" массштабе - организаци прокси для организаций и больших сетей и подсетей с организацией иерархии нескольких прокси.

А есть ли какой-нибудь простой вариант, цель которого - улучшение
кэширования страниц и экономия трафика. Именно через локальный
прокси на своей машине? И сразу - как его защитить - чтобы через него
не ходила в интернет подсетка?
 

Mike22

Местный
Ну, собственно, squid - и есть лучший вариант.
У меня на домашней машине именно он запущен (а к нему "прикручен" rejik в качестве "банерорезки").
Ограничить доступ к нему не сложно, у него самого очень развитая система ACL ну и iptables никто не отменял.

Документации на русском по squid достаточно много, видимо вы её как-то неправильно ищите.
Наберите в Яндексе - настройка squid

Вот неплохие -
http://www.opennet.ru/base/net/squid_inst.txt.html
http://bog.pp.ru/work/squid.html
 

Sturm

Новичок
Заблокирован
Позволяет ли squid перенаправлять поток из браузера в скрипт на локальном компьютере (на php например)? Т.е. сделать скрипт посредником между браузером и http-сервером. Если да, то как это сделать.
 

Mike22

Местный
Позволяет ли squid перенаправлять поток из браузера в скрипт на локальном компьютере (на php например)? Т.е. сделать скрипт посредником между браузером и http-сервером. Если да, то как это сделать.
squid многое умеет и позволяет.
Вы чётче опишите задачу, тогда можно попробовать подсказать решение.
Вы документацию по squid читать пробовали? :)
 

Sturm

Новичок
Заблокирован
Вот я и хочу понять, нужно ли мне тратить время на прочтение этой документации. Если squid - не тот инструмент, то и смысла в этом нет.

Задача состоит в том, чтобы весь траффик пропускать через скрипт. Нажатие на ссылку -> браузер формирует запрос к серверу -> запрос идёт не на сервер, а в скрипт -> скрипт преобразует тело запроса (например, шифрует) и открывает сетевое соединение с другим (промежуточным) сервером. На нём другой скрипт, расшифровывает запрос и забирает контент с конечного сайта (на который ссылка). Потом по обратной цепочке он идёт в браузер.
 

Mike22

Местный
Вот я и хочу понять, нужно ли мне тратить время на прочтение этой документации. Если squid - не тот инструмент, то и смысла в этом нет.

Задача состоит в том, чтобы весь траффик пропускать через скрипт. Нажатие на ссылку -> браузер формирует запрос к серверу -> запрос идёт не на сервер, а в скрипт -> скрипт преобразует тело запроса (например, шифрует) и открывает сетевое соединение с другим (промежуточным) сервером. На нём другой скрипт, расшифровывает запрос и забирает контент с конечного сайта (на который ссылка). Потом по обратной цепочке он идёт в браузер.
Это он может.
Читайте документацию.

Всё равно масштаб вашей задачи не ясен.
squid - прежде всего кеширующий прокси, и это достаточно крупное приложение.
То, как вы описали свою задачу - это можно решить программкой из 30 строк на любом языке высокого уровня.
 

Sturm

Новичок
Заблокирован
То, как вы описали свою задачу - это можно решить программкой из 30 строк на любом языке высокого уровня.
Основная сложность - получить текст запроса, формируемого браузером, типа
GET /page.html HTTP/1.1
Host: www.host.org
Accept: text/html

и т.д.

Не вижу возможности, как это сделать на языке высокого уровня. По-моему, это возможно только средствами браузера, если в качестве прокси-сервера указать squid на локальном компьютере.
 

Mike22

Местный
Да, нет тут никаких сложностей.
Простой (тупой) прокси это 10 строк кода.

Ну, squid, дак squid.
 

Sturm

Новичок
Заблокирован
Системную службу, слушающую определённый порт, можно в 10 строк написать что ли?
 

Sturm

Новичок
Заблокирован
Что нужно знать, чтобы написать этот скрипт? Какой язык - C, Perl или командный интерпретатор, что за библиотеки. Я не программист, поэтому кроме php ничего не знаю.
 

Mike22

Местный
я не шутил -
Код:
$fp = fsockopen ("$host", 80, &$errnr, &$errstr) or die("$errno: $errstr");
fputs($fp,"GET $path HTTP/1.0\n\n");
while (!$end) {
$line = fgets($fp, 2048);
if (trim($line) == "")
$end = true;
else
echo $line; }
fclose($fp);
на php при очень сильном желании можно сетевые приложения писать.
:(
 

Sturm

Новичок
Заблокирован
То, что вы написали, - это получение файла через созданный вами сокет. Т.е. уже существует служба на 80-м порту, к которой и идёт запрос. А я спрашивал, как эту службу написать. Что-то типа этого:
http://webscript.ru/stories/06/08/29/3262393
 

Mike22

Местный
Видите, дело сдвинулось. :)
И не так уж всё сложно.

Только вы должны понимать что производительность подобного приложения написанного на php будет крайне низкой.
(я не зря про масштаб вашей задачи упоминал)

Да и про squid + готовые существующие редиректоры для него не забывайте, посмотрите внимательно. Возможно это для вас и будет самым простым решением.
 

vav

Moderator
То, что вы написали, - это получение файла через созданный вами сокет. Т.е. уже существует служба на 80-м порту, к которой и идёт запрос. А я спрашивал, как эту службу написать. Что-то типа этого:
http://webscript.ru/stories/06/08/29/3262393

Вот честный севрер на перле.
Код:
#!/usr/bin/perl

use IO::Socket;

my $serv = IO::Socket::INET->new(
Listen => 5, LocalAddr => '127.0.0.1', LocalPort => 10000, Proto => 'tcp' );

while( my $client = $serv->accept() ) {
while( my $is = <$client> ) {
chomp $is;
printf "%s says: %s\n", inet_ntoa( $client->sockaddr() ), $is;
if( $is =~ /^stop/ ) { last; }
}
}

exit( 0 );

После небольшой доработки напильником будет прокси.
 

Sturm

Новичок
Заблокирован
Спасибо за пояснения. Теперь возник такой вопрос - как написать сервер, который способен одновременно обрабатывать несколько запросов. Т.е. не последовательный, а параллельный или асинхронный? Дело в том, что при последовательной обработке запросов узким местом становится время работы функции socket_connect, т.е. время установления соединения (т.к. прокси-сервер при обработке каждого запроса на время становится клиентом для другого, удалённого сервера). Неблокирующего режима работы для этой функции не существует, насколько я представляю. Если время одного соединения несколько секунд, то можно представить, сколько времени будет загружаться страница с большим количеством рисунков при последовательной обработке. В общем какой должна быть структура кода. На Perl лучше не писать, т.к. я его не знаю, лучше словами или на php или C.
 
Сверху