bruhbitte.21.06.10

昨天晚上将之前装nas上的那块64GB的msata固态重新利用了下,装了个win7和cuties impact,然后在我的笔记本上测试amber速射脚本🤔无论是arduino版还是ahk版,效果都不是很稳定,可能需要进一步调参🤔但更坑爹的是,我那个无线双模机械键盘突然暴毙,尽管我找出了曾经用的黑轴有线键盘,但用了很多年红轴之后,黑轴是真的不习惯,压力克数太大,我的手指已经感觉到疲劳了🤔看有没有便宜红轴买一个🤔

另外我在搞将一些bdmv上传到那个什么搜书盘的事情,本地刚好没有90GB空间,我看了一眼,我的所有vps里面,某台2TB的还在无限重启中(确信,另外一台2TB的还在备份东西,再说了在vps上传php网盘我目前只能尝试在图形窗口打开浏览器,而这两台vps都得去挂u2种子,腾不出来🤔

所以我只能用某台500GB的旧vps做这件事情了,那天备份的时候能跑50MB/s,然而搞这个速度实在是颠覆(大嘘)了我的认知,下discord drive速度只有28MB/s,和我自己的本地网络一个速度🤔处理压缩包的速度降到了⑨MB/s,花了整整一天才处理完🤔

接下来我对它启动了一个ubuntu的livecd,打开浏览器上传🤔对于这么一个双核一代e5和2GB内存的玩意,我发现它只能开一个标签页,开多了标签页就会导致每个都卡得没法上传🤔好在vps网络环境就是比本地好很多,一个标签页也能速度快到飞起,反正它也是5MB一次网络请求,但我感觉它从来没有中间停过(确信🤔

但我接下来在想如果bash不能搞这件事,能不能用node.js直接跑它用来实现h5上传的js脚本?只要它能纯命令行做这件事情,我就能在那两台vps上做,那效率不比这垃圾玩意高多了🤔

thonk

我突然发现之前的curl上传没法完成,原因居然是我忘了设置content type🤔按照curl这个程序的说明,如果使用了--data参数放post请求时的请求体的话,它会将content type自动设置成表单,对请求体进行urlencode啥的🤔但phpdisk实现大文件上传时,要求上传的post请求体必须是raw data🤔难怪上传后经常报错🤔

只需要加一个规定content type为plain text的请求头就能解决这个问题,接下来我发现curl并没有实现data-raw,但实现了data-binary,那么就用它🤔不然的话上传1MB数据后它那边只报告上传了500KB啥的🤔

现在phpdisk终于可以用curl上传了,而且它那玩意非常灵活,每次上传的文件片段不见得非得是5MB,可以上传任意大小的片段,然后它在返回值里会自动报告当前的进度🤔然后我用dd来获取某个范围内的文件片段,从它返回的文件位置开始,获取设置的值那么多字节的片段,管道到curl🤔然后以此循环,我发现循环终止的条件是它返回的位置值等于文件的大小,这说明文件已经上传完了所有字节,它也可以用我的另外一个脚本来索引了🤔

接下来我用40MB分片上传了一个30MB的视频,重新下载之后测了下sha512,和原文件完全一致,这个脚本一点问题都没有🤔

issues

但现在这个脚本有一个非常严重的性能问题,将dd的每次读取设置成1字节尽管能索引到准确的字节,但这个磁盘操作的速度极慢,能够慢到2MB/s,在我的那几个上古垃圾vps里面只有几百KB/s🤔而且如果它真的进行了几千万次io的话,我估计我的那几台机子搞不好要被扬了🤔像我前几天用dd的时候都是bs=1M🤔解决办法要么是放弃dd,用别的办法索引文件分片🤔要么将dd的每次读取改成1M,然后在每次dd定位时用服务器返回的pos值除以1M来索引🤔

resolved

最后我查了一下某英文问答网站,发现用tail -c +posfilename | head -c $segsize可以用来提取pos位置开始segsize那么多的分片,原来head和tail也支持按照字节索引啊🤔现在它效率高多了,甚至快得让那台服务器有点受不了🤔至于文件传上去之后checksum能不能对得上,我待会儿就知道了🤔

deepthonk

我再次研究了一番它的代码,看哪些请求头可以砍掉,我发现一个非常生草的结论,上传请求里绝大多数的请求头都能砍掉🤔砍到只发送一个链接都能生成token,第二步貌似填哪个uid,文件就能上传到哪个uid的账号里,这个步骤甚至不用提供uid对应的cookies🤔甚至我填一个超过4GB的文件大小,它都能正常上传,实在是太草了🤔

但还是添加一些伪装成浏览器的请求头比较好,不然它可能会限速🤔当然至少不需要像下载时那样添加什么referer和cookies🤔再就是尽管它能完全绕过文件大小限制,但我要是真的上传一个35GB大小的bdmv还是太过分了,估计他们网管哪怕是幼儿园文化水平都能知道发生了什么(大嘘🤔

barbruh

我刚才发现新的文件分片方法导致checksum对不上🤔写了个测试文件对比了下dd的结果和tail/head结果,发现在tail后面的参数后面加1才能在结果上和dd一致(确信🤔

好吧,那我就加上1再跑一遍,然后再下载下来对比checksum🤔

加上1之后它能通过checksum验证了,这基本上算是搞定了🤔

发表评论