python实现web邮箱扫描的示例(附源码)


Posted in Python onMarch 30, 2021

信息收集是进行渗透测试的关键部分,掌握大量的信息对于攻击者来说是一件非常重要的事情,比如,我们知道一个服务器的版本信息,我们就可以利用该服务器框架的相关漏洞对该服务器进行测试。那么如果我们掌握了该服务器的管理员的邮箱地址,我们就可以展开一个钓鱼攻击。所以,对web站点进行邮箱扫描,是进行钓鱼攻击的一种前提条件。

下面,我们利用python脚本来实现一个web站点的邮箱扫描爬取。目的是在实现这个脚本的过程中对python进行学习

最后有完整代码

基本思路

  1. 我们向工具传入目标站点之后,首先要对输入进行一个基本的检查和分析,因为我们会可能会传入各种样式的地址,比如http://www.xxxx.com/、http://www.xxxx.com/123/456/789.html等等,我们需要对其进行简单的拆分,以便于后面链接的爬取
  2. 通过requests库爬取目标地址的内容,并且在内容通过正则表达式中寻找邮箱地址
  3. 查找爬取的网站中的超链接,通过这些超链接我们就能进入到该站点的另外一个页面继续寻找我们想要的邮箱地址。
  4. 开工:

该脚本所需要的一些库

from bs4 import BeautifulSoup #BeautifulSoup最主要的功能是从网页抓取数据,Beautiful Soup自动将输入文档转换为Unicode编码
import requests #requests是python实现的最简单易用的HTTP库
import requests.exceptions
import urllib.parse
from collections import deque #deque 是一个双端队列, 如果要经常从两端append 的数据, 选择这个数据结构就比较好了, 如果要实现随机访问,不建议用这个,请用列表. 
import re #是一个正则表达式的库

获取扫描目标

user_url=str(input('[+] Enter Target URL to Scan:'))
urls =deque([user_url]) #把目标地址放入deque对象列表

scraped_urls= set()#set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
emails = set()

对网页进行邮箱地址爬取(100条)

首先要对目标地址进行分析,拆分目标地址的协议,域名以及路径。然后利用requests的get方法访问网页,通过正则表达式过滤出是邮箱地址的内容。'[a-z0-0.-+]+@[a-z0-9.-+]+.[a-z]+',符合邮箱格式的内容就进行收录。

count=0
try:
  while len(urls):  #如果urls有长度的话进行循环
    count += 1		#添加计数器来记录爬取链接的条数 
    if count ==101:
      break
    url = urls.popleft() #popleft()会删除urls里左边第一条数据并传给url
    scraped_urls.add(url)

    parts = urllib.parse.urlsplit(url) # 打印 parts会显示:SplitResult(scheme='http', netloc='www.baidu.com', path='', query='', fragment='')
    base_url = '{0.scheme}://{0.netloc}'.format(parts)#scheme:协议;netloc:域名 

    path = url[:url.rfind('/')+1] if '/' in parts.path else url#提取路径
    print('[%d] Processing %s' % (count,url))
   
    try:
      head = {'User-Agent':"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11"}
      response = requests.get(url,headers = head)
    except(requests.exceptions.MissingSchema,requests.exceptions.ConnectionError):
      continue
    new_emails = set(re.findall(r'[a-z0-0\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+', response.text ,re.I))#通过正则表达式从获取的网页中提取邮箱,re.I表示忽略大小写
    emails.update(new_emails)#将获取的邮箱地址存在emalis中。

通过锚点进入下一网页继续搜索

soup = BeautifulSoup(response.text, features='lxml')

    for anchor in soup.find_all('a'):  #寻找锚点。在html中,<a>标签代表一个超链接,herf属性就是链接地址
      link = anchor.attrs['href'] if 'href' in anchor.attrs else '' #如果,我们找到一个超链接标签,并且该标签有herf属性,那么herf后面的地址就是我们需要锚点链接。
      if link.startswith('/'):#如果该链接以/开头,那它只是一个路径,我们就需要加上协议和域名,base_url就是刚才分离出来的协议+域名
        link = base_url + link
      elif not link.startswith('http'):#如果不是以/和http开头的话,就要加上路径。
        link =path + link
      if not link in urls and not link in scraped_urls:#如果该链接在之前没还有被收录的话,就把该链接进行收录。
        urls.append(link)
except KeyboardInterrupt:
  print('[+] Closing')

for mail in emails:
  print(mail)

完整代码

from bs4 import BeautifulSoup
import requests
import requests.exceptions
import urllib.parse
from collections import deque
import re

user_url=str(input('[+] Enter Target URL to Scan:'))
urls =deque([user_url])

scraped_urls= set()
emails = set()


count=0
try:
  while len(urls):
    count += 1
    if count ==100:
      break
    url = urls.popleft()
    scraped_urls.add(url)

    parts = urllib.parse.urlsplit(url)
    base_url = '{0.scheme}://{0.netloc}'.format(parts)

    path = url[:url.rfind('/')+1] if '/' in parts.path else url

    print('[%d] Processing %s' % (count,url))
    try:
      head = {'User-Agent':"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11"}
      response = requests.get(url,headers = head)
    except(requests.exceptions.MissingSchema,requests.exceptions.ConnectionError):
      continue
    new_emails = set(re.findall(r'[a-z0-0\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+', response.text ,re.I))
    emails.update(new_emails)

    soup = BeautifulSoup(response.text, features='lxml')

    for anchor in soup.find_all('a'):
      link = anchor.attrs['href'] if 'href' in anchor.attrs else ''
      if link.startswith('/'):
        link = base_url + link
      elif not link.startswith('http'):
        link =path + link
      if not link in urls and not link in scraped_urls:
        urls.append(link)
except KeyboardInterrupt:
  print('[+] Closing')

for mail in emails:
  print(mail)

实验………………

python实现web邮箱扫描的示例(附源码)

以上就是python实现web邮箱扫描的示例(附源码)的详细内容,更多关于python web邮箱扫描的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中用post、get方式提交数据的方法示例
Sep 22 Python
Django admin美化插件suit使用示例
Dec 12 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
浅谈python正则的常用方法 覆盖范围70%以上
Mar 14 Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 Python
Python集合操作方法详解
Feb 09 Python
Python PyQt5整理介绍
Apr 01 Python
Python select及selectors模块概念用法详解
Jun 22 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
python函数指定默认值的实例讲解
Mar 29 #Python
pytest进阶教程之fixture函数详解
python中pandas.read_csv()函数的深入讲解
Mar 29 #Python
python编写函数注意事项总结
Mar 29 #Python
python基于tkinter制作无损音乐下载工具
Python requests库参数提交的注意事项总结
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
You might like
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
Node.js assert断言原理与用法分析
2019/01/04 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
2020/06/11 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
Python爬取读者并制作成PDF
2015/03/10 Python
Python中分数的相关使用教程
2015/03/30 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
Python提取频域特征知识点浅析
2019/03/04 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
九年级科学教学反思
2014/01/29 职场文书
应届毕业生简历自我评价
2014/01/31 职场文书
新人入职感言
2015/07/31 职场文书
预备党员表决心的话
2015/09/22 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书