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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Социальные сети (https://forum.antichat.xyz/forumdisplay.php?f=133)
-   -   авторизация вконтакте (https://forum.antichat.xyz/showthread.php?t=111246)

rudra 15.03.2009 16:31

авторизация вконтакте
 
Начал писать скрипт для контакта, но тут же встал затык с авторизацией:
#!/usr/bin/python

import cgi
import urllib2
import Cookie
import md5

def main():
print "Content-type: text/html\n"

id = подставь id
name = подставь мыло
passw = подставь пароль
md5passw = md5.new(passw)

url = 'http://vkontakte.ru/id' + id
req = urllib2.Request(url)
req.add_header = ('User-Agent', "Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)")
req.add_header('Cookie', "remixpass=" + md5passw + ";remixemail" + name + ";remixmid" + id)
f = urllib2.urlopen(req)

print f.read()

main()

Благодарю за ценный совет.

Kaimi 15.03.2009 16:59

Без remixsid авторизоваться не получится, поэтому шли пост запрос к серверу на авторизацию

rudra 15.03.2009 18:53

типо такого? У меня не работает. Вываливает страницу с авторизацией, но значения не передает.
data = {'email':name, 'pass':passw}
params = urllib.urlencode(data)
url = 'http://vkontakte.ru/login.php'
req = urllib2.Request(url, params)
req.add_header = ('User-Agent', "Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)")
f = urllib2.urlopen(req)
print f.read()

rudra 16.03.2009 01:19

господа, кто-то может подсказать, что не так? Очень хочется разобраться.

Kaimi 16.03.2009 11:39

Цитата:

Вываливает страницу с авторизацией, но значения не передает
Может там капча появляется...

rudra 16.03.2009 11:49

Не. Капчи на логине не видел(((

Kaimi 16.03.2009 12:30

Видимо контакт отдает кукисы и редиректит. Скрипт кукисы отбрасывает и следует по редиректу, в результате получаешь ответ в виде страницы авторизации

rudra 16.03.2009 12:56

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

rudra 18.03.2009 23:21

Добрался сегодня вечером до скрипта. Нифига. Получаю куки от страницы login.php, скармливаю их же, но уже с постом авторизации. Так вообще страницу не грузит... токмо без кук.

Kaimi 18.03.2009 23:46

Какой пост авторизации после получения кукисов если ты кукисы с пост запроса должен получить и использовать их для перехода по внутренним страницам

rudra 18.03.2009 23:57

ща пробанем.
Странные какие-то куки:
remixlang=1; expires=Thu, 18-Mar-2010 20:02:53 GMT; path=/; domain=.vkontakte.ru, remixchk=5; expires=Sat, 20-Mar-2010 22:32:00 GMT; path=/; domain=.vkontakte.ru, remixchk=5; expires=Sat, 27-Mar-2010 22:27:53 GMT; path=/; domain=.vkontakte.ru, remixchk=5; expires=Fri, 12-Mar-2010 18:03:06 GMT; path=/; domain=.vkontakte.ru

rudra 19.03.2009 00:25

пипец. сменили пароль к моей анкете... Не могу авторизироваться. Хотя, анкеты есть

dvion 19.03.2009 01:00

rudra,
Шлёшь log + pass на login.php
Если всё окей - то он сделает редирект (302, location), тогда можешь забирать куку.
Если редирект не сделал, то либо капча, либо вообще лог+пасс кривой.

Теперь насчёт куки - remixsid уже месяца 3-4 обязательный параметр в куках, а вот всё остальное - мусор (ну, за исключением тех случаев, когда нужно стырить акк).
Так что можешь смело брать только remixsid, его вообще можно один раз получить и год пользоваться. Пока пасс, конечно, старый ;)

___
дополнение:

можно быстро чекать приготовленные куки очень быстрым способом:
обращаться к vkontakte.ru с кукой, после чего смотреть, идёт ли 302 с location или нет ;)
скорость + экономия + акк в он-лайн не вылетает, что тоже важно (при запросе vkontakte.ru с правильной кукой делается редирект на profile.php (он же idX)).

rudra 19.03.2009 01:07

ага. Принцип ясен. Я постом получаю с логин.пхп куку с remixsid и дальше скармливаю ее, например, странице своей анкеты.
Спасибо. Буду пробовать написать такое. Когда получится, выложу сорцы

gold-goblin 19.03.2009 01:08

http://forum.devisible.ru//showthread.php?t=297
посмотри тут мой бот. Только парсинг страници фигово реализовал (с ошибкой) и для аостинга надо куча данных

De-visible 19.03.2009 01:25

Скандалы интриги расследования??? ппц код в первом посте, я пока не в cgi, переделать труда не составит думаю.


PHP код:

def LoginsContact(nickname,password):
    
cookie cookielib.CookieJar() 
    
opener urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
    
urllib2.install_opener(opener)
    
headers = {"User-Agent" "Mozilla/4.0 (compatible; MSIE 5.5; WindowsNT)" }
    
data_s = {"email":nickname"pass":password}
    
send_data urllib.urlencode(data_s)
    
u_request urllib2.Request("http://vkontakte.ru/login.php"send_dataheaders)
    try:
        
vk str(urllib2.urlopen(u_request).info())
    
except:
        
cookie status "ERROR"
        
return cookiestatus
    
else:
        if 
"remixsid=deleted" in str(vk):
            
status "NO"
            
return cookiestatus
        
else:
            
status "YES"
            
return cookiestatus 


rudra 19.03.2009 01:33

жирок!

rudra 19.03.2009 16:59

добрался до отправки запроса на дружбу. Вот код хтмл: <li><a href="mail.php?act=write&to=2300774">Отправ ть сообщение</a></li><li><a href="friend.php?id=2300774">Друзья Женечки</a></li><li><a href="#add" onclick="addToFriend(2300774); return false;">Добавить в друзья</a></li>

Из этого сделал вывод, что запрос на авторизацию должен выглядеть вот так:
"http://vkontakte.ru/addToFriend(" + id + "); return false;"
Но в результате не видно вот той шняги, которую только недавно ввели и где есть кнопка "добавить"

wildshaman 19.03.2009 17:10

onclick="addToFriend(2300774); return false;"



Это е надо приписывтаь к урлу. Это javascript.

Смотри запрос, напрмиер, плагином live http headers для firefox

rudra 19.03.2009 22:20

интересный плагин. Вот какой результат:
1. Запрос при запросе на дружбу(который открывает окошко):
POST /friend.php act=a_add_form&fid=795186
2. Запрос при отправки формы из окошка:
POST /friend.php act=addFriend&fid=795186&h=1367d519&first_name=%D0 %AE%D0%BB%D0%B8%D1%8F&last_name=%D0%A0%D0%B0%D0%B5 %D0%B2%D1%81%D0%BA%D0%B0%D1%8F&sex=%D0%B0&message= Privet

Я думаю, что можно сразу использовать второй запрос. Получается:
/friend.php act=addFriend&fid=IDЖЕРТВЫ&h=1367d519&first_ name=ИМЯ&last_name=ФАМИЛИЯ&sex=ПОЛ&me ssage=МЕССАДЖ_КАМРАДУ
Но одна непонятка. Что это за число? 1367d519
Просто рандомное??? Не совсем рандомное. Каждому юзеру идет свое. И при повторе запроса оно одинаковое.

m0Hze 20.03.2009 01:49

Могу смело заявить что параметр sid в куках можно обходить,если знать как.Это просто к сведению.Скрипт работает уже больше полугода,и пока что все работает.Генерирую кукисы сам,ну а затем по мелочи.имха.

dvion 20.03.2009 02:28

m0Hze,
Sid - алгоритмизационный параметр?

rudra 20.03.2009 02:48

господа хакеры, объясните начинающему как такое может быть
addEx = re.compile(r'(\w+aeb)')
for m in re.finditer(addEx, response):
num = m.start()
print response[num-20:num+20]
Выдает: \" id=\"h\" value=\"b41aeb7a\">\n <
где b41aeb7a искомый номер

Теперь я знаю что искать. Беру поиск чтобы получить это число:
addEx = re.compile('(?<=value=\\\")\w+')
hits = addEx.findall(response)
print hits
Но в результате ничего не получаю!!! Это как?

inlanger 20.03.2009 11:51

А я так логинюсь:
PHP код:

#!/usr/bin/env python
# -*- coding: cp1251 -*-
import urllib
import urllib2

urllib2
.install_opener(urllib2.build_opener(urllib2.HTTPCookieProcessor))
params urllib.urlencode({'email' "login@login",'pass'"pass"})
request urllib2.Request('http://vkontakte.ru/login.php'params)
urllib2.urlopen(request)

cookie f.headers
print cookie 


rudra 20.03.2009 11:56

так это ж тоже самое...

inlanger 20.03.2009 12:17

мой вариант немного легче :)

rudra 20.03.2009 12:26

эт, конечно, хорошо. Но как достучаться до значения value? Из этой же формы id найти можно, кстати

inlanger 20.03.2009 13:18

PHP код:

'\" id=\"h\" value=\"b41aeb7a\">\n <'

S.replace('\" id=\"h\" value=\"''')
S.replace('\">\n <'''

я так делал, работало :)
в итоге у тебя в S остаётся только начение value

rudra 20.03.2009 13:23

не понял. Можешь объяснить? Есть в форме поле value. Найти его значение не могу. Значение id из той же формы находится. Для поиска значения юзаю:
addEx = re.compile('(?<=value=)\w+')
hits = addEx.findall(response)
print hits

ЗЫ: ща попробую

rudra 20.03.2009 13:27

response = str(urllib2.urlopen(req).read())
s = responce.replace('\" id=\"h\" value=\"', '')
s = s.replace('\">\n <', '')
print s

вот так вообще не работает

inlanger 20.03.2009 13:27

Если ты точно мужду чем находится искомое значение то тупо отбрось лишнее через replace(). Я делал замену текста на пустое значение, то есть - просто удалял лишнее.

rudra 20.03.2009 13:31

а! Так в том-то и беда! Я когда беру вот это значение из формы и вбиваю руками, оно его находит. А когда я беру имя поля, в котором должно быть это значение, то поле оказывается пустым.

_nic 21.03.2009 20:12

Такой вопрос ,может кто то сталкивался:Допустим шлю пост запрос через прокси получаю в ответ заголовок с куками.Так вот если я буду для ускорения процесса слать уже гет с нужными куками без прокси капчу будет выкидывать или нет?

dvion 21.03.2009 20:43

_nic,
Что в конечном итоге надобно получить? Если кука есть - то и логиниться не нужно. А следовательно, и GET делать не нужно. Такая вот логика, если вопрос рассматривать так, как он описан.

_nic 21.03.2009 21:49

Я все ясно написал.Шлю пост с мылом\паролем через прокси ,если верно получаю ответ с редиректом и куками.Потом шлю гет что бы получить инфу о анкете.Так вот если гет будет идти не через прокси,то будет капчу кидать после допустим 1000го раза, или нет?

rudra 22.03.2009 16:21

Вернемся к баранам. Все хорошо кроме одного. Не могу выципить из формы приглашения имя и фамилию, если они кириллицей написаны. Латиницей ок, а кириллицей йок.

Попробовал сделать вот так:
ru = lambda x: unicode(x,'cp1251')
test = ru(response[500:700])
addEx = re.compile('(?<!<\/a>)\w+')
hits = addEx.findall(test)
print hits

Все равно не видит русского имени

rudra 22.03.2009 16:40

заработало! Все ок. Приглашает.

хехе. Рано я обрадовался. Ошибка безопасности, нах.

rudra 22.03.2009 21:02

господа, нужна ваша помощь. Есть ссылочка на добавление в друзья. Когда ее выполняю просто в браузере, то все норм, когда отсылаю скриптом, то ошибка безопастности. Смотрел через файерфокс хттп_заголовки, но там ничего более не передается. Сегодня днем еще через скрипт все срабатывало. Кто может подсказать, что не верно я контакту скармливаю:

url = 'http://vkontakte.ru/friend.php?act=addFriend&fid=795186&h=1367d519&fir st_name=%D0%AE%D0%BB%D0%B8%D1%8F&last_name=%D0%A0% D0%B0%D0%B5%D0%B2%D1%81%D0%BA%D0%B0%D1%8F&sex=%D0% B0&message='
req = urllib2.Request(url)
req.add_header("Referer", "http://vkontakte.ru/search.php?q=%E4%EC%E8%F2%F0%E8%E9+FX&act=quick")
req.add_header("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5")
response = str(urllib2.urlopen(req).read())

rudra 22.03.2009 22:58

вот. Родил. Мой первый скрипт в веб-программинге. Работает :)
#!/usr/bin/python

import cgi
import urllib
import urllib2
import re
import cookielib
import time

def loginContact(nickname, password):
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(c ookie))
urllib2.install_opener(opener)
headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)'}
data = {"email":nickname, "pass":password}
sendData = urllib.urlencode(data)
req = urllib2.Request("http://vkontakte.ru/login.php", sendData, headers)

try:
vk = str(urllib2.urlopen(req).info())
except:
cookie = status = "ERROR"
return cookie, status
else:
if "remixsid=deleted" in str(vk):
status = "NO"
return cookie, status
else:
status = "YES"
return cookie, status

def openSearch():
searchURL = "http://vkontakte.ru/search.php?q=%EA%E8%E5%E2&act=quick"
req = urllib2.Request(searchURL)
response = str(urllib2.urlopen(req).read())
addEx = re.compile('(?<=addToFriend\()\w+')
ids = addEx.findall(response)

return ids

def addFriend(ids):
urlArray = []

for id in ids:
friendURL = "http://vkontakte.ru/friend.php?act=a_add_form&fid=" + id
urlArray.append(friendURL)

for urlNum in range(1, len(urlArray)):
searchURL = urlArray[urlNum]
req = urllib2.Request(searchURL)
response = str(urllib2.urlopen(req).read())

addEx = re.compile('(?<=\")\w+')
hits = addEx.findall(response[850:950])

for i in range(0, len(hits)):
if hits[i] == 'h' and hits[i + 1] == 'h':
value = hits[i + 2]
break

addEx = re.compile('(?<!<\/a>)\w+', re.UNICODE)
hits = addEx.findall(response[500:700])

for i in range(0, len(hits)):
if hits[i] == ids[urlNum]:
firstName = hits[i + 1]
lastName = hits[i + 2]
break

url = 'http://vkontakte.ru/friend.php?act=addFriend&fid=' + ids[urlNum] + '&h=' + value + '&first_name=' + firstName + '&last_name=' + lastName + '&sex=&message='
req = urllib2.Request(url)
urllib2.urlopen(req).read()

time.sleep(2.5)

return responce


def main():
print "Content-type: text/html\n"

inputValue = cgi.FieldStorage()
name = inputValue["name"].value
passw = inputValue["pass"].value
go = loginContact(name, passw)

if go[1] == 'YES':
addFriend(openSearch())

main()

termit 06.05.2009 13:09

авторизацию замудрили пипец, кто ни будь на пхп замутит?


Время: 07:29