Народ помогите пожалуйста! нужен скрипт прокси граббер и чекер вместе а то я и з за этого пхп начал учить мне нуно кароч что б в файл мона было добавить ссылочки а скриптик выдиралл от туда их и чекал сразу а потом записывал в файл какой нить уже неделю тилипаюсь с этим (
Хм...ты хочешь написать универсальный чтоле? для всего? Для эффективного чека: 1. Смотри что такое ProxyJudge 2. Учись работать с SSL и соксами 3. Учись отличать Codeen\Planetlab прокси 4. Для хттп, помимо proxyjudge'a смотри за что какие HTTP заголовки отвечают Для грабинга: 1. Учи регекспы 2. Универсальный врядли получица, для каждого сайта - свой парсинг надо 3. В пхп имхо траблы с мультитредовостью Она есть, но теряется кроссплатформенность
Гы.. раз такими вещами занимаешься - впервую очередь разобраться с языком pHp/Perl! Готовые решения недавно видел в "полезных скриптах". Это, мил человек, НЕ имхо А фаКт! Хочешь многопоточность - пиши на PerL!
Ну да...именно это я и имел в виду ) Писал давно на перле проксичекер(как Cgi скрипт). Забросил на автоматическом определении соксов ))) Так что стоит несколько раз подумать, прежде чем что-то писать, ведь есть вполне достойные(правда так-же, многие, платные) скрипты\проги, которые написаны до тебя, и для таких как ты
satana8920, специально для тебя proxy grab&check. Подробности в комментариях Code: ###################################################### # За основу скрипта взята работа s7r34m : Group of Freedom Search www.gfs-team.ru, # Отредактированная под нужды топикстартера ###################################################### use FileHandle; use Getopt::Std; autoflush STDOUT 1; getopts('f:'); printInfo(); getProxies($opt_f); checkProxies(); exit; ############################################# #This function gets proxylists from internet ############################################# sub getProxies { $links_file = shift; $num = 0; open(PROXY_LINKS, $links_file); @proxy_links=<PROXY_LINKS> or die print "$! "; close(PROXY_LINKS); open(ALLP,">./allproxies.txt"); #Get proxies foreach $url(@proxy_links) { print "Getting proxies from $url ... "; chomp($url); $s=getPage($url); # Данное регулярное выражение подходит только для страниц, на которых прокси сервера соотеветствуют маске: ip:port, # Например, http://www.freeproxy.ru./download/lists/goodproxy.txt # Для другого случая пишешь свою регулярку. while($s=~/(\d*\.\d*\.\d*\.\d*)\:(\d*)/msgi) { print ALLP $1.":".$2."\n"; $num++; } print "done\n"; } print "\n".$num." proxies found\n\n"; close ALLP; } ################################ #This function checks proxylist ################################ sub checkProxies { use threads; use threads::shared; $threadsNumber=64; print "Checking proxies... "; share(@flags); open(ALLP,"<./allproxies.txt"); #creating threads for($i=0;$i<$threadsNumber;$i++) { threads->create("myThread",$i); $flags[$i]="nothing"; } foreach $thr(threads->list) { $thr->detach; } #main loop #searches for unoccupied thread #and gives it a work $num=0; while($proxy=<ALLP>) { $num++; print "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"; print "Checking proxies... ".$num; $current=0; while() { if($flags[$current] eq "nothing") { $flags[$current]=$proxy; last; } if($flags[$current] eq "good") { $flags[$current]=$proxy; $goodNumber++; last; } $current++; if($current==$threadsNumber-1) {$current=0;} } } #checking finished #now we may kill all threads $i=0; while($i<$threadsNumber) { if($flags[$i] eq "nothing") { $flags[$i]="finish"; } if($flags[$i] eq "good") { $flags[$i]="finish"; $goodNumber++; } if($flags[$i] eq "finished") { $i++; } } close ALLP; print "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"; print "Checking proxies... finished\n"; print $goodNumber." eleet proxies found\n"; sleep(1); } ######## #Thread ######## sub myThread { while() { sleep(1); if($flags[$_[0]] eq "finish") {last;} if($flags[$_[0]] eq "nothing") {next;} #wait for task if($flags[$_[0]] eq "good") {next;} #wait for task $proxy=$flags[$_[0]]; $result=testProxy($proxy); if($result==1) { open(ELEET,">>./eleet.txt"); print ELEET $proxy; close ELEET; $flags[$_[0]]="good"; } else { $flags[$_[0]]="nothing"; } } $flags[$_[0]]="finished"; } ########################### #This function tests proxy ########################### sub testProxy { $env="http://nntime.com/textenv.pl"; #$env="http://samair.ru/cgi/textenv.pl" $s=getPage($env,"http://".$_[0]); ($adr,$port)=split(/:/,$_[0]); if($s!~/REMOTE_ADDR=$adr/) {return 0}; #bad or transparent proxy if($s=~/HTTP_VIA/) {return 0;} #anonymous or transparent proxy if($s=~/HTTP_X_FORWARDED_FOR/) {return 0;} #anonymous or transparent proxy return 1; #eleet proxy } #################################################### #This function prints information about the program #################################################### sub printInfo { print "*********************************************\n"; print "Usage:\n"; print "$0 -f file_with_links.txt:\n"; print "*********************************************\n\n"; } ################################# #This functon makes HTTP request ################################# sub getPage { use LWP::UserAgent; $ua=LWP::UserAgent->new; $ua->proxy(http=>$_[1]); $ua->timeout(10); $ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); $req=HTTP::Request->new(GET=>$_[0]); $res=$ua->request($req); if($res->is_success) { return $res->content; } }