该脚本会在80端口开启一个服务并记录所有访问到该服务的HTTP请求,返回访问时间并将请求包转化为Burpsuite等工具可用的格式记录在日志里。依赖Flask(pip install Flask),使用: python httplogger.py log.log
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# coding=utf-8 | |
# nearg1e.com@gmail.com | |
import os | |
import logging | |
import datetime | |
import string | |
from sys import argv | |
from flask import Flask, request | |
app = Flask(__name__) | |
logger = logging.getLogger('reqlogging') | |
honeypot_text = "" | |
honeypot_filepath = "honeypot.text.html" | |
def sysinit(): | |
global honeypot_text | |
if not os.path.exists(honeypot_filepath): | |
print('[!] error honeypot_filepath not found', honeypot_filepath) | |
return | |
with open(honeypot_filepath, "r") as fp: | |
honeypot_text = fp.read() | |
def log_init(filepath): | |
f = open(filepath, 'a+') | |
loghander = logging.StreamHandler(f) | |
fer = logging.Formatter( | |
"\r[%(asctime)s] %(message)s", | |
"%H:%M:%S" | |
) | |
loghander.setFormatter(fer) | |
logger.addHandler(loghander) | |
logger.setLevel(logging.DEBUG) | |
def filename_format(filename=""): | |
unfilestr = string.punctuation.replace("./-", "") | |
for s in unfilestr: | |
filename = filename.replace(s, "_") | |
return filename | |
def current_date(): | |
return "{}.txt".format(datetime.datetime.now().strftime("%Y-%m-%d")) | |
@app.route('/', methods=['GET', 'POST', 'OPTIONS', 'PUT', 'DELETE', 'HEAD', 'PATCH']) | |
@app.route('/<path:urlpath>', methods=['GET', 'POST', 'OPTIONS', 'PUT', 'DELETE', 'HEAD', 'PATCH']) | |
def web(urlpath='/'): | |
request_text = "" | |
infodict = { | |
"method" : request.method, | |
"path" : request.full_path, | |
"httpver" : request.environ.get('SERVER_PROTOCOL') | |
} | |
line_1st = "{method} {path} {httpver}\n".format(**infodict) | |
request_text += line_1st | |
for key, value in request.headers.items(): | |
item = "{}: {}\n".format(key, value) | |
request_text += item | |
request_text += "\n" | |
if request.method.upper() == "POST": | |
post_para_list = [] | |
for item in request.form.items(): | |
post_para_list.append("{}={}".format(*item)) | |
post_para = "&".join(post_para_list) | |
request_text += post_para | |
request_text += "\n" | |
logger.info("{}\n{}".format(line_1st, request_text)) | |
request_text = request_text.replace('\n', '<br>') | |
result_ = honeypot_text + request_text | |
return result_ | |
if __name__ == "__main__": | |
filepath = filename_format(argv[1]) if len(argv) == 2 else current_date() | |
log_init(filepath) | |
sysinit() | |
app.run(debug=True, threaded=True, port=80, host="0.0.0.0") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment