Парсинг капчи

Статус
В этой теме нельзя размещать новые ответы.

Digwnews

Читатель
Заблокирован
Регистрация
1 Мар 2010
Сообщения
127
Реакции
23
  • Автор темы
  • Заблокирован
  • #1
Каким образом можно спарсить капчу с ?
Вся проблема в яваскрипте, который генерит эту капчу. Не понимаю, как вообще выдирать капчу с яваскриптом.
Вот яваскрипт:
Код:
<script language="JavaScript" type="text/javascript">
            var rndseed = new String(Math.random()); rndseed = rndseed.substring(2,11);
            var hex = "0123456789abcdef";
            var captchaSID = '';
            for (var i = 0 ; i < 32; i++) {
                var pos = Math.floor(Math.random() * 16);
                captchaSID += hex.substr(pos, 1);
            }
            document.write ('<' + 'img src="http://www.technobowl.ru//show_numimage.php?optionsSource=srv_twist_prevention&module=members&sid=' + captchaSID + '&rs='+rndseed+'" alt="Код" title="Введите этот код в следующем поле, буквы регистронезависимы" /><' + 'input type="hidden" name="captchaSID" value="' + captchaSID + '" />');
            eval("captcha_" + captchaSID + " = '';");
            var intervalId = setInterval("setCaptchaMD5Hash('" + captchaSID + "')", 300);
            eval("intervalId_" + captchaSID + " = intervalId;");
        </script>
Спасибо.
 
Каким образом можно спарсить капчу с *** скрытое содержание ***?
Вся проблема в яваскрипте, который генерит эту капчу. Не понимаю, как вообще выдирать капчу с яваскриптом.
Вот яваскрипт:
Код:
<script language="JavaScript" type="text/javascript">
            var rndseed = new String(Math.random()); rndseed = rndseed.substring(2,11);
            var hex = "0123456789abcdef";
            var captchaSID = '';
            for (var i = 0 ; i < 32; i++) {
                var pos = Math.floor(Math.random() * 16);
                captchaSID += hex.substr(pos, 1);
            }
            document.write ('<' + 'img src="http://www.technobowl.ru//show_numimage.php?optionsSource=srv_twist_prevention&module=members&sid=' + captchaSID + '&rs='+rndseed+'" alt="Код" title="Введите этот код в следующем поле, буквы регистронезависимы" /><' + 'input type="hidden" name="captchaSID" value="' + captchaSID + '" />');
            eval("captcha_" + captchaSID + " = '';");
            var intervalId = setInterval("setCaptchaMD5Hash('" + captchaSID + "')", 300);
            eval("intervalId_" + captchaSID + " = intervalId;");
        </script>
Спасибо.
урл капчи генерируется так


Где
rndseed - случайная строка из 9 цифр.
captchaSID - случайная строка из 32 символов. Можно сгенерировать как md5(mt_rand())
Но, вмнсте с формой передаётся ещё и значение captchaSID причём захешированное. Те надо передать значение md5(captchaSID)
 
  • Автор темы
  • Заблокирован
  • #3
урл капчи генерируется так
*** скрытое содержание ***
Где
rndseed - случайная строка из 9 цифр.
captchaSID - случайная строка из 32 символов. Можно сгенерировать как md5(mt_rand())
Но, вмнсте с формой передаётся ещё и значение captchaSID причём захешированное. Те надо передать значение md5(captchaSID)
Хм..
Что я делаю не так?
PHP:
<?php
  IF(!$_POST['cap'])
  {
  $captchaSID=mt_rand(150000000, 999999999);

$rnd=md5(mt_rand());

echo '<img src="http://www.technobowl.ru//show_numimage.php?optionsSource=srv_twist_prevention&module=members&sid='.$captchaSID.'&rs='.$rnd.'">';
  echo '<form method="post" action="new.php"><input type="text" name="cap"><input type="hidden" name="hash" value="'.md5($capthaSID).'"><input type="submit" value="enter">';
  }
  else
  {
  echo $_POST['hash'];
  $md=$_POST['hash'];
$post='modlink=members&action=add&create=1&username=newlog11&password=pass&password2=pass&email=jdhy@gmail.com&firstname=Alex&lastname=ddd&phone=&phone_work=&phone_cell=&icq=&address1=&city=&state=&country=ru&company=&companyweb=&photo=&forum_sign=SIGNATURE&captchaSID='.$md.'&captcha='.$_POST['cap'].'&protected_field=1977
';
$url = 'http://www.technobowl.ru/pages.php';
$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.technobowl.ru/members?action=add');
    
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
    $data = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);
    echo $data;
	}
?>
 
  • Автор темы
  • Заблокирован
  • #5
При обращении к капче в куки записывается информация, скорее всего сервер проверяет её.
И каким образом получить куки капчи?
Спарсить её с помощью курла с включёнными куками?

Добавлено через 40 минут
Так не получается..
PHP:
 <?php
  IF(!$_POST['cap'])
  {
  $captchaSID=mt_rand(150000000, 999999999);
//echo $captchaSID;
$rnd=md5(mt_rand());
//echo $rnd;
//echo md5($captchaSID);
//http://www.technobowl.ru/members?action=add
if( $curl = curl_init() ){

		// Задаем ссылку
		curl_setopt($curl,CURLOPT_URL,'http://www.technobowl.ru//show_numimage.php?optionsSource=srv_twist_prevention&module=members&sid='.$captchaSID.'&rs='.$rnd.'');
		// Скачанные данные не выводить поток
		curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cook.txt');
    curl_setopt($curl, CURLOPT_COOKIEFILE, 'cook.txt');
		// Скачиваем
		$out1 = curl_exec($curl);

		// Закрываем соединение
		curl_close($curl);
	}	
$handle = fopen("captcha.jpg", "w+");
$res=fwrite($handle, $out1);
echo '<img src="captcha.jpg">';
  echo '<form method="post" action="new.php"><input type="text" name="cap"><input type="hidden" name="hash" value="'.md5($capthaSID).'"><input type="submit" value="enter">';
  }
  else
  {
  echo $_POST['cap'];
  echo $_POST['hash'];
  $md=$_POST['hash'];
$post='modlink=members&action=add&create=1&username=newlog11&password=pass&password2=pass&email=jdhy@gmail.com&firstname=Alex&lastname=ddd&phone=&phone_work=&phone_cell=&icq=&address1=&city=&state=&country=ru&company=&companyweb=&photo=&forum_sign=SIGNATURE&captchaSID='.$md.'&captcha='.$_POST['cap'].'&protected_field=1977
';
$url = 'http://www.technobowl.ru/pages.php';
$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.technobowl.ru/members?action=add');
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cook.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cook.txt');
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
    $data = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);
    echo $data;
	}
?>
 
Значение сто пудов в сессию пишется и его ты никак не выдернишь... Клиенту только идентификатор передается...
 
  • Автор темы
  • Заблокирован
  • #7
И как же тогда обойти это?

---------- Post added at 18:07 ---------- Previous post was at 17:02 ----------

В общем если кто-то может написать такую регилку - пишите в ЛС, оплачу.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху