Просмотр полной версии : proxy grab&check
satana8920
16.10.2007, 00:15
Народ помогите пожалуйста!
нужен скрипт прокси граббер и чекер вместе а то я и з за этого пхп начал учить
мне нуно кароч что б в файл мона было добавить ссылочки а скриптик выдиралл от туда их и чекал сразу а потом записывал в файл какой нить
уже неделю тилипаюсь с этим (
biophreak
16.10.2007, 01:28
Хм...ты хочешь написать универсальный чтоле? :) для всего?
Для эффективного чека:
1. Смотри что такое ProxyJudge
2. Учись работать с SSL и соксами
3. Учись отличать Codeen\Planetlab прокси :)
4. Для хттп, помимо proxyjudge'a смотри за что какие HTTP заголовки отвечают :)
Для грабинга:
1. Учи регекспы
2. Универсальный врядли получица, для каждого сайта - свой парсинг надо
3. В пхп имхо траблы с мультитредовостью :) Она есть, но теряется кроссплатформенность ;)
mR_LiNK[deface_0nl
16.10.2007, 04:44
Гы..
раз такими вещами занимаешься - впервую очередь разобраться с языком pHp/Perl! Готовые решения недавно видел в "полезных скриптах". ;)
В пхп имхо траблы с мультитредовостью :) Она есть, но теряется кроссплатформенность ;)
Это, мил человек, НЕ имхо А фаКт! Хочешь многопоточность - пиши на PerL! ;)
biophreak
16.10.2007, 10:23
Ну да...именно это я и имел в виду :))
Писал давно на перле проксичекер(как Cgi скрипт).
Забросил на автоматическом определении соксов :))))
Так что стоит несколько раз подумать, прежде чем что-то писать, ведь есть вполне достойные(правда так-же, многие, платные) скрипты\проги, которые написаны до тебя, и для таких как ты ;)
BuH@LicH
18.10.2007, 17:22
satana8920, специально для тебя proxy grab&check. Подробности в комментариях
################################################## ####
# За основу скрипта взята работа 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;
}
}
Cawabunga
18.10.2007, 17:38
satana8920, специально для тебя proxy grab&check. Подробности в комментариях
Специально для него мог бы хотяб комментарии перевести на Русский =)
satana8920
18.10.2007, 17:42
спасибо!!! я очень благодарен!!!!
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot