![]() |
SOCKS на PHP
Вложений: 1
socks на php, в первую очередь планировался как вариант обхода фаервола, когда открыт только 80 порт а необходим доступ к сервисам на других портах. удобно использовать в комлекте с соксификаторами такими как например proxychains.
в комплект входят два скрипта : client.pl клиент запускается у себя,примерно так ./client.pl 127.0.0.1:1081 http://localhost/server.php # используются стандартные библиотеки входящие по умолчанию в установочный пакет perl # IO::Socket::INET, MIME::Base64, Compress::Zlib server.php - загружается на сервер #для успешной работы требуется: #php5, папка доступная для записи ( строчка $IPC_TMPDIR='/tmp/'; ), Registered Stream Socket Transports - unix клиентский скрипт работает как sock5, пересылая трафик на загруженный серверный скрипт. запуская с дополнительным третьим аргументом выводится дебаг информация. написал по своему практически, использовав : http://sourceforge.net/projects/ssspl/ http://http-tunnel.sourceforge.net/ поделитесь пожалуйста что у кого не работает/обругайте код. |
Во! Теперь пэрл без проблемм работает... перл, но не сам сокс.
Во первых мне не совсем понятно, зачем указывать sosk_ip:socks_port, разве не одним локальным портом можно воспользоваться? Вот у меня такое выходит, запускаю с параметрами: client.pl 127.0.0.1:51103 http://shinobi.net.ru/servak.php -d В FireFox выставляю сокс 5, и локальный порт 51103, захожу на сайты - не пашет ни один, зато в консоли наблюдаю такое: Код:
127.0.0.1:51103 => shinobi.org.ru:80127.0.0.1:51103 => advisordb.wmtransfer.com:Да, на сервере рядом со скриптом лежит папка tmp с правами на запись. |
Цитата:
на счет проблемы- может не резольвятся хосты на серере?( как вариант обратится к http://77.88.21.8/ ) или фаервол исходящие не пускает? я попробую тоже в свою очередь в разных условиях потестить. |
Не пашут и IP адреса вместо обычных :(
Вместо sosk_ip вписывал как 127.0.0.1 так и свой домашний IP, всё равно ничего не пашет ;( Или правильно ли я понимаю, php скрипт сам к тебе коннектится на этот порт чтоли? (Тогда в случае с NAT будет облом) |
Цитата:
на счет проблемы невозможности конекта- фидимо фаер рубит исходящий трафик, советую просто попробовать на другом сервере. на счет xor-шифрование - скорость уменьшается конечно значительно, но зато хоть какая-никакая защита от снифа. |
Тоже не работает, ОС Windows.
Код:
127.0.0.1:51103 => 78.47.**.**:80Read error at C:\sss.pl line 106. |
Цитата:
|
Протестировал.
Сначало при попытке зайти на какой нибудь сайт была белая страница, но и ошибку в консоли выдавало, что директория tmp не доступна на запись (хотя доступна). Ладно, в php скрипте я указал полный путь до папки tmp и ошибка с записью пропала, но теперь выводит стандартную ошибку: "Время ожидания соединения истекло" Лог из консоли прилогаю в текстовом файле: http://www.sendspace.com/file/iqsoul Пользовался браузером FireFox ставя пятый сокс. PS: Народ, почему никто не тестит и не пишет о результатах? |
Все заработало, только некоторые сайты (например http://www.archive.org/) не открываются, браузер(FireFox) выдаёт ошибку:
Код:
Ошибка в типе содержимого |
Цитата:
|
А у меня в чём может быть приблизительно причина?
Файрволы я отключал, но самое интересное, это то, что в консоли постоянно мелькают сообщения типа 200 OK, то есть я так понимаю, перловый скрипт, всё-таки получает информацию от скрипта, но почему-то до браузера она не доходит. Пробовал использовать и FreeCap, запуская из под него все браузеры и прочий софт - безрезультатно ;( |
Спасибо за скрипты, очень медленно обрабатывает запросы, гугл открывался секунд 5...
|
Цитата:
попробуй там такой скрипт к примеру: PHP код:
warwar я тестил с вебсервером на своем же компе на speettest - получается : без сокса 100% к примеру берем с соксом 80% а тут еще если брать удаленный вебсервер то и еще меньше будет. но это все неизбежная плата за потенциал. |
Да нет, у меня на серваке всё ок, сокэты работают.
Тем более что с Атлетом одни и те же скрипты тестили, у него работает на этом сервере, у меня - нет ;( |
Цитата:
|
Цитата:
Linux 2.6.18-128.4.1.el5PAE #1 PHP Version 5.2.11 Но опять таки, это у меня не работает, у атлета на ЭТОМ же сервере всё работает. |
Никак не могу с этой прогой разобраться....
|
С чем именно? Стучи в асю помогу.
|
Наконец-то, у меня всё заработало отлично.
Но только проблема точно такая-же как и с бекконнект соксом 4, то есть после успешного юзанья соединение рвётся где то через 1-2 минуты, и всё, скрипт надо только перезапускать, после чего снова работает нормально. Если кто знает в чём примерно дело, буду очень рад |
для наглядности сними видео........чтоб было более понятно!!!!!!!!!
|
Такой же глюк как и у всех.
При загрузке страницы выдает (в FF): "Время ожидания соединения истекло" Код:
C:\Perl\bin>perl.exe C:\sss.pl 127.0.0.1:80 http://site.ru/about/photo/xx.php -dСистема: FreeBSD 7.1 Apache/1.3.41 (Unix) FrontPage/5.0.2.2623 PHP/5.2.9 mod_ssl/2.8.31 OpenSSL/0.9.8e rus/PL30.22 Код:
$fp = fsockopen("ya.ru", 80, $errno, $errstr, 30);--------------------------------- Добавлено: Протестировал на другом сервере: FreeBSD 6.4 PHP: 5.2.10 Все отлично работает. Но почему на том не хотело хз. Заметил еще один глюк, иногда не до конца загружает страницу, или вообще выводит пустую белую, иногда бывает что вообще разрывает соединение. |
GrAmOzEkA, если есть KIS или Outpost, ковыряй ихние настройки, полностью исключив пЭрл из правил проверки.
|
обновил, что-то исправил
|
А каким способом можно шифровать траффик используя этот сокс, кроме как юзать Tor ?
|
Шанкар, поясни плиз - если сервак находится за гейтвэем, на котором осуществляется прокидывание портов, а так же фильтрование траффика (то есть внутрь и наружу проходят пакеты только по 80 TCP порту), получится ли использовать скрипт, чтобы получить доступ к другим портам на сервере?
В частности, интересует вопрос таймаутов - есть ли возможность с помощью этого скрипта прокинуть постоянное соединение? Если, например, нельзя изменить время выполнения PHP на сервере (запрещено политиками безопасности), то других вариантов я просто не вижу. |
Цитата:
Цитата:
|
Цитата:
A - клиентская машина. B - файрволл. C[1;n] - кластер веб-серверов (для снижения нагрузки). Файрволл B является шлюзом для кластера C. К нему у меня доступа нет. Пытаюсь рассужать логически, как идет трафик от А к С(n). Судя по всему, на В две сетевые карты, В1 и В2. В1 смотрит во внешку, а В2 - во внутреннюю сеть, в которой помимо кластера С находятся еще кластер с базой данных и NFS-серверы. Внутри сети трафик не фильтруется никак, при попытке обратиться во внешку - пакеты попадают на В2, на котором режется все, кроме транзитного трафика на 80 порт ТСР в обе стороны (видимо, админы недоглядели), который свободно уходит из внутренней сети во внешку. На файрволле стоит прокси (судя по всему - сквид), который смотрит во внешку на интерфейсе В1 на 80 порту и прозрачно форвардит запросы на случайно выбранный сервер из кластера С. Наличие прокси проверено опытным путем. На В1 фильтруется весь входящий трафик, кроме того, что идет на 80 ТСР. Также есть такая вероятность, что сквид стоит на одной из машин во внутренней сети, а с В1 на него трафик просто натится. Итак, я с машины А браузером обращаюсь на В и вижу страницу с C(n), где n - случайным образом выбранная машина из кластера С. Все машины в кластере настроены одинаково, DocumentRoot на всех - это примонтированная директория одного NFS-сервера. У меня есть доступ к С через веб-шелл, с правами пользователя виртуального хостинга. Допустим, мне необходимо проксировать все свои запросы во внутреннюю сеть (к примеру, я хочу подключиться по ssh на одну из машин) - для этого мне нужна постоянная сессия. Почему я не могу при этом воспользоваться твоим советом - ты, думаю, понял. Поднимать демона на perl на каждом сервере из кластера для общения с ним через php скрипт, который будет доступен через веб-морду - это не вариант, так как для постоянной сессии придется реализовывать довольно непростой интерфейс для общения демонов на разных машинах в кластере между собой - что-то вроде RPC с блэкджеком и печеньками. Можно, конечно, поступить совсем просто - сделать бэкконнект с одной из машин кластера на 80 порт ТСР своей тачки, но вся проблема в том, что под рукой нет машин с белым ипом и свободным 80 портом. Отсюда вытекает еще одна идея - грубо говоря, на третьей стороне на веб-интерфейсе будет php скрипт, на который периодически будет стучать демон с оного из серверов кластера, оставлять свой out и получать задания. Php скрипт, в свою очередь, при каждом выполнении будет транслировать out на прослушиваемый на моем компе порт и брать задания с этого же порта. Но эта идея обречена на провал - скорость каждого "пакета" в такой "сессии" будет измеряться десятками секунд, и если попробовать завернуть в такую RPC (а это именно она) обычный tcp трафик (чего я и хочу первоначально добиться) - то это будет просто смешно. В общем, у меня такое впечатление, что кроме бэкконнекта в моем случае ничего сделать не получится. Может, я где-то заблуждаюсь, и все-таки можно что-то придумать, используя те идеи, которые реализованы в топике? |
бекконект возможно тоже не получится из за того что трафик будет обрабатыватся прокси сервером. можно попробовать использовать dns tunnel но тут тоже нужен сервер с белым ip и 53 портом.
твой предложенный вариант в принципе можно попробовать реализовать, задержки конечно будут значительные как ты и сказал. а так еще если я правильно все понял, проблема использования этого скрипта в том что машины меняются постоянно и постоянной сессии не получается из за этого. тут вариант - так как веб папка везде одна- на nfs находится, изменить настройки скрипта так чтоб unix сокет создавался в папке nfs а не /tmp/ тоесть на всех тачках он будет неизменен и один и ничто не помешает держать сессию я думаю. это как с обычными сессиями php если тачка меняется то php уже не находит сессию. а если файлы сессий хранятся в общей папке то все работает. |
Цитата:
А вот за идею с одним сокетом на нескольких машинах огромное спасибо. |
вопрос с разрывом соединения и перезапуском, кто-нить решил?
|
Цитата:
|
| Время: 00:16 |