Pull to refresh

Comments 30

1) Простой скрипт с REMOTE_ADDR — не катит, в REMOTE_ADDR по идее всегда будет тупо адрес проксика, который шлет запрос. Надо проверять HTTP_X_FORWARDED_FOR, HTTP_REAL_IP как минимум, а вообще неплохо бы по всему массиву заголовков пройтись и проверить, т.к. бывают атипичные.
2) Из пункта 1 неявно следует, что 100% полагаться на myip.ru тоже особого смысла нет, т.к. неизвестно какие он IP адреса выдает, из каких «переменных»
p.s.: И применительно к решаемой задаче. Крайне редко анонимные фришные проксики бывают достаточно быстрыми для просмотра видео. А учитывая их нестабильность и относительно малую живучесть, смысла в них для этих целей не много на самом деле. Имхо разумнее замутить нечто вроде этого habrahabr.ru/blogs/infosecurity/107631/ или тупо купить американский проксик.
Ну, как решение единовременной проблемы меня устроило. И видео я посмотрел Ж)
Если на постоянной основе пользоваться aol tv, то проще купить vpn.
Вообще-то именно в этом и состояла задача. Посмотреть, какой адрес оказывается в REMOTE_ADDR
Не ставил задачу отделять высоко анонимные прокси, где действительно надо просматривать все возможные заголовки.
REMOTE_ADDR всегда содержит адрес сервера, непосредственно посылающего запрос на конечный сайт. То есть в Вашем случае — прокси сервера. Попытка найти в нём свой IP заведомо обречена на провал:)
Не всегда.
Например, proxy.corbina.ru настроена именно так, что в remote_addr оказывается мой реальный ip.
Какой же это прокси тогда?
распечатайте все полученные заголовки и ищите среди них свой айпи
если его там нет — прокси анонимная
Вместо того, чтобы обращаться к некоему HTML-сайту, определяющему IP, выкачивать с десяток килобайт, а затем парсить — не лучше ли использовать ifconfig.me/ip?
полезный какой сайтик, спасибо
Я как-то точно такой же многопоточный скрипт сделал (сначала надеялся на LWP::Parallel::UserAgent, но не получилось) — работает, но памяти жрёт… Для проверки анонимности запроса использовался свой скрипт на хостинге, который проверял наличие лишнего в запросах.

Минусы перловой многопоточности: 1) сколько памяти занимает 100 потоков? — дофига; 2) а если в этих потоках не обращение к медленным web-серверам делать, а что-то более быстрое, — какую долю будет занимать обращение к shared переменным? В Windows и Linux результаты будут немного разные, но общий вывод не очень утешительный.
Увидев картинку, я подумал, вы устройство Фарнсворта сделали и через него посмотрели ролик) Блог «Perl» не разглядел…
Эту задачу можно решить без use threads;
Например, AnyEvent + AnyEvent::HTTP (или обертка над ним).
Если хотим, чтобы выглядело как треды, то use Coro;
Спасибо за информацию.
Вообще, я задумывал пример с threads, а прокси просто под горячую руку подвернулись.
Я бы сказал ее нужно решать без use threads :) Особенно учитывая количество сетевых операций, которые не thread-safe в перле.
Еще один велосипед с тредами и сокетами. Люди, расскажите, кто вас научил распараллеливать сетевые операции тредами? Почему вы не используете select / AnyEvent?
Отличная идея!
Если будет время разобраться с anyevent, и про них статью напишу.
А вообще, статья задумывалась в первую очередь как пример использования threads
Фиг с ним с перлом. Сериал надо посмотреть. Название правильное.
Какой то странный код даже для обучающего оО

В каком формате список прокси лежит? Если в виде — каждый прокси на строку в файле, то цикл перебора можно упростить до:
# Читаем список проксей
open FIL, 'proxy.lst';
my @proxy = ;
@proxy = grep { /(\d+\.\d+\.\d+\.\d+:\d+)/ } @proxy;
print "Proxies found: ".@proxy."\n";


выборка следующего прокси из массива тоже не особо ясная конструкция, ее можно привести к виду:
# Получаем следующую проксю из списка
my $proxy=shift(@proxy);
# Если список кончился, заканчиваем
unless ($proxy) {
print "- Thread $num done.\n";
return;
}


И вообще лучше не использовать бесконечный цикл с тредами, а использовать AnyEvent.

Блин, хабрапарсер пожевал код :(
my @proxy = <FIL>; должно быть
Суть в том, что файл может быть в любом формате — например, весь текст выделен в браузере и скопирован в файл, а на странице было указано несколько проксей в одной строке, например в таблице.
Поэтому указанный способ более универсален.
Чем лучше отформатирован список, тем, понятно, проще его будет обрабатывать.
Ну тогда строку: @proxy = grep { /(\d+\.\d+\.\d+\.\d+:\d+)/ } @proxy;
надо заменить на: @proxy = map { /(\d+\.\d+\.\d+\.\d+:\d+)/g } @proxy;
И почему никто не использует m//g в списковом контексте:
my @ips = $text =~ m/\d+\.\d+\.\d+\.\d+/g;
А без lock при использовании threads::shared будут дублированные проверки проксей.
Хм.
В каком месте может быть у них столкновение? Пока что-то не вижу.
# Берём следующий номер в списке
my $seq=$last_p++;

А разве здесь несколько потоков не могут получить одинаковые данные?

UFO just landed and posted this here
Да, а пока в России его никто не крутит, значит и посмотреть ролик двухминутный нельзя.
А если какой-нибудь тв3 его купит, не факт, что он купит права для этого интернет-ресурса.
Так что своими силами справляемся Ж)
Имею такую ситуацию: в одной компьютерной сети есть считалка трафика, которая разгребает потоки netflow и складывает результаты в БД.

Считалка написана на Perl и в критические моменты скушивает аж одно ядро процессора. Мне то процессора не жалко, но дело в том что есть ещё 7 ядер которые загружены на 1..2 процента.

Умеет ли Пёрл параллелиться на несколько процессов? или здесь только fork() спасёт ситуацию?
Потому что thread'ы оно хорошо, но с точки зрения планировщика операционной системы это всё-равно остаётся одним процессом.
Ну, насколько я понимаю, fork() — это и есть разделение на несколько процессов.
Sign up to leave a comment.

Articles