boa+cgi上传文件超过1M报错问题
写在前面
今天需要使用页面上传bin包,文件大概是3.9mb,结果一直报错
POST /cgi-bin/Upgrade.cgi undefined
Host: 192.168.137.200:8888
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------279364548015623859994223247018
Content-Length: 4102997
Origin: http://192.168.137.200:8888
Sec-GPC: 1
Connection: keep-alive
Referer: http://192.168.137.200:8888/system-upgrade.html
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
可以看到是没有定位到cgi的程序,百思不得其解,但是又必须得使用method=“post” enctype=“multipart/form-data”,最后发现boa有文件上传限制,默认是1mb。。。。
解决方法如下
- 修改boa.conf配置文件
# SinglePostLimit: The maximum allowable number of bytes in
# a single POST. Default is normally 1MB.
SinglePostLimit 16777216 #16MB
这里把它改为16mb
之后使用ps -aux |grep boa kill -9 进程号
重启./boa即可,上传就没有问题了
- 修改源码
如果是修改boa源码宏定义是修改src文件夹中define.h:
#define SINGLE_POST_LIMIT_DEFAULT 1024 * 1024 * 16 /* 16 MB */
然后重新编译代码即可
贴下cgi代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include "cgic.h"#define BufferLen 4096static unsigned char xor_mask[] =
{
46,175,116,168,85,253,15,163,167,87,
121,198,175,136,79,125,156,10,72,135,
208,71,39,164,238,167,42,101,154,14,
235,225,76,27,106,109,193,208,89,35,
101,37,12,121,241,205,7,227,169,30,
109,80,203,49,245,169,26,111,218,156,
145,78,186,219,215,80,28,186,60,191,
33,23,109,144,131,139,52,10,29,254,242,
236,30,144,84,124,46,95,30,240,217,211,
248,32,48,28,243,144
};int cgiMain(int argc, char *argv[]) {cgiFilePtr file;int targetFile;char name[128];char fileNameOnServer[64];char contentType[1024];char buffer[BufferLen];int filelen;int fdNew, fdOld;char *msg;FILE *New, *Old;struct stat buf;int size;int got;int i;int ret = 0;int ret1 = 0;cgiHeaderContentType("text/html; charset=UTF-8");mkdir("/tmp/upgrade", 0755);if (cgiFormFileName("file_Upgrade", name, sizeof(name)) != cgiFormSuccess) {fprintf(cgiOut,"could not retrieve filename\n");goto FAIL;}cgiFormFileSize("file_Upgrade", &size);cgiFormFileContentType("file_Upgrade", contentType, sizeof(contentType));if (cgiFormFileOpen("file_Upgrade", &file) != cgiFormSuccess) {fprintf(cgiOut,"could not open the file\n");goto FAIL;}targetFile = open ("/tmp/upgrade/test", O_RDWR|O_CREAT|O_TRUNC|O_APPEND, 0644);if(targetFile<0){fprintf(cgiOut,"could not create the new file,%s\n", fileNameOnServer);goto FAIL;}while (cgiFormFileRead(file, buffer, BufferLen, &got) == cgiFormSuccess){ret = 0;if (got > 0) {while (ret < got) {ret += write(targetFile, buffer + ret, got - ret);}}}ret = 0;cgiFormFileClose(file);close(targetFile);goto END;
FAIL:fprintf(cgiOut, "Failed to upload");return 1;
END:stat("/tmp/upgrade/test", &buf);filelen = buf.st_size;New = fopen("/tmp/upgrade/upgrade.tar.gz", "wb");if (New == NULL) {return -1; }Old = fopen("/tmp/upgrade/test", "rb");if (Old == NULL) {return -1; }fdNew = fileno(New);fdOld = fileno(Old);msg = (char *)malloc(filelen * sizeof(char));memset(msg, 0, filelen);ret1 = 0;while((ret = fread(msg, sizeof(char), 1024, Old)) > 0 ){for (i = ret1; i < ret + ret1; i++) {msg[i - ret1] = msg[i - ret1] ^ xor_mask[i % sizeof(xor_mask)];}ret1 += ret;fwrite(msg, sizeof(char), ret, New);}ret1 = 0;free(msg);fflush(Old);fflush(New);fsync(fdOld);fsync(fdNew);fclose(New);fclose(Old);system("tar -xf /tmp/upgrade/upgrade.tar.gz -C /tmp/upgrade");return 0;
}
相关文章:
boa+cgi上传文件超过1M报错问题
写在前面 今天需要使用页面上传bin包,文件大概是3.9mb,结果一直报错 POST /cgi-bin/Upgrade.cgi undefined Host: 192.168.137.200:8888 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0 Accept: text/h…...
抖去推--短视频账号矩阵系统saas工具源码技术开发(源头)
一、短视频矩阵系统搭建常见问题? 1、抖去推的短视频AI矩阵营销软件需要一定的技术水平吗? 答:不需要。产品简单易用,不需要具备专业的技术水平,即使是初学者,也能够轻松上手操作。 3、抖去推的短视频AI矩…...
【服务器能干什么】搭建一个短网址平台,可以查看数据详情!
昨天在 YouTube 上看到又一个搭建自己短网址的视频教程,用的是开源的 polr,但是按照步骤一步步搭建下来,最后一步都会出现 顺哥轻创 PLAINTEXT Whoops, looks like something went wrong百度、谷歌查了一圈也没找到有效的解决方法。&#x…...
MySQL备份与恢复(重点)
MySQL备份与恢复(重点) 一、用户管理与权限管理 ☆ 用户管理 1、创建MySQL用户 注意:MySQL中不能单纯通过用户名来说明用户,必须要加上主机。如jack10.1.1.1 基本语法: mysql> create user 用户名被允许连接的主…...
机器学习中的特征选择:方法和 Python 示例
布拉加德什桑达拉拉詹 一、说明 特征选择是机器学习流程中至关重要且经常被低估的步骤。它涉及从数据集中的原始特征集中选择最相关的特征(输入变量或属性)的子集。特征选择的重要性怎么强调都不为过,因为它直接影响机器学习模型的质量、效率…...
有哪些不错的golang开源项目?
前言 下面是github上的golang项目,适合练手,可以自己选择一些项目去练习,整理不易,希望能多多点赞收藏一下!废话少说,我们直接进入正题>>> 先推荐几个教程性质的项目(用于新手学习、…...
解决ssh使用public key远程登录服务器拒绝问题
目录 使用场景windows安装ssh客户端使用powershell ssh登录服务器生成密钥文件ubuntu ssh服务器配置使用vscode远程登录使用Xshell远程登录使用MobaXtem远程登录Server refused our key问题解决方案 使用场景 使用vscode远程ssh登录使用public key不需要输入密码,比较方便. w…...
js数组中,相同id的item数据合并
原数据: const list [ {id:1, key: a}, {id:1, key: b}, {id:2, key: c}, {id:2, key: d}, ]期望数据格式 const newList [ {id:1, keyList: [a,b]}, {id:2, keyList: [c,d]}, ]// 相同id的数据合并let newList_(list ).flatten().groupBy(id).map(_.spread((..…...
LeetCode(33)最小覆盖子串【滑动窗口】【困难】
目录 1.题目2.答案3.提交结果截图 链接: 76. 最小覆盖子串 1.题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字…...
设计模式 创建者模式
设计模式 创建者模式 前言原来代码使用设计模式总结Builder模式在源码中的应用:其他代码 前言 “对象创建”模式——绕开new 工厂模式 抽象工厂 原型模式 构建器 动机与背景 目前需要建造一个房子,建造房子需要一系列特定的步骤,但是房子的类…...
排序算法--插入排序
实现逻辑 ① 从第一个元素开始,该元素可以认为已经被排序 ② 取出下一个元素,在已经排序的元素序列中从后向前扫描 ③如果该元素(已排序)大于新元素,将该元素移到下一位置 ④ 重复步骤③,直到找到已排序的元…...
【操作宝典】SQL巨擘:掌握SQL Server Management的终极秘籍!
目录 ⛳️【SQL Server Management】 ⛳️1. 启动登录 ⛳️2. 忘记密码 ⛳️3. 操作数据库和表 3.1 新建数据库text 3.2 新建表 3.3 编辑表 3.4 编写脚本 ⛳️【SQL Server Management】 ⛳️1. 启动登录 需要开启服务 ⛳️2. 忘记密码 登录windows--> 安全性 -->…...
Airtest遇到模拟器无法输入中文的情况该如何处理?
1. 前言 最近有收到同学们的一些提问,使用Airtest的 text 接口,发现在部分模拟器上, text 无法输入中文,不知道该怎么处理。 今天我们就输入这个小问题,来详细聊一下。 2. Airtest的输入法简介 对于Android设备来说…...
从农夫山泉家族任命,看“食企二代”的接班与传承
本文转载自产业科技 农夫山泉再次引发舆论关注,起因是一则人事任命消息。 市场消息称,农夫山泉对区域及人员进行了调整,其总部所在地浙江省被划分为四个区域,在以往浙南、浙北基础上多了浙西大区以及杭州大区,其中农…...
JavaScript启动本地应用程序
JavaScript调起本地应用程序 以下内容,自定义部分我也还未经过实际验证,酌情查看。 文章目录 JavaScript调起本地应用程序确定协议调用协议传参自定义写入协议获取参数 在浏览器中通过 JavaScript调起本地应用程序的一个可行方法就是 通过协议调起。 …...
软件工程理论与实践 (吕云翔)第十四章 软件维护与软件工程管理课后习题与解析
第十四章 软件维护与软件工程管理 1.判断题 (1)代码行技术是比较简单的定量估算软件规模的方法。(√) (2)功能点技术依据对软件信息域特性和软件复杂性的评估结果,估算软件规模。(√) &#…...
Flutter 桌面应用开发之读写Windows注册表
文章目录 需求来源Windows查询Windows版本号方法1. 如何查看Windows版本号2. Windows开发如何通过代码查询Windows版本号(1) 使用C#代码:(2) 使用VB.NET代码 3.通过注册表查看Windows版本信息 Flutter查询Windows版本号方法依赖库支持平台实现步骤1. 在pubspec.yaml…...
【Java Spring】SpringBoot 日志系统
文章目录 一、Spring Boot 日志系统1.1 Spring Boot 日志框架1.2 自定义日志打印1.3 日志级别设置1.4 日志持久化1.5 lombok 简化日志输出 一、Spring Boot 日志系统 1.1 Spring Boot 日志框架 SLF4J 和 logback都是spring boot内置的日志框架,开发者只负责调用对…...
Rust UI开发(四):iced中如何添加菜单栏(串口调试助手)
注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 这是一个系列博文,本文是第四篇,前三篇链接: 1、Rust UI开发(一):使用iced构建UI时…...
P19 C++ 构造函数的成员初始化列表
目录 前言 01 如果不用成员列表如何初始化变量 02 成员列表初始化 03 为什么要使用成员列表初始化呢? 04 案例代码 前言 本期我们聊聊构造函数初始化列表。 你应该经常使用成员初始化列表,如果你不喜欢这种代码风格,建议你还是慢慢习惯吧…...
鸿蒙开发实战:使用ArkTS与DevEco Studio打造你的首个HarmonyOS应用
1. 从零到一:搭建你的鸿蒙开发环境 第一次打开DevEco Studio时,那种既兴奋又忐忑的心情我至今记得特别清楚。作为过来人,我建议你先花点时间把开发环境配置妥当,这能避免后续开发中80%的奇怪报错。Windows和Mac用户都需要确保系统…...
Stable Diffusion+LoRA工作站教程:Pixel Fashion Atelier Leather-Dress集合调用
Stable DiffusionLoRA工作站教程:Pixel Fashion Atelier Leather-Dress集合调用 1. 像素时装锻造坊简介 像素时装锻造坊(Pixel Fashion Atelier)是一款基于Stable Diffusion与Anything-v5的图像生成工作站。它采用独特的复古日系RPG"明…...
防静电门禁(ESD 闸机)系统深度技术方案:原理、硬件、接线、调试、故障排查
本文从硬件原理、电气接口、通信协议、联动逻辑、调试步骤、故障树六个维度,完整拆解防静电门禁闸机系统(ESD) 的技术实现与工程落地,内容适用于:电子 / 半导体车间 EHS、设备、IE 工程师智能化工程、安防系统 集成商 …...
非计算机专业转AI Agent:补哪些基础最有效
【本段核心】现在很多大学生都有转AI的想法,但每天做的却是收藏一堆教程、刷一堆概念、看一堆“LLM 从入门到精通”,然后继续焦虑、继续拖沓、继续投简历没回音。我就是双非野鸡二本经济学转Agent的,成效把 Agent 这条路跑通之后,…...
【Eviews实战指南】异方差诊断与加权最小二乘法优化
1. 异方差问题初探:为什么你的回归结果不可靠? 第一次用Eviews跑回归时,我发现一个奇怪现象:明明模型R很高,但t检验结果就是不稳定。后来导师指着残差图告诉我:"小伙子,你这是遇到异方差了…...
MCP Server与Client的实战配置指南:从零搭建到功能测试
1. MCP技术入门:从协议理解到生态优势 第一次接触MCP这个概念时,我也是一头雾水。直到真正用起来才发现,这简直就是开发者与AI模型之间的"万能翻译器"。Model Context Protocol(模型上下文协议)的核心价值在…...
如何快速构建复杂多资源类型Kubernetes Operator:Kopf实战案例指南
如何快速构建复杂多资源类型Kubernetes Operator:Kopf实战案例指南 【免费下载链接】kopf A Python framework to write Kubernetes operators in just a few lines of code 项目地址: https://gitcode.com/gh_mirrors/ko/kopf Kubernetes Operator是自动化管…...
香橙派Zero3 + MS200雷达:手把手教你搞定Hector SLAM建图(含TF配置避坑指南)
香橙派Zero3与MS200雷达实战:Hector SLAM从零构建到可视化全解析 当香橙派Zero3遇上MS200激光雷达,一场关于空间感知的奇妙旅程就此展开。Hector SLAM作为无需里程计的轻量级建图方案,特别适合嵌入式设备与单线雷达的组合。本文将带你穿越从硬…...
避坑指南:vue-flip-page翻页组件在移动端的适配问题与解决方案
Vue-Flip-Page移动端适配实战:从卡顿到流畅的进阶指南 移动端翻页组件的特殊挑战 在移动端使用翻页组件时,我们面对的是一个与桌面端完全不同的交互环境。手指触控的精度远低于鼠标点击,屏幕尺寸和比例千差万别,硬件性能也参差不齐…...
硬盘里那个仙剑的文件夹,你多久没打开过了?DOCKER部署DOS怀旧模拟器,带你秒回童年!
前言 大概每个 80 后、90 后玩家的硬盘深处,都有一个仙剑的文件夹。 我也不例外。当年第一次通关,在苏州城里听到《仙剑奇侠传》的音乐响起来,整个人愣在屏幕前——那时候还不懂什么叫叙事,什么叫情感冲击,只觉得李逍…...
