之前的

帖子

加入了 @

sdc1992 提供的登录部分

根据邮箱和密码,获取企业通讯录

运行后会生成两个文件

一个只包含邮箱,可以用于后续爆破

一个为部门名称 和 部门下的员工邮箱的树形结构,可以方便找到特定部门的邮箱,比如开发和运维

类似这样:

----人事部----

张三  zhangsan@domain.com

----技术部----

李四  lisi@domain.com

王五  wangwu@domain.com

requirements.txt

requests>=2.9.1

rsa

argparse

pyopenssl

ndg-httpsclient

pyasn1

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Author: blinking.yan

# @Date: 2016-03-03 21:56:26

# @Last Modified by: blinking.yan

# @Last Modified time: 2016-03-03 22:45:18

# @Description: 获取腾讯企业邮箱通讯录

import requests

import re

import rsa

import sys

import base64

import time

import argparse

reload(sys)

sys.setdefaultencoding('utf8')

# 打印部门人员信息

def print_tree(id, department_infos, level, staff_infors, f):

prefix = '----' * level

text = prefix + department_infos[id]['name'] + prefix

print text

f.write(text + '\n')

for key, value in department_infos.items():

if value['pid'] == id:

print_tree(

value['id'], department_infos, level + 1, staff_infors, f)

prefix = ' ' * level

for staff in staff_infors:

if staff['pid'] == id:

text = prefix + staff['name'] + ' ' + staff['alias']

print text

f.write(text + '\n')

# 提取RSA算法的公钥

def get_public_key(content):

regexp = r'var\s*PublicKey\s*=\s*"(\w+?)";'

results = re.findall(regexp, content)

if results:

return results[0]

# 获取ts参数

def get_ts(content):

regexp = r'PublicTs\s*=\s*"([0-9]+)"'

results = re.findall(regexp, content)

if results:

return results[0]

# 计算p参数

def get_p(public_key, password, ts):

public_key = rsa.PublicKey(int(public_key, 16), 65537)

res_tmp = rsa.encrypt(

'{password}\n{ts}\n'.format(password=password, ts=ts), public_key)

return base64.b64encode(res_tmp)

def msg():

return 'python get_tencent_exmail_contacts.py -u name@domain.com -p passw0rd'

if __name__ == "__main__":

description = "获取腾讯企业邮箱通讯录"

parser = argparse.ArgumentParser(description=description, usage=msg())

parser.add_argument(

"-u", "--email", required=True, dest="email", help="邮箱名")

parser.add_argument(

"-p", "--password", required=True, dest="password", help="邮箱密码")

parser.add_argument(

"-l", "--limit", required=False, dest="limit", default=10000, help="通讯录条数")

parser.add_argument(

"-e", "--efile", required=False, dest="emailfile", default="emails.txt", help="邮箱保存文件")

parser.add_argument(

"-d", "--dfile", required=False, dest="departfile", default="departments.txt", help="部门信息保存文件")

args = parser.parse_args()

email = args.email

password = args.password

limit = args.limit

emailfile = args.emailfile

departfile = args.departfile

session = requests.Session()

headers = {'Connection': 'keep-alive',

'Cache-Control': 'max-age=0',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Upgrade-Insecure-Requests': 1,

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',

'DNT': 1,

'Accept-Encoding': 'gzip, deflate, sdch',

'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4',

}

resp = session.get('http://exmail.qq.com/login', headers=headers)

content = resp.content

public_key = get_public_key(content)

ts = get_ts(content)

p = get_p(public_key, password, ts)

# print ts

# print public_key

# print p

uin = email.split('@')[0]

domain = email.split('@')[1]

# print uin

# print domain

post_data = {}

post_data['sid'] = ''

post_data['firstlogin'] = False

post_data['domain'] = domain

post_data['aliastype'] = 'other'

post_data['errtemplate'] = 'dm_loginpage'

post_data['first_step'] = ''

post_data['buy_amount'] = ''

post_data['year'] = ''

post_data['company_name'] = ''

post_data['is_get_dp_coupon'] = ''

post_data['starttime'] = int(time.time() * 1000)

post_data['redirecturl'] = ''

post_data['f'] = 'biz'

post_data['uin'] = uin

post_data['p'] = p

post_data['delegate_url'] = ''

post_data['ts'] = ts

post_data['from'] = ''

post_data['ppp'] = ''

post_data['chg'] = 0

post_data['loginentry'] = 3

post_data['s'] = ''

post_data['dmtype'] = 'bizmail'

post_data['fun'] = ''

post_data['inputuin'] = email

post_data['verifycode'] = ''

headers = {'Content-Type': 'application/x-www-form-urlencoded'}

url = 'https://exmail.qq.com/cgi-bin/login'

resp = session.post(url, headers=headers, data=post_data)

regexp = r'sid=(.*?)"'

sid = re.findall(regexp, resp.content)[0]

url = 'http://exmail.qq.com/cgi-bin/laddr_biz?action=show_party_list&sid={sid}&t=contact&view=biz'

resp = session.get(url.format(sid=sid))

text = resp.text

regexp = r'{id:"(\S*?)", pid:"(\S*?)", name:"(\S*?)", order:"(\S*?)"}'

results = re.findall(regexp, text)

department_ids = []

department_infor = dict()

root_department = None

for item in results:

department_ids.append(item[0])

department = dict(id=item[0], pid=item[1], name=item[2], order=item[3])

department_infor[item[0]] = department

if item[1] == 0 or item[1] == '0':

root_department = department

regexp = r'{uin:"(\S*?)",pid:"(\S*?)",name:"(\S*?)",alias:"(\S*?)",sex:"(\S*?)",pos:"(\S*?)",tel:"(\S*?)",birth:"(\S*?)",slave_alias:"(\S*?)",department:"(\S*?)",mobile:"(\S*?)"}'

all_emails = []

staff_infors = []

for department_id in department_ids:

url = 'http://exmail.qq.com/cgi-bin/laddr_biz?t=memtree&limit={limit}&partyid={partyid}&action=show_party&sid={sid}'

resp = session.get(

url.format(limit=limit, sid=sid, partyid=department_id))

text = resp.text

results = re.findall(regexp, text)

for item in results:

all_emails.append(item[3])

print item[3]

staff = dict(uin=item[0], pid=item[1], name=item[2], alias=item[3], sex=item[4], pos=item[

5], tel=item[6], birth=item[7], slave_alias=item[8], department=item[9], mobile=item[10])

staff_infors.append(staff)

with open(emailfile, 'w') as f:

for item in all_emails:

f.write(item + '\n')

with open(departfile, 'w') as f:

print_tree(root_department['id'], department_infor, 0, staff_infors, f)

print("total email count: %i" % len(all_emails))

print("total department count: %i" % len(department_ids))

python程序下载腾讯企业邮箱附件_获取腾讯企业邮箱通讯录python脚本(带登录功能)...相关推荐

  1. python程序中的空格和空行可有可无_为了让代码更加紧凑,编写Python程序时应尽量避免加入空格和空行。_学小易找答案...

    [判断题]Python 代码的注释只有一种方式,那就是使用#符号. [判断题]为了让代码更加紧凑,编写Python程序时应尽量避免加入空格和空行. [多选题]脱水后的污泥可采取( )方法进行最终处理. ...

  2. 公司企业邮箱附件多大?免费企业邮箱附件有限制吗?

    相比免费邮箱,企业邮箱的一大优势是,可以发送合同.发票.图纸等大附件,存储时间长.TOM企业邮箱的大附件功能在新版做了进一步的优化,下面小编具体分享下~ 公司企业邮箱附件大小 附件分为普通附件和超大附 ...

  3. python程序下载大量天文学数据

    python程序下载天文学数据 文件下载模块 使用正则表达式检索下载链接 接下来就是批量下载了 总程序代码 文件下载模块 首先编写一个专门用于下载文件的函数 def downloadFile(name ...

  4. python打折简单程序每满_丰满Python程序设计基础【实境编程】_高校邦_答案

    丰满Python程序设计基础[实境编程]_高校邦_答案h779 丰满Python程序设计基础[实境编程]_高校邦_答案 关注公众号{帅搜}即可查询答案 支持:大学网课,智慧树,知到,超星,尔雅,学习通 ...

  5. 腾讯视频下载的视频怎么导出来_手机腾讯视频怎么缓存视频电影

    本文小编给大家分享的是腾讯视频下载的视频怎么导出来_手机腾讯视频怎么缓存视频电影.相比其它的视频客户端,腾讯视频的多维度筛选,大数据比对,更有利于用户发现和推荐自己喜爱的影视剧内容.腾讯视频播放器推荐 ...

  6. python程序下载腾讯企业邮箱附件_python 发送邮件 QQ+腾讯企业邮箱

    一.使用QQ邮箱或者腾讯企业邮箱 python 发送邮件属于网络编程方向的,在工作中,我需要经常用邮件来检测我的程序运行状况.使用起来十分方便,这里我就用腾讯企业邮箱作为我的收发邮箱来使用. 使用py ...

  7. python下载邮箱附件_基于Python3 下载邮箱附件,并解压到指定文件夹

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -*- encoding: gbk -*- # 目前只测试过网易163邮箱,qq邮箱时间格式与163有 ...

  8. python程序下载_Python 基础起步 (二) 5分钟内下载环境并运行第一个Python 程序

    下载并安装Anaconda 好啦,作为小白,我们的第一步是安装能够运行Python的环境,所谓环境就是指我们要安装一个软件,之后就能用它来写Python代码 (觉得我对环境解释特别智障的请绕行,我们是 ...

  9. python程序是由一系列代码组成的_以下选项中,对程序的描述错误的是() (6.0分)_学小易找答案...

    [单选题]绘制图形可以使用()python函数库? (8.0分) [简答题]计算机的定义是什么?它有哪两个显著特点? [单选题]1. Python 语言是由哪个人创造的? [单选题]承诺的效力是 [单 ...

最新文章

  1. pix2pix, pix2pixHD, vid2vid
  2. 5获取http请求头_获取托管者发送http请求报文的解决方案
  3. python3源码剖析_T-SNE源码剖析(python版)
  4. 学妹问我:怎么从网页下载所有图片?我答:天机不可泄露
  5. Xilinx IOdelay--Virtex-5介绍
  6. 强制禁用gitlab的双因子认证:Two-Factor Authentication
  7. github的使用教程
  8. threadsafe_Agrona的Threadsafe堆缓冲区
  9. web大作业介绍自己的家乡_襄阳市恒大名都小学2018—2019年度寒假实践作业
  10. (18)FPGA面试题查找表的原理与结构
  11. python获取键盘按键键值_python获取键盘输的值
  12. WCF调试异常信息:找不到类型“”,在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/serviceHosting...
  13. vue.js简单登录界面访问mysql_Vuejs实战项目:登陆页面
  14. 【HDU 5869】Different GCD Subarray Query【区间不同 gcd 个数】
  15. 【软件测评】屏幕标注软件
  16. STM32+FreeRtos 移植letter-shell工具
  17. 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客
  18. ubuntu 16.04 安装谷歌拼音输入法
  19. 下载百度网盘资源不限速的两种方法
  20. 鼠标左键双击计算机打开属性,鼠标左键双击变成属性怎么解决?

热门文章

  1. 直流有刷伺服电机驱动器
  2. 6个让您获得更佳的移动分析体验的提示
  3. 微信小程序搜索功能系列 一套全
  4. adb无线连接控制android手机
  5. 令代码停止_那些令人困惑的灯泡代码是什么意思?
  6. python字符串前面u、r、b含义以及str、bytes互转
  7. 深度学习如何参加阿里的天池比赛和进入天池实验室
  8. 一个可以免费下载表情包的小程序
  9. Pubmedy的使用教程
  10. 三种网线的RJ-45接头制作法图解(转)