Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Написание бота для скандинавского аукциона 
:(
    Опции темы
Oleg_Ci
Дата 19.2.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: нет
Всего: 30



Здравствуйте.
Идея есть, написать бота для скандинавских аукционов.
Есть цель создать сайт на тематику этих аукционов, этого бота там выложу, может продать получиться.

Если кто-то ещё не в курсе что такое “скандинавский аукцион” делаю небольшое пояснение.
В интернете появились сайты на которых товары продаются следующим образом, выкладывается товар с нулевой стоимостью, есть таймер отсчитывающий секунды до нуля, есть кнопка с надписью “Сделать Ставку”, если кто-нибудь нажимает на эту кнопку (делает ставку), тогда таймер увеличивается на какое-то количество секунд, а стоимость этого товара повышается, на 25 копеек или на 10 коп. (стоимость ставки от 5 до 10 рублей), если уменьшающийся таймер достиг нуля, тогда сделавший последнюю ставку забирает товар по стоимости которая набежала за период “торгов”(обычно не более 10-20% от реальной стоимости).
Суть сего действия в том чтобы часами (днями) сидеть и нажимать кнопку ”сделать ставку”, и чтоб после тебя никто не нажал, тогда таймер достигнет нуля, и ты (последний нажавший) заберешь товар “по дешёвке” (Конечно не считая количества слитых денег на ставки). Проигравшим вроде отдают часть денег, помойму 75%(или 50%). Я в цифрах могу ошибаться.


Сейчас я имею следующие результаты:
Пишу бота на С++ MFC.
Создал проект с классом представления производным от CHtmlView, 
получил указатели на элементы (кнопку “сделать ставку”, строки с логином и суммой) такого вида
Код
CComQIPtr<IHTMLElement, &IID_IHTMLElement> m_pButton; // указатель на кнопку

Читаю(element->get_innerText(..)) логины, суммы, вычисляю время нажатия на кнопку, перемещаю указатель на кнопку для нажатия или фокус ввода на кнопку делаю для эмуляции нажатия клавиши Enter, “нажимаю” на кнопку при помощи api-функций
Код
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); // down + up
keybd_event(VK_RETURN,MapVirtualKeyA(VK_RETURN,0),0,0); //Enter


Бот работает (нажимает на кнопку делая ставки). 
В общем я пытался идти от javascript языка и таких конструкций:
Код
var idBut = document.getElementById("button_296"); // получаем элемент-кнопку
idBut.click(); // нажимаем на кнопку


Вопросы у меня такие: 
1) сервер аукциона думает что я подключаюсь через IExplorer ? 
2) главное, как могут моего бота обнаружить? Мне кажется, обнаружить, можно только через “язык JavaScript”, например написать функцию которая за поведением мыши наблюдать будет (перемещения указателя).

Интересно также ваше мнение о том, как правильно писать подобных ботов надо (чтоб необнаружили на сервере).

(И ещё один вопрос не в раздел С++ но может здесь кто знает - есть также бот написанный на JavaScript, как его засечь можно?)

PM MAIL   Вверх
MAKCim
Дата 20.2.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



Цитата(Oleg_Ci @  19.2.2009,  21:31 Найти цитируемый пост)
сервер аукциона думает что я подключаюсь через IExplorer ? 

смотря, какой MFC генерирует HTTP POST запрос  smile 


Цитата(Oleg_Ci @  19.2.2009,  21:31 Найти цитируемый пост)
Мне кажется, обнаружить, можно только через “язык JavaScript”, например написать функцию которая за поведением мыши наблюдать будет (перемещения указателя).

код JS выполняется на клиентской стороне
единственный способ его свзяи с сервером - генерация POST запросов
т. к код не закрыт, то его всегда можно "вскрыть" и дальше эмулировать нужные действия

Цитата(Oleg_Ci @  19.2.2009,  21:31 Найти цитируемый пост)
Интересно также ваше мнение о том, как правильно писать подобных ботов надо (чтоб необнаружили на сервере).

боты обычно палятся на IP при большой (нетипичной для юзера-человека) активности и "неправильным" (опять таки, нетипичным для обычного браузера) полям HTTP запроса

ps. я бы использовал cURL


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Oleg_Ci
Дата 20.2.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: нет
Всего: 30



Проверил свои браузеры и бота, вот таким штуками
Код

alert(
    navigator.userAgent + "\n" + 
    navigator.appCodeName + "\n" + 
    navigator.appName + "\n" + 
    navigator.appVersion + "\n" + 
    navigator.language + "\n" + 
    navigator.mimeTypes + "\n" + 
    navigator.plugins);
Код

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

ничего подозрительного, у бота и IExplorer всё одинаково показывает.
Как проверить HTTP POST запрос ненашол.

Цитата(MAKCim @  20.2.2009,  12:29 Найти цитируемый пост)
я бы использовал cURL 
К сожалению, я этот язык незнаю. smile 

PM MAIL   Вверх
MAKCim
Дата 20.2.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



Цитата(Oleg_Ci @  20.2.2009,  16:47 Найти цитируемый пост)
Как проверить HTTP POST запрос ненашол.

возьми какой-нибудь сниффер и посмотри исходящий пакет, который генерирует MFC


Цитата(Oleg_Ci @  20.2.2009,  16:47 Найти цитируемый пост)
К сожалению, я этот язык незнаю.

это не язык, а библиотека
google отменили?  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Oleg_Ci
Дата 20.2.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: нет
Всего: 30



Цитата(MAKCim @  20.2.2009,  20:50 Найти цитируемый пост)
это не язык, а библиотека
google отменили?

Я бегом, не разбираясь посмотрел в интернете про cURl мне показалось что это язык такой.
Если это библиотека, тогда попробую разобраться.
PM MAIL   Вверх
Oleg_Ci
Дата 20.2.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: нет
Всего: 30



При помощи сниффера HttpAnalyzerStdV3 (методы - Get, Post) проверял Бота, Opera, IExrlorer подключившись к аукциону.
Бот и IExplorer везде одинаковые у них параметры, только 1 параметр - Cookie-PHPSessId разные.

Значит сервер считает моего бота браузером IExrlorer. smile 

Спасибки за подсказки.

Добавлено через 6 минут и 16 секунд
 smile Если кто хочет может ещё написать об этом:
Цитата
Интересно также ваше мнение о том, как правильно писать подобных ботов надо

PM MAIL   Вверх
jonie
Дата 21.2.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



тыкать на кнопки имхо далеко неправильный способ, на что вам уже указывали.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Comm
Дата 22.2.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: -1
Всего: 1



Господин jonie правильно написал что не лучший способ тыкать на кнопки 
ИМХО Лучше обрабатывать данные минуя браузер,скопировать запрос проанализированный снифером(за исключением кукиксов или сессий)и отослать на сервер,тем самым мы исключаем запуск проверочного кода Java на стороне клиента(код вычисление бот или не бот тыкнул на кнопку).

Это сообщение отредактировал(а) Comm - 22.2.2009, 12:00


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
jonie
Дата 22.2.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Comm бред написал. Начиная от слов "или сессий" до конца, исключая собственно слово "отослать".


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Comm
Дата 22.2.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: -1
Всего: 1



jonie, у меня есть опыт программирования подобных ботов..если мы с вами разошлись во мнениях это не значит что я бред написал.. если у вас есть другой более хороший способ,опишите его а не цитируйте кто и на что кому то указывал. ИМХО.


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
jonie
Дата 23.2.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



1) java для подобных вещей используется крайней редко, используют всеже чаще JavaScript, и уж конечно java и javasctipt вооообще разные вещи, а те кто их "путает" мягко говоря некомпетентны;
2) определить кто нажал клавишу (при коде что выше) нельзя ну никак;
3) понятие сессия вам, вероятно, не очень знакомо. по обыкнокению она хранится на сервере и привязывается к клиенту по кукам;
4) куки слать надо - иначе ваша сессия будут потеряна.




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Oleg_Ci
Дата 23.2.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: нет
Всего: 30



Я тут разбирался с cURL  и вот чего получилось (правда к vs C++  прикрутить несмог,  так-то на PHP).
Вот так программа может “нажать на кнопку” (простейший вариант):
Код

$header = array("Host:www.gagen.ru",
"User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.6) Gecko/2009011913 
Firefox/3.0.6 (.NET CLR 3.5.30729)",
"Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language:ru,en-us;q=0.7,en;q=0.3", "Accept-Encoding:gzip,deflate",
"Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.7", "Keep-Alive:300",
"Connection:keep-alive", "If-Modified-Since:Sat, 1 Jan 2000 00:00:00 GMT",
"Referer:http://www.gagen.ru/list/demo",
"Cookie:check=fd129f1c80bbbbb4e48b571ba01d4ca7; 
PHPSESSID=bc56f59a91f13abe95a8c7c37f36ce5d; ga_login=myLogin; ga_password=myPassword"
);

    $ch = curl_init("http://www.gagen.ru/bid.php?auction=183226&r=0.243950442822667&h=");

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);    
    $result = curl_exec($ch);
    curl_close($ch);

Аналогично читает данные посылаемые с сервера (Кто куда нажал). Проверял на gagen.ru
Непонял зачем программа добавляе к URL случайное значение
(javascript:Math.random())(“…htm?r=0.11509138081176307”).

Кстати можно “нажимать на кнопку” введя в браузере подобную строку:
"http://www.gagen.ru/bid.php?auction=183226&r=0.653980322524627&h="

Цитата(jonie @  23.2.2009,  17:20 Найти цитируемый пост)
1) java для подобных вещей используется крайней редко, используют всеже чаще JavaScript,
У меня есть на JavaScript бот один, сам написал, работает на IExplorer + IE7Pro. Только я незнаю могутли его запалить как-нибудь.Правда он тоже на кнопки тыкает.

Это сообщение отредактировал(а) Oleg_Ci - 23.2.2009, 17:21
PM MAIL   Вверх
Comm
Дата 23.2.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: -1
Всего: 1



Под словом "Куки" я понимаю информацию оставленную сервером на клиентском компьютере.
Под словом "Сессия" я понимаю некоторый промежуток времени в котором Авторизация не нужна.

Именно с помощью скриптов Java можно вычислить реальный ай пи адрес конечного пользователя вне зависимости от того подключен ли он через прокси. Поэтому я и предположил что с помощью Java можно узнать ,искусственно или нет была нажата та или иная кнопка.


Это сообщение отредактировал(а) Comm - 23.2.2009, 17:53


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
jonie
Дата 24.2.2009, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Comm а давайте будем разговаривать, когда вы узнаете отличия Java от JavaScript и будете применять полученные знания? с помощью javascript вы мои ip адреса не узнаете.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Comm
Дата 24.2.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: -1
Всего: 1



Цитата

с помощью javascript вы мои ip адреса не узнаете. 

Как вариант,прочитать ключ найстройки из реестра.


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0884 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.