AutoUp v0.1b для форума «Амит»


Внимание! Информация предоставлена исключительно с целью ознакомления. За использование материалов статьи в противозаконных целях автор ответственности не несет.

Сегодня я рассмотрю возможности python, а точнее его встроенных библиотек urllib и urllib2. Напишем скрипт, который после авторизации на форуме сможет с определенной частотой  постить сообщения в выбранной ветке. На операционный стол ложится Благовещенский форум Амит ру ( powered by miniBB ). Щипцы-зажимы. Для разработки python бота нам понадобится:

  • python 2.*
  • PyScripter
  • сетевой анализатор Wireshark

и немного времени.

Исследуем форум Амит (Благовещенск)

Запускаем Wireshark, настраиваем  фильтр только на http и логинимся на любимый форум. И вот что он нам показывает:

(в POST-запросе передается логин и пароль)

python под windows(после отправки логина и пароля осуществляется редирект на /forum/index.php? )

Из-за использования в механизме аутентификации кукисов, придется использовать модуль cookielib. В прошлом посте я не использовал прокси. Исправляюсь.

Исходный код апалки для амита

#импортируем сетевые библиотеки
import urllib
import urllib2
import cookielib

#начальные условия
message = u'up'
user = u'login'
pasw = u'password'
prox = '94.127.88.46:3128'

#номера форума и топика
#1 - это "Общий раздел"
forum = '1'
topic = '41298'
host = 'http://www2.amit.ru/forum/index.php?'

#Заголовочная информация скопированная из снифера
#со вставленными логином и паролем
headers = { 'User-Agent' : 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.00',
'Host' : 'www2.amit.ru',
'Accept' : 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1',
'Accept-Language' : 'ru-RU,ru;q=0.9,en;q=0.8',
'Accept-Charset' : 'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1',
'Referer' : 'http://www2.amit.ru/forum/index.php',
'Connection' : 'Keep-Alive, TE',
'TE' : 'TE: deflate, gzip, chunked, identity, trailers' }
post = urllib.urlencode({ 'user_usr' : user.encode('cp1251'), 'user_pwd' : pasw.encode('cp1251'), 'mode' : 'login', 'queryStr' : '', 'pagetype' : 'index' })

#делаем указатель на прокси-сервер
proxy = urllib2.ProxyHandler({'http' : prox})
#Создаем кукис-агент
CookieJar = cookielib.CookieJar()
#создаем открывалку страниц с уже готовыми кукис-агентом и указателем прокси сервера
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(CookieJar), proxy)

#Осуществляем аутентификацию
conn = urllib2.Request(host, post, headers)
data = opener.open(conn)

#теперь в кукис-агент помещена информация о отм что мы залогинены

#описываем процедуру отправления сообщения
def posting(message, forum, topic):
    #формируем запрос с текстом сообщения
    post = urllib.urlencode({ 'postText': message.encode('cp1251'), 'action' : 'pthread', 'forum' : forum, 'topic' : topic })
    conn = urllib2.Request(host, post, headers)
    #отправляем запрос
    data = opener.open(conn)

#вызываем процедуру
posting(message, forum, topic)

P.S. Используя модуль time, данный скрипт легко модифицировать для автоматического апанья в рекламном.

python cookie

Для удаления сообщений (на Амите в течении получаса) необходимо в POST-запросе передавать значение установленных cookies. Доступ к ним можно получить следующим образом (после авторизации, естественно).

for cook in enumerate(CookieJar):
    print cook[1].name, cook[1].value

, , ,



  1. #1 by toly on 7 Июнь 2010 - 1:27

    По-позже можно и скринкаст снять…

(никто не узнает)