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权限