-
Notifications
You must be signed in to change notification settings - Fork 1
来源验证, Web服务
HouJie edited this page May 30, 2019
·
1 revision
这里主要讲述Watch_Dogs-Client系统中有关请求来源验证, 异步Web构建实现代码, 这一部分的代码主要在 Watch_Dogs-Client.py
为了提高 Watch_Dogs-Client 的安全性, 系统所提供的API并不允许所有的请求均被处理.
系统只会响应那些认证过来源(IP地址)的请求.
为了实现这个功能, 主要利用了python的装饰器和functools模块中的 @functools.wraps(func)
def request_source_check(func):
"""装饰器 - 请求地址识别"""
global ALLOWED_REQUEST_ADDR
@functools.wraps(func)
def wrapper(*args, **kw):
# 验证请求地址
if request.remote_addr not in ALLOWED_REQUEST_ADDR and "0.0.0.0" not in ALLOWED_REQUEST_ADDR:
logger.error("Unknown request addr - " + str(request.remote_addr))
return jsonify({"Error": "Unknown request addr - " + str(request.remote_addr)}), 403
try:
res = func(*args, **kw)
except Exception as e:
logger.error("Error " + str(e.__class__) + " | " + e.message)
logger.error("Error details : " + traceback.format_exc())
return jsonify(
{"Error": e.message, "Error type": str(e.__class__), "Error detail": traceback.format_exc()}), 501
return res
return wrapper
向系统的配置文件 setting.json 中
{
"comment": "Watch_Dogs-Client 配置文件",
"author": "h-j-13",
"last-update time": "2019-02-22",
"allowed_request_addr": [
"0.0.0.0"
],
"port": 8000,
"net_monitor": false
}
allowed_request_addr 这一列表中添加运行请求的IP地址即可
当allowed_request_addr这一列表中含有"0.0.0.0"的时候, 代表所有来源的请求均可以被响应
为了提高系统的性能, 这里是用了异步的方式构建Web
有关异步服务的请求方式, 有很多种不同的方式, 如有兴趣可以自行了解, 这里暂时略过
为了长期运行, 这里是用了Tornado作为Flask的容器, 示例代码如下
app = 你的flask应用
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(setting.PORT, )
IOLoop.instance().start()
如果有任何问题, 请联系邮箱 h.j.13.new@gmail.com