足球游戏_中国足彩网¥体育资讯$

python实现的登录和操作开心网脚本分享
来源:易贤网 阅读:1209 次 日期:2016-06-17 09:33:40
温馨提示:易贤网小编为您整理了“python实现的登录和操作开心网脚本分享”,方便广大网友查阅!

sns什么的我是一直无爱的,这次蛋疼写了个登录开心网(kaixin001)并向所有好友发送站内消息的脚本。

开心网在登录的时候做了一些处理,并不传原始密码,从js分析到的结果是:登录时会生成一个随机的key,然后用这个key和原始密码进行xxtea加密,把加密后的结果再进行sha1加密。之后post这个key以及加密后的密码进行登录验证。

以下是很简陋的脚本内容:

#coding: utf-8

开心网操作脚本

author:

version: 1.0

import re

import urllib

import urllib2

import random

import hashlib

import binascii

import cookielib

import simplejson

from xxtea import encrypt

login_url = http://www.***.com/login/login_api.php

login_key_url = http://www.***.com/

friend_list_url = http://www.***.com/interface/suggestfriend.php

message_send_url = http://www.***.com/msg/post.php

login_key_re = re.compile(rnew\senlogin\('(.*?)')

class loginerror(exception):

  登录失败抛出异常

class kaixin001user(object):

  操作kaixin001,现有方法:

    get_login_key - 获得用户访问登录页面时分配的加密key

    get_rpassword - 获得经过xxtea以及sha1加密后的密码

    login - 登录

    get_friends_list - 获得所有好友,返回字典格式

    send_messages_to_all - 给所有好友发消息

  def __init__(self, username, password):

    self.username = username

    self.password = password

    self.cj = cookielib.cookiejar()

    opener = urllib2.build_opener(urllib2.httpcookieprocessor(self.cj))

    opener.addheaders = [

      (user-agent, mozilla/5.0 (x11; u; freebsd i386; en-us; rv:1.9.1) gecko/20090704 firefox/3.5),

      (accept, */*),

      (host, www.kaixin001.com)

    ]

    urllib2.install_opener(opener)

  def get_login_key(self):

    获得登录时候的加密key

    _temp = urllib2.urlopen(login_key_url).read()

    key = login_key_re.search(_temp).group(1)

    return key

  def login(self):

    登录

    login_key = self.get_login_key()

    rpassword = self.get_rpassword(self.password, login_key)

    login_params = {

      'email': self.username,

      'encypt': login_key,

      'rpasswd': rpassword,

      'url': '/home/',

      'ver': '1'     

    }

    req = urllib2.request(login_url, urllib.urlencode(login_params), {

      referer: http://www.***.com/

    })

    result = urllib2.urlopen(req).read()

    # 登录失败

    if errno in result:

      raise loginerror(登录失败,请检查用户名或密码)

    print 用户 %s 登录成功! % self.username

    return 'ok'

  def get_friends_list(self):

    获得所有好友列表

    get_friends_params = {

      't': str(random.random()),

      'type': 'all',   

    }

    result = urllib2.urlopen(friend_list_url, urllib.urlencode(get_friends_params)).read()

    friends = simplejson.loads(result)

    print 你一共有 %s 位好友 % (len(friends) - 1)

    return friends

  def send_messages_to_all(self, message=''):

    给所有好友发消息

    friends = self.get_friends_list()

    send_params = {

      'attachment_cancel': '',

      'attachment_forwarding': '', 

      'attachment_random': '',

      'code': '',

      'content': message,

      'forward_thread': '',

      'rcode': '',

      'service': '0',

      'texttype': 'html',

      'uids': ,.join([str(f['uid']) for f in friends])  

    }

    result = urllib2.urlopen(message_send_url, urllib.urlencode(send_params))

    print result.geturl()

    print 消息发送成功

    return 'ok'

  def get_rpassword(self, password, key):

    获得加密后的密码

    xxtea_pw = binascii.b2a_hex( encrypt(password, key) )

    r_password = hashlib.sha1(xxtea_pw).hexdigest()

    return r_password

if __name__ == '__main__':

  kxu = kaixin001user(

    username = 'your_username',

    password = 'your_password'

  )

  kxu.login()

  kxu.send_messages_to_all(this message is send by python.)

这是脚本中需要用到的xxtea算法的python实现(xxtea.py):

import struct

_delta = 0x9e3779b9

def _long2str(v, w):

  n = (len(v) - 1) << 2

  if w:

    m = v[-1]

    if (m < n - 3) or (m > n): return ''

    n = m

  s = struct.pack('<%il' % len(v), *v)

  return s[0:n] if w else s

def _str2long(s, w):

  n = len(s)

  m = (4 - (n & 3) & 3) + n

  s = s.ljust(m, \0)

  v = list(struct.unpack('<%il' % (m >> 2), s))

  if w: v.append(n)

  return v

def encrypt(str, key):

  if str == '': return str

  v = _str2long(str, true)

  k = _str2long(key.ljust(16, \0), false)

  n = len(v) - 1

  z = v[n]

  y = v[0]

  sum = 0

  q = 6 + 52 // (n + 1)

  while q > 0:

    sum = (sum + _delta) & 0xffffffff

    e = sum >> 2 & 3

    for p in xrange(n):

      y = v[p + 1]

      v[p] = (v[p] + ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff

      z = v[p]

    y = v[0]

    v[n] = (v[n] + ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[n & 3 ^ e] ^ z))) & 0xffffffff

    z = v[n]

    q -= 1

  return _long2str(v, false)

def decrypt(str, key):

  if str == '': return str

  v = _str2long(str, false)

  k = _str2long(key.ljust(16, \0), false)

  n = len(v) - 1

  z = v[n]

  y = v[0]

  q = 6 + 52 // (n + 1)

  sum = (q * _delta) & 0xffffffff

  while (sum != 0):

    e = sum >> 2 & 3

    for p in xrange(n, 0, -1):

      z = v[p - 1]

      v[p] = (v[p] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff

      y = v[p]

    z = v[n]

    v[0] = (v[0] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[0 & 3 ^ e] ^ z))) & 0xffffffff

    y = v[0]

    sum = (sum - _delta) & 0xffffffff

  return _long2str(v, true)

if __name__ == __main__:

  print decrypt(encrypt('hello xxtea!', '16bytelongstring'), '16bytelongstring')

中国足彩网信息请查看脚本栏目
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 足球游戏_中国足彩网¥体育资讯$ 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:易贤网
云南网警报警专用图标