本帖最后由 omar111 于 2026-5-22 08:49 编辑
有些特殊环境如一些政府机关,企业,医疗结构需要把外网的表格传输到内网上,专业的文件摆渡系统或服务器价格昂贵所以自己借助AI做了这么一个小型表格中转系统,大家可以再二次开发。做好成品也可以分享。传统的文件传输方式如:共享,或者FTP都有安全隐患,
因为文件不可控有可能被木马钻缝隙。所以就想到这个相对安全的方法,
主机A为外网电脑双网卡,主机B为内网电脑双网卡,把A和B电脑单独组建一个小型局域网,
只通过特定IP段访问,如A电脑设置为255.255.255.1和B电脑设置为255.255.255.2,
因为是需要把外网A电脑上的表格上传到内网B电脑所以B电脑只开放50000端口其他端口全部关闭,B电脑配置好Python然后运行该代码,然后A电脑访问http://255.255.255.2:50000即可上传表格到内网电脑代码根目录新建的uploads文件夹,
因为代码只限制XLS和XLSX扩展名,并且会校验表格完整性防止伪装表格文件达到安全中转的目的。
源码只有4k大小非常适合轻量化运行。源码链接:
内外网文件中转站.zip
(3.99 KB, 下载次数: 32)
大家可以评价一下该方案的优缺点,或者更好的内外网传输文件的建议和方案。
单向文件摆渡(外网→内网单向)安全分析一、整体架构边界- 主机 A:外网侧,网卡 1 接入外网,网卡 2 对接私有互联网段
- 主机 B:内网侧,网卡 1 接入涉密内网,仅开放50000 端口,其余端口全部封禁
- 通信规则:仅允许外网向内网单向传文件,内网数据禁止向外流出
二、现有安全优势
- 端口收敛极致:内网主机仅单端口放行,网络攻击入口被压缩到最小,常规扫描、端口入侵基本失效。
- 单向阻断防泄密:策略约束数据只能外网入内网,从链路规则上杜绝内网机密数据外泄、木马回传窃取信息。
- 网段物理隔离生效:内外业务网无路由互通,仅专属互联通道做文件中转,无法跨网横向渗透。
- 非法外联彻底封堵:其余端口全部关闭,内网程序无法主动对外建立连接,阻断恶意外联通道。
- 上传文件格式验证:只限制上传格式XLS和XLSX,增加了文件完整性验证。
- 上传增加了IP限制:系统自带IP限制,也可使用防火墙增加IP限制。
![]()
![]()
![]()
![]()
[Python] 纯文本查看 复制代码 import os
import uuid
from flask import Flask, render_template, request, jsonify
import openpyxl
import xlrd
def get_metadata():
"""获取脚本元数据"""
return {'name': 'github_user_info', 'description': '上传', 'dependencies': [], 'parameters': [], 'category': '上传', 'icon': 'C:\\Users\\Night Shang\\Desktop\\gjx\\my-toolbox-new\\assets\\icons\\icon-mo.ico'}
# 初始化Flask应用
app = Flask(__name__)
# 配置项
# 上传文件存储目录
UPLOAD_FOLDER = 'uploads'
# 允许上传的文件后缀
ALLOWED_EXTENSIONS = {'xls', 'xlsx'}
# 最大文件大小 50MB
app.config['MAX_CONTENT_LENGTH'] = 50 * 1024 * 1024
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
# 创建上传目录(不存在则自动创建)
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
# 验证文件后缀是否合法
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
# Excel表格核心验证函数
def validate_excel(file_path, filename):
"""
自定义Excel验证规则,可根据业务需求修改
返回:(是否通过, 错误信息)
"""
ext = filename.rsplit('.', 1)[1].lower()
try:
# 处理.xlsx文件
if ext == 'xlsx':
wb = openpyxl.load_workbook(file_path)
# 读取第一个工作表
ws = wb.active
row_count = ws.max_row
col_count = ws.max_column
# 处理.xls文件
elif ext == 'xls':
wb = xlrd.open_workbook(file_path)
ws = wb.sheet_by_index(0)
row_count = ws.nrows
col_count = ws.ncols
# ================= 自定义验证规则 ==============
# 规则1:表格不能为空(至少1行数据+表头)
if row_count < 2:
return False, "表格数据为空,请检查文件内容"
# 规则2:至少包含2列数据
if col_count < 2:
return False, "表格列数不足,至少需要2列"
# 规则3:表头不能为空(可自定义表头名称)
# 这里以第一行前两列为例
if ext == 'xlsx':
header1 = ws.cell(row=1, column=1).value
header2 = ws.cell(row=1, column=2).value
else:
header1 = ws.cell_value(0, 0)
header2 = ws.cell_value(0, 1)
if not header1 or not header2:
return False, "表头不能为空,请完善表格表头"
# 验证通过
return True, "Excel表格验证通过"
except Exception as e:
return False, f"文件解析失败:{str(e)}"
# 首页路由
@app.route('/')
def index():
return render_template('index.html')
# 文件上传接口
@app.route('/upload', methods=['POST'])
def upload_file():
# 检查是否有文件上传
if 'file' not in request.files:
return jsonify({"code": 1, "msg": "未选择文件"})
file = request.files['file']
if file.filename == '':
return jsonify({"code": 1, "msg": "未选择文件"})
# 验证文件格式
if not allowed_file(file.filename):
return jsonify({"code": 1, "msg": "仅支持上传 .xls 和 .xlsx 格式文件"})
# 生成唯一文件名,防止重名覆盖
unique_filename =str(uuid.uuid4())+ "_" + file.filename
file_path = os.path.join(app.config['UPLOAD_FOLDER'], unique_filename)
try:
# 保存文件
file.save(file_path)
# 执行Excel验证
is_valid, msg = validate_excel(file_path, file.filename)
if not is_valid:
# 验证失败,删除已上传文件
os.remove(file_path)
return jsonify({"code": 1, "msg": msg})
# 上传+验证全部成功
return jsonify({"code": 0, "msg": f"上传成功!{msg}"})
except Exception as e:
# 异常处理,删除无效文件
if os.path.exists(file_path):
os.remove(file_path)
return jsonify({"code": 1, "msg": f"上传失败:{str(e)}"})
if __name__ == '__main__':
# 0.0.0.0 允许局域网所有设备访问
app.run(host='0.0.0.0', port=50000, debug=True)
|