Python实现E-Mail收集插件实例教程


Posted in Python onFebruary 06, 2019

__import__函数

我们都知道import是导入模块的,但是其实import实际上是使用builtin函数import来工作的。在一些程序中,我们可以动态去调用函数,如果我们知道模块的名称(字符串)的时候,我们可以很方便的使用动态调用

def getfunctionbyname(module_name, function_name):
 module = __import__(module_name)
 return getattr(module, function_name)

通过这段代码,我们就可以简单调用一个模块的函数了

插件系统开发流程

一个插件系统运转工作,主要进行以下几个方面的操作

  • 获取插件,通过对一个目录里的.py文件扫描得到
  • 将插件目录加入到环境变量sys.path
  • 爬虫将扫描好的 URL 和网页源码传递给插件
  • 插件工作,工作完毕后将主动权还给扫描器

插件系统代码

在lib/core/plugin.py中创建一个spiderplus类,实现满足我们要求的代码

# __author__ = 'mathor'

import os
import sys
class spiderplus(object):
 def __init__(self, plugin, disallow = []):
  self.dir_exploit = []
  self.disallow = ['__init__']
  self.disallow.extend(disallow)
  self.plugin = os.getcwd() + '/' + plugin
  sys.path.append(plugin)
 
 def list_plusg(self):
  def filter_func(file):
   if not file.endswith('.py'):
    return False
   for disfile in self.disallow:
    if disfile in file:
     return False
   return True
  dir_exploit = filter(filter_func, os.listdir(self.plugin)
  return list(dir_exploit)
  
 def work(self, url, html):
  for _plugin in self.list_plusg():
   try:
    m = __import__(_plugin.split('.')[0])
    spider = getattr(m, 'spider')
    p = spider()
    s = p.run(url, html)
   except Exception as e:
    print (e)

work函数中需要传递 url,html,这个就是我们扫描器传给插件系统的,通过代码

spider = getattr(m, 'spider')
p = spider()
s = p.run(url, html)

我们定义插件必须使用class spider中的run方法调用

扫描器中调用插件

我们主要用爬虫调用插件,因为插件需要传递 url 和网页源码这两个参数,所以我们在爬虫获取到这两个的地方加入插件系统代码即可

首先打开Spider.py,在Spider.py文件开头加上

from lib.core import plugin

然后在文件的末尾加上

Python实现E-Mail收集插件实例教程

disallow = ['sqlcheck']
_plugin = plugin.spiderplus('script', disallow)
_plugin.work(_str['url'], _str['html'])

disallow是不允许的插件列表,为了方便测试,我们可以把 sqlcheck 填上

SQL 注入融入插件系统

其实非常简单,只需要修改script/sqlcheck.py为下面即可

关于Download模块,其实就是Downloader模块,把Downloader.py复制一份命名为Download.py就行

import re, random
from lib.core import Download

class spider:
 def run(self, url, html):
  if (not url.find("?")): # Pseudo-static page
   return false;
  Downloader = Download.Downloader()
  BOOLEAN_TESTS = (" AND %d=%d", " OR NOT (%d=%d)")
  DBMS_ERRORS = {
   # regular expressions used for DBMS recognition based on error message response
   "MySQL": (r"SQL syntax.*MySQL", r"Warning.*mysql_.*", r"valid MySQL result", r"MySqlClient\."),
   "PostgreSQL": (r"PostgreSQL.*ERROR", r"Warning.*\Wpg_.*", r"valid PostgreSQL result", r"Npgsql\."),
   "Microsoft SQL Server": (r"Driver.* SQL[\-\_\ ]*Server", r"OLE DB.* SQL Server", r"(\W|\A)SQL Server.*Driver", r"Warning.*mssql_.*", r"(\W|\A)SQL Server.*[0-9a-fA-F]{8}", r"(?s)Exception.*\WSystem\.Data\.SqlClient\.", r"(?s)Exception.*\WRoadhouse\.Cms\."),
   "Microsoft Access": (r"Microsoft Access Driver", r"JET Database Engine", r"Access Database Engine"),
   "Oracle": (r"\bORA-[0-9][0-9][0-9][0-9]", r"Oracle error", r"Oracle.*Driver", r"Warning.*\Woci_.*", r"Warning.*\Wora_.*"),
   "IBM DB2": (r"CLI Driver.*DB2", r"DB2 SQL error", r"\bdb2_\w+\("),
   "SQLite": (r"SQLite/JDBCDriver", r"SQLite.Exception", r"System.Data.SQLite.SQLiteException", r"Warning.*sqlite_.*", r"Warning.*SQLite3::", r"\[SQLITE_ERROR\]"),
   "Sybase": (r"(?i)Warning.*sybase.*", r"Sybase message", r"Sybase.*Server message.*"),
  }
  _url = url + "%29%28%22%27"
  _content = Downloader.get(_url)
  for (dbms, regex) in ((dbms, regex) for dbms in DBMS_ERRORS for regex in DBMS_ERRORS[dbms]):
   if (re.search(regex,_content)):
    return True
  content = {}
  content['origin'] = Downloader.get(_url)
  for test_payload in BOOLEAN_TESTS:
   # Right Page
   RANDINT = random.randint(1, 255)
   _url = url + test_payload % (RANDINT, RANDINT)
   content["true"] = Downloader.get(_url)
   _url = url + test_payload % (RANDINT, RANDINT + 1)
   content["false"] = Downloader.get(_url)
   if content["origin"] == content["true"] != content["false"]:
    return "sql found: %" % url

E-Mail 搜索插件

最后一个简单的例子,搜索网页中的 E-Mail,因为插件系统会传递网页源码,我们用一个正则表达式([\w-]+@[\w-]+\.[\w-]+)+搜索出所有的邮件。创建script/email_check.py文件

# __author__ = 'mathor'

import re
class spider():
 def run(self, url, html):
  #print(html)
  pattern = re.compile(r'([\w-]+@[\w-]+\.[\w-]+)+')
  email_list = re.findall(pattern, html)
  if (email_list):
   print(email_list)
   return True
  return False

运行python w8ay.py

Python实现E-Mail收集插件实例教程

可以看到网页中的邮箱都被采集到了

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中Collection的使用小技巧
Aug 18 Python
浅析Python中的多重继承
Apr 28 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
Feb 01 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
python实现随机梯度下降法
Mar 24 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
深入理解python多线程编程
Apr 18 Python
python使用glob检索文件的操作
May 20 Python
python 使用pandas读取csv文件的方法
Dec 24 Python
使用TensorFlow实现二分类的方法示例
Feb 05 #Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 #Python
在Python 字典中一键对应多个值的实例
Feb 03 #Python
Django csrf 两种方法设置form的实例
Feb 03 #Python
解决django前后端分离csrf验证的问题
Feb 03 #Python
Python利用heapq实现一个优先级队列的方法
Feb 03 #Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 #Python
You might like
php实现的双向队列类实例
2014/09/24 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
Vue2.0生命周期的理解
2018/08/20 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
Python实现FM算法解析
2019/06/18 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
Python wordcloud库安装方法总结
2020/12/31 Python
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
关于递归的一道.NET面试题
2013/05/12 面试题
竞选学习委员演讲稿
2014/09/01 职场文书
农村党员对照检查材料
2014/09/24 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
第一节英语课开场白
2015/06/01 职场文书
小型婚礼主持词
2015/06/30 职场文书
python中subplot大小的设置步骤
2021/06/28 Python