Просмотр полной версии : Perl , post
хочу передать пост запрос на определенный сайт , он выглядит так :
name=тут имя & message= тут сообщение & id=тут индефикатор . id генерируется каждый раз разный , как его узнать ?
Найти алгоритм генерирования или выдирать из страницы.
ЗЫ. а флудить нехарашо.
id генерируется каждый раз разный , как его узнать ?
Кем генерируется? У него и узнай.
Пост-запрос имеет такой вид:
$post = "name=$name&mess=$mess&id=$id";
$len = strlen($post);
$query = "POST /go.php HTTP/1.1\r\n".
"User-Agent: Mozillko\r\n".
"Host: host.com\r\n".
"Referer: http://host.com\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Connection: close\r\n".
"Content-Length: $len\r\n".
"\r\n".
"$post";
Этот $id идентификатор сообщения? или капча?
$id идентификатор сообщения
use LWP::UserAgent;
use HTTP::Request;
$url = "http://site.ru";
$ua = LWP::UserAgent->new();
$req = HTTP::Request->new (POST => $url);
$req->content_type ("application/x-www-form-urlencoded");
$req->content ("name=IMYA&message=MESSAGE&id=ID");
$res = $ua->request($req);
die "Error: " . $res->status_line unless ($res->is_success);
$content = $res->content;
....
Если id - каптча, то нужно искать антикаптчу (если повезет, найдете)
http://paste.org.ru/?s3rkdn кто может переделать скрипт так что бы он отправлял ? на примере проще гораздо просто :)
Сначала обратиться к странице и узнать id
Найти его так:
<?php
$site = file_get_contents('http://www.antichat.ru');
preg_match("#<div>(.*)</div>#isU", $site, $out);
echo $out['1']; // Это твой id
?>
<div> - Это тэг или какой-то код который идет до определения id на странице, а </div> это тег или кусок кода, который идет после определения id на странице...
далее делаешь пост запрос, что показан выше с этим $id
Isis можно тоже самое только на перл ?
http://paste.org.ru/?s3rkdn кто может переделать скрипт так что бы он отправлял ? на примере проще гораздо просто :)
http://pastebin.x3k.ru/145
Не проверял
Isis можно тоже самое только на перл ?
Нет))))Не знаю перл..увы
imajo.ati
21.02.2008, 15:30
речь случайно не про гостевую на том сайте?
http://www.kyky.altnet.ru/guest/write.php
куда проще зафлудить, тем более там активная xss (но кавычки фильтрует)
2all !! примеры , отрывки кода и т.д. и т.п. только на PERL !
imajo.ati да про ту , я знаю - просто использую как пример
imajo.ati
21.02.2008, 16:00
именно для данного случая этот ид совсем не нужен. он не привязан ни к чему, а
потому это просто число. одно из чисел, которые сервер принимает за валидные.
проще сохранить форму на хард и наштамповать посты яваскриптом.
у кого нибудь будет ответ который нужен мне ? как узнать id , плз пишите на примере , ЯП обязательно перл !
imajo.ati
21.02.2008, 19:16
$p01nt
я ещё раз повторюсь. id постоянный он не генерируется. посмотри. 41c3c0244c353
сколько страницу не обновляй id будет один и тот же.
имхо неудачный пример для тренировки
а на твой вопрос уже ответил Isis, пост №8
$p01nt Стучи в Осику напишем
можно тоже самое только на перл ?
use LWP::UserAgent;
my $ua = LWP::UserAgent->new();
my $res = $ua->post($url,
[ 'param1' => 'val1',
'param2' => 'val2', ],
'header1' => 'val1',
'header2' => 'val2',
);
etc
Пиф он имел регулярку ^^
Php:
$site = file_get_contents('http://www.antichat.ru');
preg_match("#<div>(.*)</div>#isU", $site, $out);
echo $out['1']; // Это твой id
Perl: (Покажу напримера файла)
Сделал файл page.html с содержанием:
<html>
<head>
<title>PERL regexp</title>
</head>
<body>
<h1>File where I serach text</h1>
<DIV>I NEED THIS TEXT</DIV>
</body>
</html>
Тут I NEED THIS TEXT то что нам надо искать...
Вот perl скрипт:
#!/usr/bin/perl
open(DATAFILE, "scr/page.html") || die "Cannot open DATAFILE";
while(defined($file = <DATAFILE>))
{
if($file=~m%(<DIV>(.*)</DIV>)%igs)
{
$file=~s%(<DIV>(.*)</DIV>)%%igs;
print "Result: $2";
}
}
Запустил, результат:
C:\Perl\bin>perl scr/reg.pl
Result: I NEED THIS TEXT
C:\Perl\bin>
#!/usr/bin/perl
open(DATAFILE, "scr/page.html") || die "Cannot open DATAFILE";
while(defined($file = <DATAFILE>))
{
if($file=~m%(<A>(.*)</A>)%igs)
{
$file=~s%(<A>(.*)</A>)%%igs;
print "Result: $2";
}
}
#!/usr/bin/perl -w #вроде этот ключ исправляет некоторые ошибки в коде
open(DATAFILE, "scr/page.html") || die "Cannot open DATAFILE";
while(<DATAFILE>)
{
if(m/<A>(.+)<(backslash)/A>/igs)
{
s/<A>(.+)<(backslash)/A>/igs;
print "Result: ".$_;
}
}
close(DATAFILE);
^^
^^
C:\Perl\bin>perl scr/reg.pl
Bareword found where operator expected at scr/reg.pl line 6, near "m/<A>(.+)<(ba
ckslash)/A"
Unquoted string "backslash" may clash with future reserved word at scr/reg.pl li
ne 8.
syntax error at scr/reg.pl line 6, near "m/<A>(.+)<(backslash)/A"
Search pattern not terminated at scr/reg.pl line 8.
(backslash)
А не легче экранировать?
<\/DIV>
my $s='<html> <head> <title>PERL regexp</title> </head>
<body> <h1>File where I serach text</h1>
<DIV>I NEED THIS TEXT</DIV>
</body>
</html>';
print "Result : $1 " if $s=~/<DIV>(.+)<\/DIV>/;
Более ч0ткий пример (c) demonoid
C:\Perl\bin>perl scr/reg.pl
Bareword found where operator expected at scr/reg.pl line 6, near "m/<A>(.+)<(ba
ckslash)/A"
Unquoted string "backslash" may clash with future reserved word at scr/reg.pl li
ne 8.
syntax error at scr/reg.pl line 6, near "m/<A>(.+)<(backslash)/A"
Search pattern not terminated at scr/reg.pl line 8.
бугага. в теге [php] бэкслеши '\' не отображаются, поэтому я заменил его словом. еще раз бугага
Пиф ты вообще свой код проверял? Меня очень сильно возбудила 8 линия ^^ +)
s/<A (.+)<(backslash)/A>//igs;
вот так =)
это если надо тереть линки.
я просто немного переписал твой код. я хз че он должен делать =))
Он должен выдерать текст между <div> и </div>
как понял начало нужно написат парсер выдирающий из страницы нужное нам значение.
возбмём в пример яндэкс например нам нужно узнать значение id из этой строки (17 строка ответа)
</script><table id=head><tr> итд .....
и отправить запрос с этим значением запрос скажем запрос будет
http://www.yandex.ru/yandsearch?text=значение
use Socket;
$host="www.yandex.ru";
$port="80";
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$iaddr = inet_aton($host);
$paddr = sockaddr_in($port, $iaddr);
connect(SOCK, $paddr);
send (SOCK, "GET / HTTP/1.0\n\n", 0);
@data=<SOCK>; # ответ сервера
close(SOCK);
$fullitself=@data[17]; # считаем в какой строке ответа нужное нам значение она 17тая
@temp=split('table id=',$fullitself); # table id= это символы которые идут перед нашим значением
@semp=split('>',@temp[1]); # > а этот символ после нашего значения
$id = @semp[0]; # и так наше значение это переменная $id
connect(SOCK, $paddr);
send (SOCK, "GET /yandsearch?text=",$id," HTTP/1.0\n\n", 0); #отправляем запрос
@data2=<SOCK>;
close(SOCK);
# извените если гденибуть ошибся, не проверял
но вот если позиция строки постоянно меняется в ответе нужно будет ещё писать цикл который будет находить эту строку переберая каждую в этом массиве.
но намного легче это будет реализовать в пхп так как там есть специальная функция которая исчет ключ по значению array_search(" значение", $массив);
и к тому же поле "Город" там нефильтруется. активнаяя хсс
use Socket;
$host="www.yandex.ru";
$port="80";
$NEED_STR = "<table id=__STRING__>"; #Строка поиска
@parse_need = split("__STRING__",$NEED_STR);
#print @parse_need[1];
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$iaddr = inet_aton($host);
$paddr = sockaddr_in($port, $iaddr);
connect(SOCK, $paddr);
send (SOCK, "GET / HTTP/1.0\n\n", 0);
@data=<SOCK>;
close(SOCK);
$size = @data;
for ($i=0;$i<$size;$i++) {
$fullitself=@data[$i];
@temp=split(@parse_need[0],$fullitself);
@semp=split(@parse_need[1],@temp[1]);
$id = @semp[0];
}
if ($id) {
print "\n\n[!] FOUND STRING: '$id'\n\n";
}else {
print "\n\n[!] NOT FOUND\n\n";
}
Вот кстати небольшой тюнинг твоего скриптенга:
$NEED_STR = "<table id=__STRING__>";
Тут вводишь строку которую надо искать;
__STRING__ Отмечено место, где будет выдран текст для вставки в $id
Ах ну да еще ты хотел поиск по яндексу =)
Короче я сделал, чтобы выводил количество найденых результатов
Вот полный скрипт:
#!/usr/bin/perl
use Socket;
$host="www.yandex.ru";
$port="80";
$NEED_STR = "<table id=__STRING__>";
@parse_need = split("__STRING__",$NEED_STR);
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$iaddr = inet_aton($host);
$paddr = sockaddr_in($port, $iaddr);
connect(SOCK, $paddr);
send (SOCK, "GET / HTTP/1.0\n\n", 0);
@data=<SOCK>;
close(SOCK);
$size = @data;
for ($i=0;$i<$size;$i++) {
$fullitself=@data[$i];
@temp=split(@parse_need[0],$fullitself);
@semp=split(@parse_need[1],@temp[1]);
$id = @semp[0];
}
if ($id) {
print "\n\n[!] FOUND STRING: '$id'\n\n";
}else {
print "\n\n[!] NOT FOUND\n\n";
}
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
connect(SOCK, $paddr);
$header = "GET /yandsearch?text=".$id." HTTP/1.0\r\n"
."User-Agent: Opera/10.84 (Windows NT 5.1; U; ru)\r\n"
."Host: www.yandex.ru\r\n"
."Referer: http://yandex.ru/\r\n"
."Proxy-Connection: close\r\n"
."Content-type: application/x-www-form-urlencoded\r\n\r\n";
send (SOCK, $header, 0);
@data2=<SOCK>;
close(SOCK);
$size = @data2;
for ($i=0;$i<$size;$i++) {
$fullitself=@data2[$i];
$fullitself =~ s/(&.*?;)//egs;
if ($fullitself =~m/<b>[0-9]/) {
$fullitself =~/\b([0-9]+)/;
$result = $1;
}
}
if ($result) {
print "\n\n[!] YANDEX FOUND '$result' PAGES WITH '$id'\n\n";
}else {
print "\n\n[!] NOT FOUND\n\n";
}
Резултат скрипта с текущим содержанием:
C:\Perl\bin>perl scr\get.pl
[!] FOUND STRING: 'head'
[!] YANDEX FOUND '14878927' PAGES WITH 'head'
biophreak
24.02.2008, 01:40
use warnings;
use strict;
В начало скрипта :))) И правим его :)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot