ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

FTP checker/parser/sorter/PR-er
  #1  
Старый 22.11.2009, 14:22
Аватар для intNet
intNet
Познающий
Регистрация: 31.05.2009
Сообщений: 68
Провел на форуме:
1271980

Репутация: 19
По умолчанию FTP checker/parser/sorter/PR-er

Что-то не нашёл нормального чекера фтп с определением ПР и сортировки по нему. В результате решено было написать дынный скрипт.
Возможности:
[+] Parser/sorter/dup remover + приводит все фтп к нормальному виду
[+] Определение PR и сортировка по нему.

П.С. За код сильно не пинайте - perl не родной язык.
Thx to Pashkela за регулярку.

Код:
#!usr/bin/perl
use threads;
use threads::shared;
use Fcntl ':flock';
use LWP::UserAgent; 

#settings
my $threads = 10; #Кол-во потоков
my $input_file_name = 'ftp.txt';
my $output_file_name = 'good_ftp.txt';
my $sleep_time = 0; #задержка 
my $timeout = 5; #timeout in seconds
my $agent = "FTPCheck";
#/settings
my $good: shared = 0;
my @array : shared;
my $ua = LWP::UserAgent -> new(timeout => $timeout, agent => $agent);
my $ua2 = LWP::UserAgent -> new(timeout => $timeout, agent =>$agent);

system("title #FTP-CheckeR by intNet#");
about();
print localtime()." Parsing started...\n";
parse();
print localtime()." ok!\n".localtime()." Check started...\n\n";
@array = ftoarr($input_file_name);
threads ->new(\&gogo) for 1..$threads;
$_ -> join for threads->list;
print "\n\n".localtime()." Check done!\nGood: $good\n\n";
print localtime()." Sorting by PR...\n";
sort_by_pr($output_file_name);
print localtime()." Done!\n";
system("pause");

sub sort_by_pr {
	open FILE, "<$output_file_name" || die "Can't open $output_file_name\n";
	my @arr = <FILE>;
	close FILE;
	open FILE, ">$output_file_name";
	for(my $i = 10; $i>=0; --$i) {
		foreach $akk(@arr) {
			print FILE $akk if $akk =~ /PR: $i/;
			print "PR $i - $akk" if $akk =~ /PR: $i/;
		}
	}
	close FILE;
}

sub parse {
# помещает во входной файл отсортированные и очищенные уникальные фтп
	open DAT, "<$input_file_name" or die "Can't open $input_file_name\n";
	@temp_arr = <DAT>; 
	close DAT;
	my $a = 0;
	my @arr;
	foreach $akk(@temp_arr) {
		if($akk =~ /([^ ]*:[^ ]*\@[^ \n]*)/) { 
			push @arr => "$1\n";
			$a++;
		}
	}
	my @new_arr;
	foreach $akk(@arr) {  #adding ftp:// and :21 if needed
		chomp $akk;
		if($akk =~ /ftp:\/\//) {
			if($akk =~ /:21/) {
			  push @new_arr =>"$akk\n";
			} else {
				push @new_arr=>$akk.":21\n";
			}
		} else {
			if($akk =~ /:21/) {
				push @new_arr => 'ftp://'.$akk."\n";
			} else {
				push @new_arr => 'ftp://'.$akk.":21\n";
			}
		}
	}		
	@arr = sort @new_arr;
	for($i=0;$i<$a;$i++){
		@arr[$i] = '' if @arr[$i] eq @arr[$i+1]; #dup remove
	}
	open DAT, ">$input_file_name";
	print DAT @arr;
	close DAT;
	return ;
}

sub ftoarr {
	die "File $_[0] not exist or has zero-size\n" if(-z $_[0] || !-e $_[0]);
	open DAT, "<$_[0]" || die "Can't open $_[0]\n";
	my @ar = <DAT>;
	close DAT;
	return @ar;
}

sub fnote {
#syntax - WriteToFile(FileNameToWriteData, Data)
	open my $data_file, ">>$_[0]" || die "Can't open $output_file_name\n";
	flock $data_file, LOCK_EX;
	print $data_file $_[1];
	flock $data_file, LOCK_UN;
	close $data_file;
}	

sub gogo {
	while(@array) {
		my $str = undef;
		my $host = undef;
		my $pr = undef;
		my $cy = undef;
		{
			lock(@array);
			$str = shift(@array);
			chomp $str;
			next if $str eq '';
		}
		print "Now $str...";
		if(checkftp($str) ==1) {
			{
				lock($good);
				$good++;
			}
			if($str =~ /^ftp:\/\/?(.*):(.*)\@(.*):(\d+)/i) {
				$host = $3;
			} else {
				$host = '';
			}
			$res = $ua2->get('http://www.moshiach.ru/checker/worker.php?service=google_pr&url='.$host);
			$pr = substr($res->content, 6);
			$pr = 0 if $pr =~ /N\/A/;
			fnote($output_file_name, $str." | host: $host | PR: $pr\n");
			print " GOOD!($good), Host: $host, PR: $pr\n";
		} else {
			print " BAD!\n";
		}
		sleep $sleep_time;
	}
}
	
sub checkftp {	
	$getres = $ua->get($_[0]);
	if($getres->as_string =~ /200 OK/) {
		return 1;
	} else {
		return 0;
	}
}

sub about {
	print "#FTP-Checker\n#Version 1.0 [beta]\n".
			"#(C)oded by intNet\n".
			"\t[+] Parser\n\t[+] Checker\n\t[+] PR-checker with sorter\n\n";
	return ;
}
#by intNet
П.П.С. скрипт писался для себя.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПРОДАЮ FTP, PHP, без PHP, MDML, Directmailer, PR4-7 Sprutnet Разное - Покупка, продажа, обмен 33 07.02.2010 22:13
Общие сведения о Ftp уязвимостях. ReVOLVeR Чужие Статьи 0 15.09.2006 19:27



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ