我们办公室有一个过滤规则,阻止客户下载音频和视频文件。此规则使用Kerio服务器设置。
例如,当我输入指向.mp4
文件的直接链接时,我将从此Kerio防火墙中面对此页面:
好吧,为了绕过这个过滤规则,我在web服务器上使用flask编写了一个python程序,以接收该文件的地址作为地址栏中的参数,在该服务器上下载,将其扩展名更改为非音频/非视频扩展程序(例如.fk
,.pdf
等),然后发送给我!
以下是该计划:
__init__.py:
# encoding=utf8
from flask import Flask
from flask import send_file
import Downup
app = Flask(__name__)
app.debug = True
downupper = Downup.Downup()
@app.route('/<path:path>')
def test_1(path):
url = "http://"+ path[6:]
file_addr = downupper.downup(url)
return send_file(file_addr, mimetype=None, as_attachment=False, attachment_filename=None, add_etags=True, cache_timeout=None, conditional=False)
#return file_addr
@app.route('/test_2')
def test_2():
return '<html><body><h1>Hi!</h1></body></html>'
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
Downup.py
import os
import urllib
import random
class Downup():
def __init__(self):
self.download_path = "/var/lib/openshift/55ed2d400c1e6677a50001d1/app-root/data/"
def downup(self, url):
file_downloader = urllib.URLopener()
file_name = str(random.randint(1,99999999999)) + "-" + "change .fk to " + str(url)[-4:] +".fk"
try:
file_downloader.retrieve(url, self.download_path + file_name)
return self.download_path + file_name
except:
return "Failed!"
问题是我仍然面对上一个过滤页面:
如您所见,我将文件的地址作为参数传递给我的应用程序(此处:fcuk-kerio.rhcloud.com
),将其下载到具有不同扩展名的服务器上,并使用none
作为其发送 Mime ,但它仍然失败。
请注意,我检查了主机,我看到我的文件已下载:
这是日志:
请注意,我可以使用VPN和代理服务器绕过Kerio服务器,但我想使用上述方法进行操作。
答案 0 :(得分:1)
我无法肯定地说,因为我没有对此产品进行测试。有两个明显的问题。
首先,网址仍然包含扩展名。尝试从表单中发布要下载的URL,而不是作为url参数。
其次,mimetype只是浏览器的一个提示,改变它实际上并没有改变文件。文件具有&#34;幻数&#34;,唯一标头,可以可靠地识别大多数文件类型,而无需扩展和mimetype提示。您可以尝试对文件进行base64编码,而不是将其作为下载文件进行编码,然后在最终对其进行解码。
Base64编码是您应该做的简单版本:使用安全HTTP(https,ssl,tls等)。 VPN和代理为您工作的原因是它们加密了您的计算机与外部之间的所有流量,因此防火墙无法对其进行检查。