Print This Post Regexp HTTP-proxy

Пятница, 4. Март 2011
Раздел: Perl, Софт, автор:

Недавно для своих нужд написал небольшой прокси-сервер, заменяющий содержимое ответа по заданному регулярному выражению. Интерфейс реализован на основе Tk, сам сервер построен на основе модуля HTTP::Proxy, так как в нем есть довольно удобная система фильтров.
Замена может производиться как по статическим строкам, так и по полноценным регулярным выражениям. Если в регулярном выражении производится захват некоторого фрагмента, то доступ к нему в подставляемом тексте осуществляется стандартным для перла способом ($1, $2, ...).

Скачать: proxy_regex

В процессе разработки столкнулся со следующими проблемами, на которые рекомендую обратить внимание:
1. При использовании Tk вместе с методами fork или async, необходимо закрывать хендлы STDIN и STDOUT. В противном случае, Perl будет крешиться (фича или баг библиотеки encoding.dll, если не закрывать хендлы, то в ней вызывается метод, приводящий к попытке разыменования указателя на недопустимую область памяти).
2. HTTP::Proxy по-умолчанию довольно специфично работает с кодировками, поэтому стоит использовать заготовки fizbin'a с perlmonks.
3. При запуске win* используется HTTP::Proxy::Engine::NoFork, все бы хорошо, но если существует потребность производить остановку сервера по сигналу, то содержимое метода run следует слегка модифицировать. Изначально начало метода выглядит так:

Т.к. аргумента у метода can_read нет, то данный вызов является блокирующим. Соответственно, цикл из метода start (модуль HTTP::Proxy)

не сразу прекращается при получении сигнала. Поэтому я добавил аргумент в методе can_read для своевременной реакции на сигналы.
4. Ещё один неприятный момент состоит в том, что после выхода из цикла прокси не закрывает сокет. Решается добавлением строки после цикла.

 Обсудить на форуме


Получать обновления на почту:     

Метки: , , , , , , .

Комментариев: 11 к “Regexp HTTP-proxy”


  1. Arck :

    Нормально!
    Интересно!
    Захожу к вам каждый день ))

    [Ответить]


  2. AVE :

    2Arck подпишись на РСС ))

    [Ответить]


  3. andy :

    хорошая шутка - только не работает
    d:\downloads\proxy>perl -v

    This is perl, v5.10.1 (*) built for MSWin32-x86-multi-thread

    Copyright 1987-2009, Larry Wall

    Perl may be copied only under the terms of either the Artistic License or the
    GNU General Public License, which may be found in the Perl 5 source kit.

    Complete documentation for Perl, including FAQ lists, should be found on
    this system using "man perl" or "perldoc perl". If you have access to the
    Internet, point your browser at http://www.perl.org/, the Perl Home Page.

    d:\downloads\proxy>ver

    Microsoft Windows [Version 6.1.7601]

    d:\downloads\proxy>perl start.pl

    [Ответить]


  4. andy :

    беру свои слова обратно, но UTF-8 все-равно как-то странно работает

    [Ответить]

    Kaimi:

    На perl 5.8.9 под win вроде нормально работало с utf-8, по-крайней мере в контексте rambler.ru

    [Ответить]

  5. Немного не в тему:
    Каими на твоём блоге нашёл море полезной информации и софта. А не мог бы ты выложить рабочий брут акков mail.ru ?
    Сколько искал, рабочих не нашёл

    [Ответить]

    Kaimi:

    Брутить можно любым брутом с поддержкой pop3 + прокси нужны. Брут, например, hydra

    [Ответить]

    just18+:

    спасибо, попробую гидрой.

    [Ответить]


  6. #include :

    Как на счет socks5 и фильтрации https (ssl)? ОЧЕНЬ нужна такая прокся как тут, но с фильтрацией securного трафика. В Charles есть расшифровка https (надо всего лишь установить сертификат и юзать socks5), но модуль rewrite не работает с https :( .

    [Ответить]

    Kaimi:

    Fiddler вроде такое умеет

    [Ответить]


  7. foobar :

    есть же 3proxy (с поддержкой upstream к тому же) + PCRE плагин к нему
    http://www.3proxy.ru/plugins/PCREPlugin/?l=RU

    [Ответить]


Оставьте ваш комментарий