Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Perl , post (https://forum.antichat.xyz/showthread.php?t=62328)

$p01nt 21.02.2008 14:52

Perl , post
 
хочу передать пост запрос на определенный сайт , он выглядит так :
name=тут имя & message= тут сообщение & id=тут индефикатор . id генерируется каждый раз разный , как его узнать ?

mr.The 21.02.2008 14:57

Найти алгоритм генерирования или выдирать из страницы.
ЗЫ. а флудить нехарашо.

diehard 21.02.2008 15:00

Цитата:

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";


bul.666 21.02.2008 15:03

Этот $id идентификатор сообщения? или капча?

$p01nt 21.02.2008 15:13

$id идентификатор сообщения

krypt3r 21.02.2008 15:14

Код:

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 - каптча, то нужно искать антикаптчу (если повезет, найдете)

$p01nt 21.02.2008 15:17

http://paste.org.ru/?s3rkdn кто может переделать скрипт так что бы он отправлял ? на примере проще гораздо просто :)

Isis 21.02.2008 15:20

Сначала обратиться к странице и узнать id
Найти его так:
PHP код:

<?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

$p01nt 21.02.2008 15:23

Isis можно тоже самое только на перл ?

Isis 21.02.2008 15:27

Цитата:

Сообщение от $p01nt
http://paste.org.ru/?s3rkdn кто может переделать скрипт так что бы он отправлял ? на примере проще гораздо просто :)

http://pastebin.x3k.ru/145

Не проверял

Isis 21.02.2008 15:29

Цитата:

Сообщение от $p01nt
Isis можно тоже самое только на перл ?

Нет))))Не знаю перл..увы

imajo.ati 21.02.2008 15:30

речь случайно не про гостевую на том сайте?

http://www.kyky.altnet.ru/guest/write.php
куда проще зафлудить, тем более там активная xss (но кавычки фильтрует)

$p01nt 21.02.2008 15:37

2all !! примеры , отрывки кода и т.д. и т.п. только на PERL !
imajo.ati да про ту , я знаю - просто использую как пример

imajo.ati 21.02.2008 16:00

именно для данного случая этот ид совсем не нужен. он не привязан ни к чему, а
потому это просто число. одно из чисел, которые сервер принимает за валидные.
проще сохранить форму на хард и наштамповать посты яваскриптом.

$p01nt 21.02.2008 17:40

у кого нибудь будет ответ который нужен мне ? как узнать id , плз пишите на примере , ЯП обязательно перл !

imajo.ati 21.02.2008 19:16

$p01nt
я ещё раз повторюсь. id постоянный он не генерируется. посмотри. 41c3c0244c353
сколько страницу не обновляй id будет один и тот же.
имхо неудачный пример для тренировки


а на твой вопрос уже ответил Isis, пост №8

bul.666 21.02.2008 19:19

$p01nt Стучи в Осику напишем

Piflit 21.02.2008 19:52

Цитата:

Сообщение от $p01nt
можно тоже самое только на перл ?

PHP код:

use LWP::UserAgent;
my $ua LWP::UserAgent->new();
my $res $ua->post($url
            [ 
'param1' => 'val1',
              
'param2' => 'val2', ],
              
'header1' => 'val1',
              
'header2' => 'val2',
        ); 

etc

bul.666 22.02.2008 20:15

Пиф он имел регулярку ^^

Php:
PHP код:

$site file_get_contents('http://www.antichat.ru'); 
preg_match("#<div>(.*)</div>#isU"$site$out); 
echo 
$out['1']; // Это твой id 

Perl: (Покажу напримера файла)
Сделал файл page.html с содержанием:
Код 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 скрипт:
PHP код:

#!/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>

Piflit 22.02.2008 22:03

Цитата:

Сообщение от bul.666
PHP код:

#!/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";
    }



PHP код:

#!/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); 

^^

bul.666 22.02.2008 22:33

Цитата:

^^
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

Piflit 22.02.2008 22:46

Цитата:

Сообщение от bul.666
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] бэкслеши '\' не отображаются, поэтому я заменил его словом. еще раз бугага

Spyder 22.02.2008 22:47

ыыы, backslash
\/

bul.666 22.02.2008 23:02

Пиф ты вообще свой код проверял? Меня очень сильно возбудила 8 линия ^^ +)

Piflit 22.02.2008 23:26

Цитата:

s/<A (.+)<(backslash)/A>//igs;
вот так =)
это если надо тереть линки.
я просто немного переписал твой код. я хз че он должен делать =))

Isis 23.02.2008 03:20

Код:

s/<A (.+)\\/A>//igs;

bul.666 23.02.2008 03:58

Он должен выдерать текст между <div> и </div>

ZET36 23.02.2008 04:49

как понял начало нужно написат парсер выдирающий из страницы нужное нам значение.
возбмём в пример яндэкс например нам нужно узнать значение 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(" значение", $массив);

ZET36 23.02.2008 05:04

и к тому же поле "Город" там нефильтруется. активнаяя хсс

bul.666 23.02.2008 08:55

Код:

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

bul.666 23.02.2008 09:29

Ах ну да еще ты хотел поиск по яндексу =)
Короче я сделал, чтобы выводил количество найденых результатов
Вот полный скрипт:
PHP код:

#!/usr/bin/perl 
use Socket;

$host="www.yandex.ru";
$port="80";

$NEED_STR "<table id=__STRING__>";

@
parse_need split("__STRING__",$NEED_STR);

socket(SOCKPF_INETSOCK_STREAMgetprotobyname('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(SOCKPF_INETSOCK_STREAMgetprotobyname('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$header0);

@
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;
В начало скрипта :))) И правим его :)


Время: 07:15