通过web.py搭建基础HTTP蜜罐

honeypot.py:

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

'基于webpy的http蜜罐。根据需求开放不同的监听端口。'

__author__ = 'GoGoCaptain'

import web
import sys
import platform
import os

#根据命令行输入获取监听的端口
port = sys.argv[1]

#创建log存放目录
if platform.system() == 'Linux':
    log_folder = '/home/GoGoCaptain/HoneyPot_webpy/Log'
else:
    log_folder = 'D:/Python/workspace/HoneyPot_webpy/Log'
if not os.path.exists(log_folder):
    os.mkdir(log_folder)
logDir = os.path.join(log_folder, '%s' % port)
if not os.path.exists(logDir):
    os.mkdir(logDir)

#创建链接,不同请求对应相应的类,.*代表任意请求。也可针对特定请求。
urls = (
    '/.*','All'
)

class All:
    def __init__(self):
        self.logger = web.ctx.environ['wsgilog.logger'] #将获取的攻击信息写入日志文件

    def GET(self): #针对get请求
        con = web.ctx.fullpath #获取完整的请求
        ip = web.ctx.ip #获取攻击者IP
        if ip == 'x.x.x.x': #可设置IP白名单
            pass
        else:
            self.logger.info(ip + '\t' + con) #将攻击者IP和请求写入到日志文件
        render = web.template.render('templates/') #返回指定的HTML页面,针对有特点的攻击,可伪造成路由器管理页面等,文件为同目录templates下的index.html
        return render.index()

    def POST(self): #针对post请求
        con = web.ctx.fullpath
        postdata = web.data() #获取post的内容
        postdata = postdata.replace('\r\n',' ')
        postdata = postdata.replace('\r',' ')
        ip = web.ctx.ip
        if ip == 'x.x.x.x':
            pass
        else:
            self.logger.info(ip + '\t' + con + '\t' + ' PostContent:' +postdata)
        return ''

if __name__ == '__main__':
    from Log import Log
    app = web.application(urls,globals())
    app.run(Log) #运行 


日志配置文件:

# -*- encoding: utf-8 -*-

import logging
import os
import honeypot

file = os.path.join(HoneyPot_webpy.logDir,'webpy.log') # 日志文件路径 #

logformat = "%(asctime)s\t%(message)s" # 日志格式 #
datefmt = "%Y-%m-%d %H:%M:%S" # 日志中显示的时间格式 #
loglevel = logging.INFO # 日志显示级别
interval = "d" # 每隔一天生成一个日志文件#
backups = 10 # 后台保留10个日志文件 #

如需监听8080端口:

python honeypot.py 8080

多个端口的话,可以写个批量脚本,1024以下的端口需要root权限

你可能感兴趣的:(Python,Python,蜜罐,web.py)