自叹弗如

这两天一直在纠结一件事情。
我真的很想认真的学习英语了。我知道我想干的事情一定可以做到。
今天我收到了服务器的告警短信,硬盘需要续费了。
这个硬盘里装着我这半年所有的心血,还有好几个T的分词结果和图片。但是我知道如果他还在的话,我肯定会忍不住接着做Whisper和Argus的。
我自己是肯定下不了手格式化硬盘的。
所以我决定,不给硬盘续费了,让他自生自灭吧,哈哈。

这也算是一次实习经历吧

其实这篇东西很早之前就打算写了,但是最近一直在忙一些其他的事情,所以就耽搁了下来。
从阿里回来,算是圆了我“去阿里”的梦想,但也终结了我对阿里的所有幻想。也许这就是一座围城,外面的人想进来,里面的人想出去。
回到学校,开始了一段非常鬼畜的实习之旅。真的是见山不山了,这家公司的实习经历也许永远不会出现在我的简历中,但我想说的是,这应该是我大学生活中最快乐的一段时间了。
由于之前一直是打算找工作的,花了很多时间去水offer。现在去准备雅思是有一点晚了。但是既然已经选择了这条路,只能硬着头皮往前冲了。
这两天我观察了一下我想要申请的学校,基本都是要求雅思6.5分的。对于我这样一个英语渣来说,这真的算是一个不小的挑战了。果然以前欠下的东西是一定要还回来的。
这个学期打算专攻英语了,技术方面的东西可能要延缓一段时间了。如果这个学期出不了成绩的话,那我可就真的GG了。以前一直没有什么学习英语的动力,现在一下子给自己搞了这么一个幺蛾子,还是蛮爽的。让我们轰然向前吧!

Windows静默执行system command

这两天在撸一个远程控制的木马。
在服务端,我们首先要实现的一个功能就是要能够执行系统命令。但是system函数在执行的时候都会自带一个黑乎乎的Console,这东西很容易暴露啊(什么很容易,明明一眼就能看出来好么?)
所以,我们需要一种可以将输出重定向的函数来完成这一光荣而不怎么艰巨的历史使命。打开MSDN,万花丛中我们找到了这个东东——CreateProcess。
下面的代码实现非常简单,我们重定向了系统调用的输出,成功把它带到了沟里~~

#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup") // 设置连接器选项

之后我们再拉一个文件句柄出来,用它来接住CreateProcess的输出。
Continue reading

关于Socket.io的一个大坑

在阿里其他的东西没学会,但踩坑填坑的手艺却是大有长进。
这两天在搞一个聊天工具,其中用到了Socket.io这个库。这个库给我的印象其实一直都是非常好的。这个家伙的Websocket封装做的很不错,给开发带来了很大的便利。
昨天脑洞大开想在Server端加上一个Redis的消息队列。这样的话,如果有新的Connection连接进来,Server就可以向他推送近期的消息了。
当然,储存消息的方式不难。我直接用来Redis的Hash存储,这种方式比较适合存储像消息体这样的对象类型。
之后我在监听Login事件的监听器中加上了emit广播,测试了和Redis的连接。
由于不能每进来一个新连接Server都去广播一次,这样很影响用户体验。所以我打算做成单播的形式,只给新加入的Connection推送最近的消息。
于是按照Socket.io的Doc:

// send to current request socket client
socket.emit('message', "this is a test");
// sending to all clients except sender
socket.broadcast.emit('message', "this is a test");
// sending to all clients in 'game' room(channel) except sender
socket.broadcast.to('game').emit('message', 'nice game');
// sending to all clients, include sender
io.sockets.emit('message', "this is a test");
// sending to all clients in 'game' room(channel), include sender
io.sockets.in('game').emit('message', 'cool game');
// sending to individual socketid 
io.sockets.socket(socketid).emit('message', 'for your eyes only'); 

我爽爽的Debug了两个小时,最后还是在stackoverflow上找到了答案。从1.0.0的版本之后,Sockets变成一个list数组了,所以调用姿势变成了这个样子:

//向新加入的用户推送之前的消息
 io.sockets.connected[socket.id].emit('message', {userid:reply.id, username:reply.name, content:reply.content});

简直2333有木有?其实这不是一个大问题,但是网上的教程基本都是1.0.0版本之前的,所以很多教程使用的是现在已经不再兼容的方法。
希望我能成为萝卜,为你填掉这个坑。

离开阿里

想不到的是,我现在想离开这个地方的迫切,和我当初想进来的时候是一样的。
之前大二的时候是想直接工作的,所以收了很多offer,其中有幸拿到了熊厂凤巢、鹅厂SNG和A厂蚂蚁。在这里我不想比较这几家公司到底哪家更好,咱们单纯的聊聊情怀吧。
有人说谈情怀的人太矫情,其实情怀背后的都是现实,人总是互相看不上的。
公司是同类人和同类人的集合,所以情怀是什么呢?
是一个一伙人看不上另一伙人的故事。
我先说说我的故事吧,大三上学期我去了SNG。
组里的老大已是世外高人,平时不见他怎么写代码,只能从其他人那里听到一些关于他牛逼到炸裂的事迹。导师则酷爱shell,第一次看到有人用shell脚本写那么大的系统。我一开始以为只能用C++或者shell了,但是和导师沟通之后,确定了开发需要用的组件有提供我需要的接口之后,我可以随意的使用任何一种我想用的语言了。
当时在做的是关于风控的项目,我有跳板机的权限,我有线上环境,还有线上的数据库。我给数据库做过热双写,也改过距离匹配算法,我很清楚如果我搞砸了会发生什么。
所幸的是,所有的事情都顺利的完成了。
在腾讯,我想说我真的学到了很多东西。我清楚的发现如果出国去感受一下国内的氛围那我可能也就这样了。所以和老大明着说了自己的想法,打算再去其他公司感受一下。
之后我到了蚂蚁金服。
在这里,我没有内网的权限,一打开界面就是“Oops 你没有权限~”,什么线上环境更是无稽之谈。
哦,对了。在这里我还领到了一台让我感动至今的用了79个月的19寸显示器,我很想知道这种“实习生专用”的显示器算不算一种歧视?

Transmissions使用小结

那啥,为啥是小结呢?因为不打算再用了呗。
昨天晚上拿到了《自杀小队》的枪版种子,先是想用公司的网直接下载来着,但是估计是有屏蔽,导致拿到链接之后也是下载不到,初步判断是因为内网的屏蔽政策。
所以打算用自己的服务器下载,那样正好带宽还可以更高一点。所以在网上找到了transmissions的安装包。正打算安装的时候,在网上又找到了一个一键安装包。
这个东西其实就是一个.sh文件,会自动的帮你安好所有的依赖并且配置好参数。这里我着急了,直接用了网上提供的安装包,快速配置了BT客户端,开始下载。
下载的速度确实非常快,正好到了晚餐的时间,就先开着服务和组里的小伙伴们去吃饭了。
吃完饭回来打算看看下载的进度(其实按照之前的下载速度我知道肯定已经下载完了),但是刚回来屁股还没坐热就被叫去开一个什么应急响应和故障的会了。所以我连电脑的屏幕都还没打开。
开会的时候突然收到了一条服务器报警,说是我的服务器欠费了,WTF!
结果一看居然上传了70多个G的流量啊,下载是早搞定了,但是服务一直在做种啊,100M的带宽不打到欠费才怪呢。
于是我痛定思痛,决定以后还是无耻的使用迅雷之类的东西好了。
另外本次疏忽还产生了很严重的附带损失:
开始有一堆二货疯狂的端口扫描我的机器了,这TM就很尴尬啊,吓得宝宝赶紧启动了防御姿势,把安全组全给封了。
那为毛要这么过激呢?
因为机器上有宝宝的渗透测试平台啊,大写的Hack me啊,这TM要是被坏孩子找到了还得了?
另外Jupyter也挂在上面啊,其他什么apache,nginx就不说了,这明摆着的一大堆漏洞(不,这不是漏洞,这简直是天坑啊)
所以宝宝决定老老实实的匿了,不在公网上乱打广告了~~