天翼校园客户端wifi3.3.39版本这么垃圾,wifi不能用,现在3.2.36版本版本不能用

怎样破解校园网不能共享wifi? - 知乎235被浏览<strong class="NumberBoard-itemValue" title="1,902分享邀请回答5524 条评论分享收藏感谢收起2316 条评论分享收藏感谢收起百度知道 - 信息提示
知道宝贝找不到问题了&_&!!
该问题可能已经失效。
秒以后自动返回当前位置:
天翼校园客户端
天翼校园客户端 旧版1.3
软件大小:10.60MB
软件语言:简体中文
软件类型:国产软件
软件授权:免费软件
更新时间:
软件类别:
应用平台:WinXP, Win7, Win8, WinAll
很多人还在怀念天翼校园客户端的WiFi共享功能,本次带来的就是旧版本1.3版本,这个版本是有WiFi共享功能能,有需要的可以下载使用。
&天翼校园客户端&是江苏电信为用户提供的宽带接入和应用集成软件,可对江苏电信天翼宽带WiFi、天翼宽带3G、天翼宽带1X以及有线宽带网络进行接入,为用户提供&无处不在&的网络接入能力,并通过集成简便实用的多种应用带给用户&无所不能&的应用感知。
1.3的无限制版,可以共享热点,经验证可以使用360随身wifi以及猎豹热点共享工具共享。
535.30MB|5.5
33.77MB|5.5
本站仅创建用户沟通交流的信息平台,所展示的游戏/软件内容来均来自于第三方用户上传分享,资源仅作为用户间分享讨论之用,除开发商授权外不以盈利为目的。如果侵犯了您的权益,请反馈,我们将第一时间处理。
下载排行榜
多媒体类丨0KB
网络工具丨0KB
微信号: 游迅网
扫描二维码添加
海量单机游戏免费下载!
您身边的手机游戏宝库!请问这个版本的天翼校园客户端可以用什么wifi_百度知道
请问这个版本的天翼校园客户端可以用什么wifi
我有更好的答案
联网之后,笔记本电脑自行分享WiFi.①首先要确保电脑的网络畅通(图标没有红色大叉)。有无线网卡设备。到开始菜单右键点击CMD命令提示符窗口图标→菜单中点击 以管理员身份运行。②在命令提示符窗口输入以下命令(按回车键执行命令):netsh wlan set hostednetwork mode=allow ssid = 电脑人人有 key = 123456相关说明:ssid → 是无线网络的用户名(可以自定义)key → 是无线密码(也可以自定义)③只要命令正确,就会生效了。而且还会显示以下提示:承载网络模式已设置为允许。已成功更改成在网络的SSID。已成功更改托管网络的用户密钥密码。④开始→运行→输入:ncpa.cpl 按回车键打开网络连接,就会多出一个虚拟的无线连接(此时还不能正常使用)。⑤再在命令提示符窗口输入启动承载网络的命令(按回车键打开):netsh wlan start hostednetwork执行命令成功会有提示:已启动承载网络。⑥再去网络连接中查看,这个无线连接的图标左下方,就没有禁用的红色大叉了。打开手机的WLAN,进行SSID搜索,再输入密码就能分享WIFI了。⑦如果想要关闭承载网络,也可以使用命令(按回车Enter键):netsh wlan stop hostednetwork参考资料:《笔记本分享WIFI》
采纳率:81%
来自团队:
为您推荐:
其他类似问题
勃兰兑斯的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&p&浏览过108个回答之后,吐血整理各个系列的经典书籍至此。&br&&b&并引入了14年行业经验独家收藏书籍,放在答案末尾,最精彩的往往在最后登场。&/b&&/p&&p&&b&希望收藏的朋友先点个赞!!(来自一位吐血整理的小v)&/b&&/p&&h2&&br&&b&计算机学习必读系列&/b&&/h2&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/5333562/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解计算机系统(原书第2版)&/a&
9.7分 2051人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/3852290/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&现代操作系统(第3版)&/a&
623人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1148282/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机程序的构造和解释 : 原书第2版&/a&
9.5分 1907人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1391207/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机网络(第4版) : 自顶向下方法&/a&
8.8分 692人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1929984/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据库系统概念 : 第五版&/a&
8.2分 397人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1052241/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&设计模式 : 可复用面向对象软件的基础&/a&
9.1分 2612人评价&/p&&h2&C++语言必读系列&/h2&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1139336/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C程序设计语言&/a&
9.4分 3953人评价&/p&&p&本书原著即为C语言的设计者之一Dennis M.Ritchie和著名计算机科学家Brian W.Kernighan合著的一本介绍C语言的权威经典著作。&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1885170/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&算法导论&/a&
4729人评价&/p&&p&这本书深入浅出,全面地介绍了计算机算法。对每一个算法的分析既易于理解又十分有趣,并保持了数学严谨性。&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/3296317/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编译原理&/a&
9.1分 752人评价&/p&&p&本书全面、深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1456860/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Design and Evolution of C++&/a&
52人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1767741/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C++ Primer&/a&
4165人评价&/p&&p&本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++。&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1459728/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Thinking in C++&/a&
9.0分 228人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1842426/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Effective C++&/a&
1045人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1241385/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&More Effective C++中文版&/a&
8.9分 452人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1792179/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Effective STL中文版&/a&
394人评价&/p&&p&&br&&/p&&h2&&b&Java语言必读系列&/b&&/h2&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/2130190/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java编程思想 (第4版)&/a&
9.1分 3014人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/2000732/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Head First Java(第二版·中文版)&/a&
946人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/2243615/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Head First 设计模式(中文版)&/a& 9.2分 2533人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1781451/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JAVA 2核心技术 卷Ⅰ : 基础知识&/a&
8.7分 242人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/3360866/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JAVA核心技术卷2 : 高级特性&/a&
252人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1052241/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&设计模式 : 可复用面向对象软件的基础&/a&
9.1分 2612人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解Java虚拟机(第2版) : JVM高级特性与最佳实践&/a&
8.9分 846人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/4241826/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&高性能MySQL(第二版)&/a&
395人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop权威指南:大数据的存储与分析(第4版)(修订版)(升级版)&/a&
7.7分 12人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spring实战(第4版)&/a&
200人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/4848587/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&分布式Java应用 : 基础与实践&/a&
7.8分 401人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程实战&/a&
772人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&大型网站技术架构 : 核心原理与案例分析&/a&
7.9分 1157人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/4199741/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&代码整洁之道&/a&
1162人评价&/p&&p&&br&&/p&&h2&&b&Python 语言必读系列&/b&&/h2&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Fluent Python&/a&
191人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/3112503/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python核心编程(第二版)&/a&
7.7分 1148人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/4212921/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python高级编程&/a&
7.6分 227人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据结构与算法:Python语言描述&/a&
7.5分 53人评价&/p&&p&&br&&/p&&h2&&b&编程与实践通读系列&/b&&/h2&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&白帽子讲Web安全&/a&
810人评价&/p&&p&在互联网时代,数据安全与个人隐私受到了前所未有的挑战,各种新奇的攻击技术层出不穷。如何才能更好地保护我们的数据?&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1140457/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&敏捷软件开发 : 原则、模式与实践&/a&
9.1分 1265人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&程序员的职业素养&/a&
512人评价&/p&&p&成为真正专业的程序员需要什么样的态度、原则,需要采取什么样的行动。&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编写可读代码的艺术&/a&
8.7分 739人评价&/p&&p&编码不仅仅只是一种技术,也是一门艺术,编写可读性高的代码尤其如此。如果你要成为一位优秀的程序员,要想开发出高质量的软件系统,必须从细处着手,做到内外兼修,本书将为你提供有效的指导。&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/3324516/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&实现模式&/a&
8.1分 231人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&领域特定语言&/a&
72人评价&/p&&figure&&img src=&https://pic3.zhimg.com/v2-f91f0a0d4af60db6fa65dcb92182ae1e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&735& data-rawheight=&727& class=&origin_image zh-lightbox-thumb& width=&735& data-original=&https://pic3.zhimg.com/v2-f91f0a0d4af60db6fa65dcb92182ae1e_r.jpg&&&/figure&&p&&b&小福利:想要获取此图片高清版可以去听这位老师的课程哦——&a href=&//link.zhihu.com/?target=https%3A//ke.qq.com/course/291097& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&程序员之路&/a&&/b&&/p&&h2&&b&流程与交付通读系列&/b&&/h2&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/4743056/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用户故事与敏捷方法&/a&
8.0 349人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/3390446/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&硝烟中的Scrum和XP : 我们如何实施Scrum&/a&
8.7分 465人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Google软件测试之道 : 像google一样进行软件测试&/a&
8.2分 729人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/6862062/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&持续交付 : 发布可靠软件的系统方法&/a&
8.6分 280人评价&/p&&p&&br&&/p&&h2&&b&提升与修炼通读系列&/b&&/h2&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/6709809/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&暗时间&/a&
8.4分 11793人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1020644/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&金字塔原理 : 思考、写作和解决问题的逻辑&/a&
8.1分 4232人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/5372651/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&程序员的思维修炼 : 开发认知潜能的九堂课&/a&
8.4分 1676人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1467587/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UNIX编程艺术&/a&
9.1分 2019人评价&br&本书内容涉及社群文化、软件开发设计与实现,覆盖面广、内容深邃,完全展现了作者极其深厚的经验积累和领域智慧。&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/4832380/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&分析模式 : 可复用的对象模型&/a&
8.5分 34人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&实现领域驱动设计&/a&
8.7分 132人评价&/p&&p&&br&&/p&&p&&b&最后再啰嗦几句,以上罗列的书籍当然并不是指望你在读大学的四年期间看完这些书籍,先不说编程语言种类的不同,单单是你的未来发展方向也有不同的适合书籍。&/b&&/p&&ul&&li&希望你首先选择合适的书籍&/li&&li&不要一股脑的将所有书籍都收集起来,你不是收集癖,相信选择这种办法的人最后往往阅读的书籍不超过3本&/li&&/ul&&hr&&p&&b&我是小v&/b&&/p&&p&&b&vNext学院最爱写文章的大妹子&/b&&/p&&p&&b&微公号:vNext编程
有很多针对于Java系统学习的福利资料,有需要的关注哦&/b&&/p&
浏览过108个回答之后,吐血整理各个系列的经典书籍至此。 并引入了14年行业经验独家收藏书籍,放在答案末尾,最精彩的往往在最后登场。希望收藏的朋友先点个赞!!(来自一位吐血整理的小v) 计算机学习必读系列 9.7分 2051…
&p&不知道你知道 一个当年依靠一段代码就可以随意出入所有个人计算机和服务器的“赛博空间之神”&b&袁仁广 &/b&的故事么&/p&&p&&br&&/p&&p&------正文分割线-----&/p&&p&&br&&/p&&h2&&b&黑客袁哥:关于我的几个故事&/b&&/h2&&p&&b&文|&/b& &a href=&https://www.zhihu.com/people/546e66ccb35b7de900a58b& class=&internal&&@史中&/a& 浅黑科技&/p&&p&&br&&/p&&p&&br&&/p&&blockquote&&b&一个真正的黑客,内心绝不平静。&/b&&/blockquote&&p&如果你见到袁哥,几乎会怀疑上述判断。你很难把眼前这个和善,甚至有些木讷的大叔和那个当年依靠一段代码就可以随意出入所有个人计算机和服务器的“赛博空间之神”联系起来。&/p&&p&但请相信我,一旦走进他的精神世界,你会看到惊涛骇浪。&/p&&p&相比文字和语言,袁哥更习惯用数字和代码抒情。一个沉默的人不断向世界索要答案,屡次掀翻了人们对赛博空间的根本认识。&/p&&p&现实就是这么惊悚,我们爱这样的剧情。&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-96377b6eaee1d7de88e0ef_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&437& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic4.zhimg.com/v2-96377b6eaee1d7de88e0ef_r.jpg&&&/figure&&p&&b&【袁哥 袁仁广】&/b&&/p&&p&&br&&/p&&h2&&b&一支笔,一本书,一局棋&/b&&/h2&&p&迷恋数学的人,身上都有一种冷峻的气息。当袁哥还是小袁哥的时候,确切地说在小学的时候,就已经每天捧着数学理论的书籍,站在呼啸而过的时间里。&/p&&blockquote&我生在农村,家里条件并不好,所以我只能在小学图书馆或镇上的新华书店看我喜欢的书。幸好我关心的数学方面的书籍,销量都不是太好。一毛钱、两毛钱就可以买一本。但即使是这样,我也很难买得起,只挑最喜欢的、最厚的同时也是最便宜的那一本买回家。&/blockquote&&p&到了中学的时候,袁哥已经开始看研究生的群论内容,《布尔代数》《对称恒等式》,你可以脑补同学们看他端着这些书时候的眼神。&/p&&p&买这些书,是需要代价的。&/p&&blockquote&&b&初中的时候,一支圆珠笔都是很好的文具了。有一次我和家里要了几毛钱想去买一支圆珠笔。但是正好我考试成绩很好,得到了学校奖励恰恰是一支圆珠笔。我告诉父母这就是我用钱买的笔,把省下来的钱买了一本书。&/b&&/blockquote&&p&这次事件,以哥哥“告密”,袁哥被父亲暴打结尾。那个年代,精神的脱贫走到了物质脱贫的前面。袁哥虽因一本书挨打,显然运气还不算太坏。&/p&&p&对数学和逻辑的偏执,让他得以用独特的视角和世界相处。&/p&&blockquote&我有个同学的哥哥喜欢下象棋,所以我对象棋残局很有兴趣。下残局的时候有一个重要的原则,那就是不能按照大多数人的思维考虑,而是要考虑所有逻辑上的可能性。比如在平时,你不会轻易拿车给别人吃,但是在残局里,你要考虑整个空间,其实每一步都可以抽象成布尔代数逻辑的一个步骤,用数学方法可以很好地解决这样的谜题。&/blockquote&&p& 除了是残局高手以外,少年袁哥还是扑克牌谜题高手,脑筋急转弯高手。也许对于他来说,这个世界上没有比严密的逻辑更性感的事物了。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-fa70181fe2c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&439& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/v2-fa70181fe2c_r.jpg&&&/figure&&p&&br&&/p&&p&&b&【时任山东大学校长,数学家潘承洞】&/b&&/p&&h2&&b&风语者&/b&&/h2&&p&因为仰慕山东大学校长、数学大师潘承洞的名望,严重偏科的袁哥依靠数学和物理两门几乎满分的成绩有惊无险地考入了山东大学数学系。不过,到了大学的袁哥面临一个棘手的问题,那就是几乎所有的课程他都在高中阶段完成了自学。坐在课堂上发呆睡觉对他来说是一种折磨。&/p&&p&&b&“我不想上大课,我喜欢自学,因为自学学得更快,也更深。”&/b&他的理由简单明了。袁哥在物色一个让他着迷的新世界,计算机就这样正式走进了他的生命。&/p&&p&年是袁哥的大学时代,当时的赛博世界还没有像今天这样连接成浩瀚的海洋。计算机病毒往往通过软盘从一台计算机传播到另一台计算机。袁哥回忆,当时就是想“搞明白病毒这块儿”。一旦袁哥想搞明白某件事情,那就是真的要搞、明、白。你懂的。&/p&&p&由于病毒的特殊属性,往往它们都藉由计算机底层逻辑传播。“追随”病毒的袁哥,也来到了赛博空间的底层。《汇编语言》《计算机原理》《操作系统原理》《磁盘控制器原理》,一节课都不去上的袁哥整日泡在图书馆里看这些书。&/p&&blockquote&学校里上机是要钱的,所以我不能总是待在机房。我在机房里用 debug 反汇编操作系统 BIOS 代码,遇到需要仔细研究的代码,我就用学校发的作业本手抄下来。有些代码翻译成高级代码没有几行,但因为我抄的都是底层的汇编代码,量非常大。后来我发现发的作业本都被我抄满了。&/blockquote&&p&对于他来说,大学四年获得的最强技能,就是掌握了和计算机灵魂沟通的能力——二进制语言。对于计算机来说,二进制代码就像每个人用来思考的“乡音”,没有任何一种语言比二进制语言更能直指“机器之心”。如今的袁哥在看二进制代码的时候,可以自动脑补出高级语言的源代码,能够像这样以计算机的世界观思考的人,全世界并不多。他就像一个“风语者”,口中的一段抒情诗在普通人眼中却像一阵风。&/p&&blockquote&&b&计算机的底层原理很枯燥,但如果感兴趣的话,你发现掌握这个原理能够理解和控制计算机的基本运行,这很舒服。如果你的计算机原理底子好,稍微加一些投入,基本都能成为大牛。&/b&&/blockquote&&p&袁哥斩钉截铁。&/p&&p&大学时代的袁哥不仅把各种编程语言烂熟于心,还从病毒身上见识了对这些语言最为诡谲精巧的运用。袁哥回忆道:&/p&&blockquote&例如当时著名的幽灵病毒,可以自动变形,这就突破了依靠病毒特征码查杀的规则;&br&例如 DIR 病毒,可以彻底绕过防毒卡的机制,创造出一个新的感染方式。&/blockquote&&h2&&b&“盗版贩子”往事&/b&&/h2&&p&对袁哥来说,跳出这个赛博世界的所有禁锢,是他内心不灭的江流。除了攻破学校机房的防毒卡导致病毒肆虐以外,破解当时叼炸天的杀毒软件“KV300”也是他的行动之一。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-7c96df970adbc2078c9bee3a08a8c7ed_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&438& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic2.zhimg.com/v2-7c96df970adbc2078c9bee3a08a8c7ed_r.jpg&&&/figure&&p&&b&【上世纪末最流行的杀毒软件(没有之一):KV 300 杀毒软盘】&/b&&/p&&blockquote&当时我在研究一个CPU运行的特别机制:DMA。一些信息由 CPU 直接传输,可能要等待很长时间,所以可以由 DMA 控制器直接控制内存实现辅助传输,为 CPU 分担一些工作。我发现这个机制是可以被利用的,因为每当 DMA 传输完成之后,会产生一个中断,如果在这个时候进行拦截,就可以解析出它对磁盘的操作内容。&b&用这种方法循环往复,就可以把整个杀毒软盘的信息读出来,完全绕过了它的加密技术。&/b&&br&&br&当时其他人做的破解盘,隔一段时间就会被江民公司封杀,但是我的破解盘,只要更新病毒库,就可以一直正常使用。&/blockquote&&p&对于当年的“作品”,袁哥还是很满意的。以至于当他因为英语没过四级而拿不到毕业证和学位证的时候,他甚至想到,如果实在找不到工作,就去卖盗版盘算了。“人家正版卖260、360,我只要十分之一的价格,26、36,应该生意不错。”&/p&&p&上天没有给袁哥成为“盗版贩子”的机会,他还是在海信谋得了一份单片开发的职位。&/p&&h2&&b&一鸣惊人&/b&&/h2&&p&熟悉另一位黑客启蒙者张迅迪的人都知道,因为供职的酒店最早接入宽带,他才走上安全研究道路,创立了黑客界的黄埔军校“安全焦点”。和张迅迪类似,袁哥接触互联网,是因为1997年海信就申请了网络专线,这使得袁哥可以在工作之余研究新的课题。这次,他想搞一下网络协议。你应该了解,按照袁哥的剧本,但凡被他“搞”,就一定被搞到外焦里嫩死去活来。&/p&&blockquote&我学习网络协议的时候,就一边看书记忆,一边反汇编成二进制代码对照看。这就像学英语,一边背单词,一边做对话才能记得牢。&/blockquote&&p&这个因为没考过英语四级而没毕业的黑客居然很有幽默感地拿英语举例子。&/p&&p&现实世界有无数种逻辑,而每一种逻辑,只要它存在,哪怕多么离奇,多么难以想象,可能都是改变世界的武器。袁哥抓住了一扇看起来怪异的逻辑之门。&/p&&blockquote&在 Windows 9X 中,很流行网络共享文档。我研究共享协议代码的时候发现,服务端对客户端进行密码验证的时候,密码长度校验是以客户端发来的信息为准。这件事情看上去非常奇怪。因为经验告诉我们,密码有多长,一定是要以服务器上存储的密码为准的。我马上写了验证代码,从客户端发送信息,告诉服务器只验证一个字节,服务器果然就只验证一个字节。而一个字节只有256种可能,非常好破解了。&/blockquote&&p&&b&袁哥黑进了同事和领导的电脑,一边看着他们的工资条,一边慨叹世界的神奇,一边立志要做一个网络安全专家。&/b&&/p&&p&&br&&/p&&b&&figure&&img src=&https://pic3.zhimg.com/v2-f0f4dddcf7a7cbc511c3343b04ede5f2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&553& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic3.zhimg.com/v2-f0f4dddcf7a7cbc511c3343b04ede5f2_r.jpg&&&/figure&&/b&&p&&br&&/p&&p&&b&【windows 98 界面(谨供怀旧)】&/b&&/p&&p&这是他发现的第一个真正意义上的漏洞。从此之后,袁哥一发不可收拾。&/p&&ul&&li&他发现了名噪一时的 Windows 共享密码验证漏洞,可以随意访问共享文件;&/li&&li&他参与创建国内老牌安全公司绿盟,研究出很多高危 IIS 服务器漏洞,可以随意访问任何 IIS 网站服务器;&/li&&li&他研究每个个人电脑都使用的 RPC 协议,发现了很多严重的 RPC 服务缓冲区漏洞,可以直接突破所有 Windows 计算机的权限,实现远程入侵。&/li&&/ul&&p&&br&&/p&&p&21世纪初,在迅速普及的互联网大潮中,很多技术爱好者登陆黑客论坛时,袁哥已经成为了黑客界的一盏精神灯塔。&/p&&p&&b&一开始,袁哥积极地把发现的漏洞提交给微软,但彼时的微软并不是如今那个愿意为漏洞买单的微软,对方不置可否的态度让袁哥逐渐丧失了提交的热情,以至于2001年当袁哥发现了可以用来攻击任何一台电脑的 RPC 服务的致命漏洞时,他选择了沉默。直到两年之后,美国18岁少年杰弗里通过同样的技术制造出冲击波蠕虫病毒,席卷半个世界。&/b&&/p&&h2&&b&数据流——赛博世界的盗梦空间&/b&&/h2&&p&虽然在2000年之前,微软对于白帽子的态度一直是冷漠的,但这并不妨碍袁哥对网络安全的探索。袁哥觉得,这是他人生最“高产”的时候。每天吃饭、睡觉、上厕所的时间都在想代码。他在考虑的最核心的命题是——能否用一个通用的安全模型来辅助甚至代替自己挖掘漏洞。&/p&&p&想要理解袁哥的工具,需要先了解漏洞的本质。&/p&&blockquote&&b&计算机的本质是程序处理。根据输入的数据不同,一串代码会在计算机内部打开无数不同的门,最终成为一个结果。而当输入的信息符合一定的特殊条件,它就会在计算机内部找到一扇奇特的门并且试图打开它。这时,赛博世界就会遭遇崩溃,一个漏洞就此产生。&/b&&/blockquote&&p&也就是说,找到这个特定的代码,就找到了可以击溃系统的漏洞。所以漏洞挖掘有两个主要方向:&/p&&blockquote&&b&1、模糊测试。&/b&模糊测试是黑盒测试的一种,通过随机给系统一些数据,观察系统是否有异常反应。然而,一个系统是如此庞大,输入的信息又有无数种可能,这个可能性空间之广袤是指数级的。所以如果盲目测试,即使到宇宙毁灭,甚至都不能测试所有可能性的亿亿分之一。&br&&br&&b&2、白盒测试。&/b&通过研究系统的源代码或二进制代码,发现其中的逻辑漏洞和潜在问题。这种方法同样存在问题,那就是对于一个复杂程序来说,代码量之巨大已经超越了人的阅读能力。而且一个程序中有很多是描绘界面内容的代码,这不是漏洞挖掘者关心的,而在阅读之前,你是无法把这些无用的代码剔除出来的。&/blockquote&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-a2e61e3f29cddd40cbcd93ad6f6d53cf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&481& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic4.zhimg.com/v2-a2e61e3f29cddd40cbcd93ad6f6d53cf_r.jpg&&&/figure&&p&&b&【软件运行的逻辑树示意图】&/b&&/p&&p&&br&&/p&&p&袁哥的工具结合了模糊测试和白盒测试,他称之为“数据流”的测试方法。&/p&&p&根据研究员的兴趣点,构造有针对性的数据,让系统进行处理。在处理的过程中,可以通过断点在调试器里查看程序运行的状态,而通过调试器里停留的代码,可以反向推测出是哪段代码在处理这段数据。用这种方法,不用通过大量的代码审计,就可以直接定位到关键的一段代码,对这段代码进行反汇编,就可以读懂它的“心思”。根据这段代码,可以推测出它的所有逻辑分支,从而根据这些全量的分支有针对性地重新构建新的数据,进行进一步的有针对性的尝试。&/p&&p&听上去似乎并不困难,然而这个系统的最难之处还未到来。&/p&&blockquote&&b&虽然你能看懂这段代码,但是你需要用数学的方法把这段代码的内容抽象出来,才能推演出它的所有逻辑分支,有些人类很好理解的逻辑,想要用程序自动化求解,就需要很复杂的逻辑描述。而且针对每一个细小的逻辑点,其后都可能跟随着极多的路径层级,在这种情况下同样有无数的可能性存在,这就涉及到约束求解的数学问题。&/b&&/blockquote&&p&袁哥说。&/p&&p&正如盗梦空间中所展现的那样,袁哥对于数字和世界逻辑的深刻见解,在赛博世界最深处的 Limbo,在只有几个字节的腾挪空间里,给了他洞悉真相的判断。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b5510bbfd84c1bbadc3881_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&419& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic2.zhimg.com/v2-b5510bbfd84c1bbadc3881_r.jpg&&&/figure&&p&&br&&/p&&h2&&b&上帝之手&/b&&br&&/h2&&p&2008年左右,微软难以抵挡无数漏洞的侵袭,开始逐步推出漏洞利用缓解措施。这类机制并不会减少漏洞出现,而是让漏洞的利用变得非常困难。它们就像一堵堵墙,你明知道漏洞就在对面,但是你却无法接近。包括 DEP、ASLR、emet,包括后来推出的 cfi 都是有效的漏洞利用缓解措施。&/p&&p&袁哥站在墙后面,准备“搞”一下。他突然觉得眼前的景象,像极了近十年前的一段记忆。&/p&&p&1997年的时候,宏病毒正在流行,这是一种利用脚本代码执行来搞破坏的病毒。由于病毒只能依靠文字属性的脚本进行攻击,所以包括金山在内的很多研究机构觉得这类病毒的破坏力非常有限,甚至说它“只能用来恶作剧”。&/p&&p&但袁哥不这么认为,他相信自己的判断:“宏代码虽然是解释执行,但解释执行也是执行,和机器码没有本质区别。”他写了几篇文章,证明了把二进制病毒代码编译成了纯文本格式的可能性。&b&也就是说,一个攻击程序可以看上去完全是字母和数字的样子。这大概相当于把一把沙土通过改变原子的排列结构而转化成了金子,让人叹为观止。&/b&&/p&&p&时光又回到2008年,袁哥突然发现,自己在十年前提出的世界观有可能从更高的维度绕过所有的漏洞缓解措施。那就是,用脚本(文字)代码编写攻击程序,通过某种精巧的设计,攻击过程中根本不会触发微软用以防护的 DEP 芯片。&/p&&p&然而,把一串攻击代码变成纯文本说起来简单,实现起来却非常繁杂。&/p&&p&两三个月的时间,袁哥做了如下N件事:&/p&&ul&&li&通读了 JavaScript 和 VBScript 的详细原理,补齐了代码编译的短板;&/li&&li&找到了 IE 上的攻击漏洞;&/li&&li&尝试了无数攻击路径,配置了很多漏洞的攻击组合;&/li&&li&完成攻击代码的编写和调试。&/li&&/ul&&p&&br&&/p&&p&&b&这个攻击方法,通杀从早期的 IE 3 到彼时刚推出的 IE 9 之间的所有版本。甚至两年后 IE 10 推出的时候,在不改动一个代码的情况下, 仍然可以完成攻击。这就是袁哥最引以为傲的技术:DVE(数据虚拟执行技术 ),他本人称之为“上帝之手”。&/b&&/p&&blockquote&&b&这就像在另一个更高维的空间里做出动作,所有人都无法看到动作的过程,只能承受动作的结果。&/b&&/blockquote&&p&他解释说。&/p&&p&代码,在袁哥眼里只是一种工具。站在“上帝位置”的人,甚至可以用一首诗,一首每个单词都有意义的诗来击溃一个系统。所谓“谈笑间,樯橹灰飞烟灭”不过如此。&/p&&p&&b&然而,这个游走在赛博空间的上帝终究还是触碰了人类的商业困境。2010年,微软想要用35万美金收购“上帝之手”——DVE 技术,但是这个技术在袁哥心中,远远超过这个价值。这个生意并没有成功,直到三年后,袁哥的好友,大名鼎鼎的黑客教主 TK 独立向微软提交了一套对抗技术,获得了那著名的十万美金。由于其中涉及到的技术和 DVE 技术有交集,微软才在某种程度上封堵了 DVE 攻击的一部分。&/b&&/p&&p&&b&2014年,袁哥选择在互联网上公布 DVE 的技术细节,曾经的上帝降落凡尘。&/b&&/p&&p&&br&&/p&&b&&figure&&img src=&https://pic3.zhimg.com/v2-f9b050bebe392_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&451& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic3.zhimg.com/v2-f9b050bebe392_r.jpg&&&/figure&&/b&&p&&b&【湛卢剑(一称湛泸)】&/b&&/p&&p&&b&湛泸&/b&&/p&&p&袁哥在期待自己的下一个 DVE。&/p&&p&为此,这位改写了互联网安全历史的黑客宗师加盟腾讯,建立了全新的实验室,名曰“湛泸”。&/p&&p&袁哥告诉 &/p&&p&&a href=&https://www.zhihu.com/people/546e66ccb35b7de900a58b& class=&internal&&@史中&/a&&/p&&p&:“湛泸,是春秋时代名匠欧冶子所铸名剑。‘仁义之剑,大巧若拙’是世人对湛泸的评价。”这也是已过不惑之年的袁哥的某种内心写照。他需要一把剑,一把能再次穿透云霄的剑。&/p&&p&&br&&/p&&p&对于袁哥来说,虽然自己的灵感和成绩无法被复制,但是他意识到,自己比以往更需要一个团队的配合。&/p&&blockquote&现在的漏洞挖掘和利用已经到了比较高级的阶段,如果没有团队和一整套技术力量支持,有些东西靠一个人的力量是做不到的。&/blockquote&&p&他说。&/p&&p&至于加入腾讯的原因,袁哥给出了简单的理由:“TK、吴石都在,我了解他们,对他们的为人都很认同。安全这个行业就是人聚人。”&/p&&p&&b&2016年3月,湛泸实验室成立。袁哥站在赛博世界的边疆,等待新的战友。&/b&&/p&&p&&b&那个让他成为上帝的瞬间,终会归来。&/b&&/p&&p&&br&&/p&&p&&i&再自我介绍一下吧。我叫&b&史中&/b&,是一个倾心故事的科技记者。&b&我的日常是和各路大神聊天。&/b&如果想和我做朋友,可以关注&b&微博:@史中方枪枪&/b&,或者搜索&b&微信:shizhongst&/b&。&/i&&/p&&p&&i&不想走丢的话,你也可以关注我的自媒体公众号“&b&浅黑科技”&/b&。&/i&&/p&&p&&/p&
不知道你知道 一个当年依靠一段代码就可以随意出入所有个人计算机和服务器的“赛博空间之神”袁仁广 的故事么 ------正文分割线----- 黑客袁哥:关于我的几个故事文|
浅黑科技 一个真正的黑客,内心绝不平静。如果你见到袁哥,几乎会怀疑上述判断。你…
&p&《The Linux Perf Master》是一本关于开源软件的电子书。本书与常见的专题类书籍不同,作者以应用性能诊断入手,尝试从多个不同的维度介绍以 Linux 操作系统为核心的开源架构技术体系。全书分为以下几个部分:&/p&&p&第一部分:介绍 Linux 性能诊断的入门方法。包括资源利用评估、性能监控、性能优化等工作涉及的工具和方法论,以 Stack Overflow 为例介绍一个真实的应用系统架构组成;&/p&&p&第二部分:基础设施管理工具。介绍 Ganglia,Ntop,Graphite,Ansible,Puppet,SaltStack 等基础设施管理 & 可视化工具;&/p&&p&第三部分:操作系统工作原理。介绍 Linux 操作系统工作原理(Not only Works,But Also How),从动态追踪技术的角度理解应用程序与系统行为;&/p&&p&第四部分:通信协议与网络工程。介绍基于 TCP/IP 协议的负载均衡技术,封包过滤技术和态势感知技术;微服务之后的挑战:分布式追踪系统;&/p&&p&第五部分:信息安全篇。介绍木马入侵、黑客攻击、防护与检测,IPv6 、容器等技术发展对安全工作的挑战;介绍信息安全法律;&/p&&p&第六部分:工程管理篇。尝试跳出 IT 视野讨论人才培养,DevOps 组织、效率和工程管理方法;&/p&&p&第七部分:社区文化篇。介绍黑客文化、开源作者、开发者社区和知识产权法,“技术首先是关于人的”(Technology is first about human beings)。&/p&&p&&br&&/p&&p&在线链接&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.gitbook.com/book/riboseyim/linux-perf-master/details& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&gitbook.com/book/ribose&/span&&span class=&invisible&&yim/linux-perf-master/details&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&快捷下载&/p&&p&- [Edition 0.3 ](&a href=&//link.zhihu.com/?target=https%3A//pan.baidu.com/s/1bppqKdL& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&pan.baidu.com/s/1bppqKd&/span&&span class=&invisible&&L&/span&&span class=&ellipsis&&&/span&&/a&)&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c6f4c44bb9cf8e887dc46104_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&851& data-rawheight=&315& class=&origin_image zh-lightbox-thumb& width=&851& data-original=&https://pic1.zhimg.com/v2-c6f4c44bb9cf8e887dc46104_r.jpg&&&/figure&&p&&/p&
《The Linux Perf Master》是一本关于开源软件的电子书。本书与常见的专题类书籍不同,作者以应用性能诊断入手,尝试从多个不同的维度介绍以 Linux 操作系统为核心的开源架构技术体系。全书分为以下几个部分:第一部分:介绍 Linux 性能诊断的入门方法。包…
&figure&&img src=&https://pic4.zhimg.com/v2-396fdcc7bf63f26f39b66d6f_b.jpg& data-rawwidth=&1600& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&https://pic4.zhimg.com/v2-396fdcc7bf63f26f39b66d6f_r.jpg&&&/figure&&h2&前言&/h2&&p&最近在我的 timline 上面出现了很多类似《前端为什么要学编译原理》这类文章以及《前端怎么学AST》这类的问题,但是却发现并没有人给大家介绍前端要如何以系统并且正确地学习编译原理,所以我就结合自己的经验以及走过的弯路来给大家分享点心得和经验,希望能让大家少走点弯路。&/p&&p&最后我并不是前端,只是恰好会写点 JavaScript 而已。&/p&&p&&br&&/p&&hr&&p&&br&&/p&&h2&目录&/h2&&p&上篇:&/p&&ul&&li&编译原理为什么难&/li&&li&怎么学好编程语言&/li&&li&代码到底是什么&/li&&li&正则与上下文无关文法&/li&&li&编程语言从 AST 才正式开始&/li&&/ul&&p&下篇:&/p&&ul&&li&静态分析&/li&&li&类型推导&/li&&li&AST 的转换&/li&&li&Conitnuation&/li&&li&字节码虚拟机&/li&&/ul&&p&&br&&/p&&hr&&p&&br&&/p&&h2&编译原理为什么难&/h2&&p&大家提起编译原理第一反应都是很难,难到无从下手,但是为什么难呢?说白了,编译原理不就是研究把一门语言解析并且转换成另一门语言的技术吗?这项技术到底有哪些地方成为了阻碍呢?我认为这个最大的阻碍其实就是“编程语言”本身。&/p&&p&我相信在看这篇文章的朋友至少已经学会了 JavaScript 了吧,但是我想多嘴问一句,大家真的懂 JavaScript 吗?能描述出 JavaScript 的语法规则吗?能理解语法所代指的逻辑结构吗?知道 JavaScript 是如何在被解释和执行的吗?所以,大家真的懂 JavaScript 吗?反正我是至今没有底气说自己”精通“ JavaScript ,原因是我还不懂如何实现一个 JIT。&/p&&p&我们多数时候称自己“精通”某编程语言的时候,仅仅指会熟练使用某编程语言,但是编译原理这门学科折腾的核心恰恰是编程语言,它要求我们对编程语言有深入的了解,了解它是如何构造和解释的。我们如果没有这项基础其实是很难学好这门学科的。&/p&&p&&br&&/p&&p&推荐阅读:&/p&&ul&&li&《七周七语言》——看看不同的编程语言都长什么样子&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E7%25BC%%25A8%258B%25E8%25AF%25AD%25E8%25A8%2580& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编程语言 —— 维基百科&/a& &/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E7%25BC%%25A8%258B%25E8%258C%%259E%258B& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编程范式 —— 维基百科&/a& &/li&&/ul&&p&&br&&/p&&hr&&p&&br&&/p&&h2&怎么学好编程语言&/h2&&p&部分国外高校的计算机专业喜欢用 Lisp 系的 Scheme 入门,一开始我并不明白其中缘由,直到我发现他们的课程作业中最后总会要求实现一个简易的 Lisp 解释器时我才恍然大悟。外国学校安排课程的水平真是高明,学校教 Scheme 可不是为了让学生拿来写工程代码,而是让学生学习编程以及编程语言本身到底是一个什么东西。&/p&&p&Lisp 是一门具备现代编程语言特性的几乎最简的实现,所有编程语言都是 Lisp 方言真的不仅仅是一句玩笑话。简易的 Lisp 的解释难度很低,Lisp 语法的解析只有解析 JSON 同等的难度,我们会经常看到很多新手用百来行代码就能实现一个 Lisp 解释器。虽然实现一个 Lisp 解释器不难,但是他对学生来说的意义非常重大,它能让学生们对编程语言和程序的构造和执行有一个非常非常基础但又非常全面的认识。而这种对编程语言全面的认识,也正是我们这些拿着 C/C艹 亦或者 JavaScript 入门的大家所缺失的。&/p&&p&所以如何学好编程语言?正途当然是啃我们的经典神书 《SICP》了,不过考虑到 《SICP》严重的教科书属性,讲地并不生动有趣,所以还是给大家推荐一个科普性质更强的书,叫做《计算的本质》大家可以用这本书先入门,如果学有余力或者非常有兴趣再去啃《SICP》。&/p&&p&&br&&/p&&p&推荐阅读:&/p&&ul&&li&《计算的本质:深入剖析程序和计算机》—— 科普版 SICP&/li&&li&《计算机程序的构造和解释》—— 经典神书,学有余力或者感兴趣再啃&/li&&li&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&《微信小程序也要强行热更代码,鹅厂不服你来肛我呀》&/a& —— 我自己写的文章,用 JavaScript 实现一个 JavaScript 解释器&/li&&/ul&&p&&br&&/p&&hr&&p&&br&&/p&&h2&代码到底是什么&/h2&&p&上一节我们提过,Lisp 的解析难度和 JSON 是一样的,那我们能不能干脆用 JSON 代替代码呢?当然可以,JavaScript 的解析后的语法树就是用 JSON 表示的。所以就表达能力来说,JavaScript 的代码和 JSON 是没有差别的。那么问题来了,代码到底是什么?&/p&&p&其实代码跟 JSON 一样,是一种结构化的文本数据格式。在这里我们要仅仅抓着两个特点——“文本”和“结构化”。&/p&&p&代码的第一个特点是文本,那意味着我们所有对字符串的拼接、截取或者替换等所有操作,都可以应用在代码上面。很多程序员虽然都能对各类文本的读写了如指掌,但大家好像都没有意识到代码文件,也可以是那个可以读写、修改的文件之一。&/p&&p&对代码文件的读写和操作是进入编译世界的第一个重要门槛,有的时候并不需要太复杂的算法就能够对代码做一些有意义的转换,比如我们可以直接通过正则分析 import / export / require 来实现一个简易的 webpack,比如在我之前一篇文章也是通过简单的正则优化尾递归代码。真正有意识地把代码文件当成文本文件以后,我们就能把代码从此拉下“神坛”,可以让大家能够像思考文本一样思考代码。&/p&&p&代码的第二个特点则是结构化。不知道大家能不能理解,代码里面除了字面量意外,其他部分都只是标识结构而并不具有实际意义,赋予这些结构意义是解释器如何和执行这段代码。这个特点就是要求我们在看待代码的时候,要在脑中形成一种结构,而不再是一行一行的字符串。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&var a = 123 // 除了字面量 123 外其他所有字符都是标识结构
&/code&&/pre&&/div&&p&比如上面这串简单的 JavaScript 代码,var 这是一个抽象符号,他是 var 也好是 val 也好,就算是 #%$ 都没有任何问题,唯一的目的就是标识了这个结构(语句)是一个声明赋值。变量名 a 标识的是一种联系,这个 a 具体是什么也是无关紧要的,只要它所标识的联系不变,a 也是可以替换成任何字符。这里面唯一有实际意义的就是那个 123,我不能把它换成 456。&/p&&p&知乎之前有一个问题问为什么一些大佬能够在两个星期内学会一门编程语言,我的回答是两个星期都够我们造一门编程语言了,就像 JavaScript 也就是 &a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E5%25B8%%2598%25AD%25E7%2599%25BB%25C2%25B7%25E8%2589%25BE%25E5%B& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&布兰登·艾克&/a& 大佬花了一个星期设计的。我虽然肯定不及这些大佬们,但是让我两个星期内拿 C艹 造一个 JavaScript 1.0 还是没什么太大问题的。所以只要把文章到这里之前推荐的书好好看了,基础补上了,那么其实大家每个人都能轻松在两个星期内学好一门编程语言。&/p&&p&最后还是要提一下,能够用两个星期学好一门编程语言并不代表能用两个星期学好一个领域。就像你不能说你学会了 JavaScript 就等于学会了前端,也不能说学会了 Python 就等于学会了人工智能(虽然现在很多坑爹培训班打着人工智能旗号教 Python 基础),编程语言仅仅是编程语言,仅仅是一个工具。&/p&&p&&br&&/p&&p&推荐阅读:&/p&&ul&&li&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&《尾递归为啥能优化?》&/a& —— 我写的文章,使用简单的字符处理来优化尾递归函数成循环&/li&&/ul&&p&推荐工具:&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//astexplorer.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AST Explorer&/a& —— 看看自己常写的 JavaScript 长什么样子&/li&&/ul&&p&&br&&/p&&hr&&p&&br&&/p&&h2&正则与上下文无关文法&/h2&&p& 这篇文章到这里已经是第四个小节了,但直到这里才算能够正式抱起我们的经典教材——龙书、虎书或者鲸鱼书进行学习了。这一节简单介绍一下编译器前端技术 —— Parser。&/p&&p&编译器前段就在干一件事,把代码这个结构化的文本文件解析成我们计算机可以理解的数据结构 —— 抽象语法树(AST)。解析代码是一个比较无聊、复杂而又繁琐的过程。这种复杂和繁琐是来由于编程语言本身语法设计的繁琐和复杂导致的。比如我们前文讨论过的 Lisp 由于语法设计的非常简单、一致而又无歧义,所以解析起来非常轻松,但是作为代价的就是 Lisp 那个被吐槽很多的括号括号括号。&/p&&p&解析代码一般分成两个步骤,第一个步骤是词法分析,将文本的代码转化成一个个 Token。看到这里的大家应该都有一些正则表达式的基础吧,在解析代码的过程中,我们需要用正则来分词做词法分析。在编译原理面我们学习正则的时候就不仅仅是学习正则表达式了,也会学习正则的内核 DFA,不过这部分难度不大就是了。&/p&&p&解析代码的第二个步骤是语法分析,语法分析是将我们上面词法分析出的 Token 转化成 AST。语法分析我们要学习上下文无关文法(CFG),并且可以用 BNF 这个表示。CFG 比正则表达能力更强,强在 CFG 能表达递归结构,常见的递归结构有表达式和代码块。在语法分析这个部分,会基本的 LL(1) 算法,能够对自顶向下的分析有足够的了解,就已经足够了。&/p&&p&无论是正则还是 CFG,他们都是在用一种形式语言(我们的编程语言也是一种形式语言),来描述一种抽象结构,所以在学习的过程中,脑子里面一定要这种从抽象结构的概念,能够事半功倍。&/p&&p&Parser 在编译原理里面是难点但却不是重点,所以在这一部分大家觉得复杂的算法完全可以跳过,不建议浪费太多时间。Parser 都是可以根据正则和 CFG 自动生成的,并不需要自己手写。所以这部分主要目的是学好的是正则和 CFG,那些复杂的算法学起来意义很小。&/p&&p&最后还有一个非常有趣的现象,正则表达式是上下文无关文法,而 BNF 却又是正则文法,大家可以想想为什么?&/p&&p&&br&&/p&&p&推荐阅读:&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.yinwang.org/blog-cn//parser& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&对 Parser 的误解&/a& —— 我自己的真正入门的文章&/li&&li&龙书、虎书或者鲸鱼书任选 —— 经典编译原理经典教材&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.yinwang.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&当然我在扯淡&/a& —— 垠神的博客,看的时候请自动屏蔽垠神的主观自嗨&/li&&/ul&&p&推荐工具:&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/acornjs/acorn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Acorn&/a& —— JavaScript Parser&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//regexper.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&REGEXPER&/a& —— 将正则表达式以图形的形式展示&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//ohmlang.github.io/editor/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ohm&/a& —— 可以可视化的 BNF 编辑器&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/zaach/jison& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jison&/a& —— 用正则和 BNF 构建通用的 Parser&/li&&/ul&&p&&br&&/p&&hr&&p&&br&&/p&&h2&编程语言从 AST 才正式开始&/h2&&p&其实在大多数眼里的编译原理,都停留在 Parser 这个阶段,因为大部分人都在学习的时候卡在了个这个阶段。但是事实上 Parser 不过是这个领域最表面的一层技术而已。编程语言从 AST 才算正是开始,只有到了 AST 的阶段,我们的计算机才可以对我们的编程语言进行包括分析、解释或者翻译,而我们前面我们所辛辛苦苦写的代码只不过是给我们这些愚蠢的人类看的罢了。&/p&&p&对编程语言 AST 的分析、转换、解释以及翻译理应是编译原理中最重要的一个部分,但由于我们经典编译原理书出版时间都比较早(1985年),并且也只着眼于当时流行的以 C 为主的编译型语言,所以它的重点都放在了解析代码和生成汇编两个部分。但是以现在的编程语言角度来看的话,前端有 Parser Generator,后端有 LLVM 那么我们更多的重点其实应该跟多地放在中端上来。&/p&&p&不过到这里为止,我们介绍的内容其实已经足够大部分小伙伴给自己写个 DSL,给自己写一个编译到 JavaScript 的小语言玩了。 但是这足够了吗?我们到底可以对 AST 做些什么呢?让我们下篇再见吧。&/p&&p&&br&&/p&&p&参考项目:&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/bramblex/blx-fsm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&bramblex/blx-fsm&/a& —— 自己造的用于描述 FSM 的玩具 DSL&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/bramblex/Smooth& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&bramblex/Smooth&/a& —— 自己造的玩具小语言&/li&&/ul&&h2&Hello World!&/h2&
前言最近在我的 timline 上面出现了很多类似《前端为什么要学编译原理》这类文章以及《前端怎么学AST》这类的问题,但是却发现并没有人给大家介绍前端要如何以系统并且正确地学习编译原理,所以我就结合自己的经验以及走过的弯路来给大家分享点心得和经验,…
&figure&&img src=&https://pic1.zhimg.com/v2-17e86edf8aa75ac1d2e73a9a0d8d32ea_b.jpg& data-rawwidth=&530& data-rawheight=&285& class=&origin_image zh-lightbox-thumb& width=&530& data-original=&https://pic1.zhimg.com/v2-17e86edf8aa75ac1d2e73a9a0d8d32ea_r.jpg&&&/figure&&p&写在前面的话&/p&&p&每年逢年过节,一票难求读者肯定不陌生。这篇文章,我们带领读者从零实现一款12306刷票软件,其核心原理还是通过发送http请求模拟登录12306网站的购票的过程,最后买到票。&/p&&p&关于http请求的格式和如何组装http数据包给服务器发送请求,我们在上一篇文章《从零实现一个http服务器》中已经详细介绍过了,如果还不明白的朋友可以去那篇文章看下。&/p&&p&&b&郑重申明一下:这里介绍的技术仅供用于学习,不可用于恶意攻击12306服务器,请勿滥用本文介绍的技术。对12306服务器造成的任何损失,后果自负。&/b&&/p&&p&&br&&/p&&p&当然,由于12306服务器用户量巨大,为了防止黄牛和其他一些非法攻击者,12306的很多url和在购票过程中各个步骤的协议细节经常发生变化。所以,本文中介绍的一些具体的url,可能在你看到本文时已经失效。但是这并没有关系,只要你掌握了本文中介绍的分析方法,您就可以灵活地修改您的代码,以适应最新的12306服务器的要求。举个例子,如12306的查票接口目前的url是:&a href=&http://link.zhihu.com/?target=https%3A//kyfw.12306.cn/otn/leftTicket/query& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&kyfw.12306.cn/otn/leftT&/span&&span class=&invisible&&icket/query&/span&&span class=&ellipsis&&&/span&&/a&,可能过几天就变成了&a href=&http://link.zhihu.com/?target=https%3A//kyfw.12306.cn/otn/leftTicket/queryX& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&kyfw.12306.cn/otn/leftT&/span&&span class=&invisible&&icket/queryX&/span&&span class=&ellipsis&&&/span&&/a&,再过几天又可能变成&a href=&http://link.zhihu.com/?target=https%3A//kyfw.12306.cn/otn/leftTicket/queryY& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&kyfw.12306.cn/otn/leftT&/span&&span class=&invisible&&icket/queryY&/span&&span class=&ellipsis&&&/span&&/a&,然后一个星期后又可能变成&a href=&http://link.zhihu.com/?target=https%3A//kyfw.12306.cn/otn/leftTicket/queryZ& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&kyfw.12306.cn/otn/leftT&/span&&span class=&invisible&&icket/queryZ&/span&&span class=&ellipsis&&&/span&&/a&,这些笔者都见过。所以,重在原理的学习,掌握了原理,不管12306的相关url变成什么样,都可以以不变应万变。哎,12306在与黄牛斗争的路上越走越远啊。T_T&/p&&p&本文将使用以下工具来分析12306购票的过程,然后使用C++语言,模拟相关的过程,最终购票。&/p&&p&1、Chrome浏览器(其他的浏览器也可以,都有类似的界面,如Chrome,装了httpwatch的IE浏览器等)&/p&&p&2、一个可以登录12306网址并且可以购票的12306账号&/p&&p&3. Visual Studio(版本随意,我这里用的是VS 2013)&/p&&p&&br&&/p&&p&&b&一、查票与站点信息接口&/b&&/p&&p&之所以先分析这个接口,是因为查票不需要用户登录的,相对来说最简单。我们在Chrome浏览器中打开12306余票查询页面,网址是:&a href=&http://link.zhihu.com/?target=https%3A//kyfw.12306.cn/otn/leftTicket/init& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&kyfw.12306.cn/otn/leftT&/span&&span class=&invisible&&icket/init&/span&&span class=&ellipsis&&&/span&&/a&,如下图所示:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-f0b0f3ad165c92af39e9cef_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1143& data-rawheight=&617& class=&origin_image zh-lightbox-thumb& width=&1143& data-original=&https://pic4.zhimg.com/v2-f0b0f3ad165c92af39e9cef_r.jpg&&&/figure&&p&&br&&/p&&p&然后在页面中右键菜单中选择【检查】菜单,打开后,选择【网络】选项卡。如下图所示:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-d90a9f45aa748bf8247c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&660& data-rawheight=&424& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&https://pic1.zhimg.com/v2-d90a9f45aa748bf8247c_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-b5a7ce0addd0938c35fce9b44d8de2a6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1219& data-rawheight=&503& class=&origin_image zh-lightbox-thumb& width=&1219& data-original=&https://pic3.zhimg.com/v2-b5a7ce0addd0938c35fce9b44d8de2a6_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&打开后页面变成二分窗口了,左侧是正常的网页页面,右侧是浏览器自带的控制台,当我们在左侧页面中进行操作后,右侧会显示我们浏览器发送的各种http请求和应答。我们这里随便查一个票吧,如查日从上海到北京的票,点击查询后,我们发现右侧是这样的:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-697b4adb8cca9c161811_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&580& data-rawheight=&497& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&https://pic2.zhimg.com/v2-697b4adb8cca9c161811_r.jpg&&&/figure&&p&&br&&/p&&p&通过图中列表的type值是xhr,我们可以得出这是一个ajax请求(ajax是浏览器原生支持的一种异步请求,详情请自行百度)。我们选择这个请求,你能看到这个请求的细节——请求和响应结果:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-419ecdc32a98_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&818& data-rawheight=&632& class=&origin_image zh-lightbox-thumb& width=&818& data-original=&https://pic1.zhimg.com/v2-419ecdc32a98_r.jpg&&&/figure&&p&&br&&/p&&p&在reponse中,我们可以看到我们的这个http的去除http头的响应结果:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-087dc8a6c6bbada64a2e894bc463f646_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&827& data-rawheight=&356& class=&origin_image zh-lightbox-thumb& width=&827& data-original=&https://pic3.zhimg.com/v2-087dc8a6c6bbada64a2e894bc463f646_r.jpg&&&/figure&&p&&br&&/p&&p&这是一个json格式,我们找个json格式化工具,把这个json格式化后贴出来给大家看一下,其实您后面会发现12306的http请求结果中与购票相关的数据基本上都是json格式。这里的json如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&{
&validateMessagesShowId&: &_validatorMessage&,
&status&: true,
&httpstatus&: 200,
&result&: [&null|23:00-06:00系统维护时间|5l|G102|AOH|VNP|AOH|VNP|06:26|12:29|06:03|IS_TIME_NOT_BUY|RLVVIt093U2EZuy2NE+VQyRloXyqTzFp6YyNk6J52QcHEA01||HZ|01|11|1|0|||||||||||1|有|13||O090M0|O9M|0&, &null|23:00-06:00系统维护时间|5l|G104|AOH|VNP|AOH|VNP|06:40|12:33|05:53|IS_TIME_NOT_BUY|j/TM45GgyJRRKvdalo3VIal8nYF7Hy9VL6njjGX3nOR3xwIu||HZ|01|09|1|0|||||||||||2|有|15||O090M0|O9M|0&, &null|23:00-06:00系统维护时间||G6|SHH|VNP|SHH|VNP|07:00|11:38|04:38|IS_TIME_NOT_BUY|SO6mCijnVzhdTrntsbeMoJ4Vuw/WsAnsBz80diva/wuIfsS5||H1|01|05|1|0|||||||||||1|5|8||O090M0|O9M|0&, &null|23:00-06:00系统维护时间|5l|G106|AOH|VNP|AOH|VNP|07:12|13:13|06:01|IS_TIME_NOT_BUY|Limy8VLpKgfmzb1EJZ0G7P8/Ai5iR7qbbwhplNeOVIxLQYab||HY|01|11|1|0|||||||||||1|11|12||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G108|AOH|VNP|AOH|VNP|07:22|13:23|06:01|IS_TIME_NOT_BUY|OJIuMonF9ctgAxxDpZRkNy0fn4HrG8Y+6ThVIAxtGrCWIp0N||HY|01|12|1|0|||||||||||无|6|3||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G110|AOH|VNP|AOH|VNP|07:28|13:38|06:10|IS_TIME_NOT_BUY|HVY2cA5DQzMC1VDiotEG4zXAOwG4fHHYq2bh1ZFhm47pySly||HY|01|11|1|0|||||||||||无|5|13||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G120|AOH|VNP|AOH|VNP|07:51|13:33|05:42|IS_TIME_NOT_BUY|G2C5o+MADORl4B9HQ2jmTdT2+fBnCbCXvfKCjqf0Fmm6fbU2||H6|01|08|1|0|||||||||||无|有|10||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G8|AOH|VNP|AOH|VNP|08:00|12:24|04:24|IS_TIME_NOT_BUY|dEqPPAVH6ICSdUQQwQ1ry/Ns0+QJCE2N+EZd4oC7FOmz855B||H6|01|04|1|0|||||||||||4|4|9||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G112|AOH|VNP|AOH|VNP|08:05|14:08|06:03|IS_TIME_NOT_BUY|j1BM0nZuw/phl6Z7WFxg0kFAc5Z4t+qKWZe3fjKB5ZR72nLl||HY|01|11|1|0|||||||||||无|3|2||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G114|AOH|VNP|AOH|VNP|08:15|14:13|05:58|IS_TIME_NOT_BUY|OwWGlKxfnPfPYGOuhjVhioA2r3kj2krs0zxNVD04+IDhPhfc||HY|01|11|1|0|||||||||||无|1|无||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G2|AOH|VNP|AOH|VNP|09:00|13:28|04:28|IS_TIME_NOT_BUY|8Q4veHYksOBLKJU03KPa0jbPDTgUByjp+UFMScwuarKvhZ+F||HY|01|04|1|0|||||||||||无|5|1||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G116|AOH|VNP|AOH|VNP|09:33|15:23|05:50|IS_TIME_NOT_BUY|jsCsXdkuWHZVgZ0YzaO+zWokRnnDQ4zowg78aRmc/hzNEMjK||HY|01|10|1|0|||||||||||无|6|2||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G118|AOH|VNP|AOH|VNP|24:00|24:00|99:59|IS_TIME_NOT_BUY||||H6|01|11|0|1|||||||||||||||||0&, &null|23:00-06:00系统维护时间|5l|G10|AOH|VNP|AOH|VNP|10:00|14:28|04:28|IS_TIME_NOT_BUY|ycAb36mk9wXaSIll0bTc5WbH8wLT1YRVjvGH/cYzAxIoVMcU||H1|01|04|1|0|||||||||||无|无|5||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|0|G42|HGH|VNP|AOH|VNP|10:26|16:08|05:42|IS_TIME_NOT_BUY|usY+Ul57hWKitIUp1d4m3n3e0ys4iJTdDfedKU6oXk7F3bAb||H6|04|13|1|0|||||||||||无|无|无||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G122|AOH|VNP|AOH|VNP|10:41|16:43|06:02|IS_TIME_NOT_BUY|tNu43MkXqpjkcIe80jbPhpSgQ3IOcIyLbwMSspllz0Btc3mJ||H6|01|12|1|0|||||||||||无|5|3||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G124|AOH|VNP|AOH|VNP|11:00|16:18|05:18|IS_TIME_NOT_BUY|otn+9ShYEtsJ+6yDQexyyomS8daAeRrvr958XuZ8C4hldEB1||H6|01|06|1|0|||||||||||1|8|3||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G126|AOH|VNP|AOH|VNP|11:05|17:05|06:00|IS_TIME_NOT_BUY|HIpEbr9n0fqeUtQGaASOBoD+/duc8JM5U1M602j0rnrf0XfA||H6|01|12|1|0|||||||||||4|8|无||O090M0|O9M|0&, &null|23:00-06:00系统维护时间|5l|G128|AOH|VNP|AOH|VNP|24:00|24:00|99:59|IS_TIME_NOT_BUY||||H1|01|12|0|1|||||||||||||||||0&, &null|23:00-06:00系统维护时间|5l|G130|AOH|VNP|AOH|VNP|11:20|17:29|06:09|IS_TIME_NOT_BUY|eaISX27C/T247JdvbJCFWkXvFimDh4W5rNAht1O5/1PhCbLN||H1|01|13|1|0|||||||||||无|无|2||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|0|G12|SHH|VNP|SHH|VNP|12:00|16:38|04:38|IS_TIME_NOT_BUY|GxssVQj1spkQVDnyUYodUASXXdwKUnuMjltjIAMwB2IbtIxC||H1|01|04|1|0|||||||||||无|无|无||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G132|AOH|VNP|AOH|VNP|12:17|18:32|06:15|IS_TIME_NOT_BUY|2obvVTZf5/iiIKfTAkXU8tDIK4dMypDrpaoQO0WhfqKp3b5h||H1|01|13|1|0|||||||||||无|2|4||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|I0|1462|SHH|BJP|SHH|BJP|12:18|10:46|22:28|IS_TIME_NOT_BUY|05Xf+SuYrrrVUcoitze9/BO1a6zlhm/43WFiXQjDEU7Z+hbDUoKqD2myF3Y=||H2|01|23|0|0||||2|||有||无|有|||||3|0&, &null|23:00-06:00系统维护时间|5l|G412|AOH|VNP|AOH|VNP|12:28|18:48|06:20|IS_TIME_NOT_BUY|CtWjFYsZE3ih/LiOPF03WQb8CvMe6jwdlqUwBRxKn3yRAn9F||H2|01|11|1|0|||||||||||无|2|2||O090M0|O9M|0&, &null|23:00-06:00系统维护时间|5l|G134|AOH|VNP|AOH|VNP|13:01|18:58|05:57|IS_TIME_NOT_BUY|AO3hxVofuYXk7l6EhzGCCEu4ZHPpS/0A/nkroM7xlpx/fIIX||H6|01|11|1|0|||||||||||3|6|12||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G136|AOH|VNP|AOH|VNP|24:00|24:00|99:59|IS_TIME_NOT_BUY||||H6|01|11|0|1|||||||||||||||||0&, &null|23:00-06:00系统维护时间|5l|G138|AOH|VNP|AOH|VNP|13:30|19:28|05:58|IS_TIME_NOT_BUY|qgHsrIv2ECcib/ImiXBHGt9Vis0yzPG8bKHoOZ0RgY7aE5sK||H6|01|12|1|0|||||||||||无|8|5||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G140|AOH|VNP|AOH|VNP|13:35|19:41|06:06|IS_TIME_NOT_BUY|ERb1/PPb8O6WfX503UB/hvYJsZO74WIYIjQsCisEZ4esappf||H6|01|13|1|0|||||||||||2|无|6||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G4|AOH|VNP|AOH|VNP|14:00|18:28|04:28|IS_TIME_NOT_BUY|2x7UHKlapgd4OJrubhQIW25wn5ZyA0jvumVcUSzkWJZu+9yr||H6|01|04|1|0|||||||||||无|3|1||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G142|AOH|VNP|AOH|VNP|14:10|20:18|06:08|IS_TIME_NOT_BUY|LuImd+o+UIDry0/CjwMAzgBtvfwyN4dSpjzXZnTQxN89PqQk||H6|01|11|1|0|||||||||||1|7|9||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G144|AOH|VNP|AOH|VNP|14:40|20:29|05:49|IS_TIME_NOT_BUY|xNsqS1nHci52T9o6E1hU3epRaV9cHSpKnl6i+5+2sWsHHOZQ||H6|01|10|1|0|||||||||||1|2|5||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G146|AOH|VNP|AOH|VNP|14:52|20:48|05:56|IS_TIME_NOT_BUY|jAmoXkDA3YgUo4lorosGtKbjeNZ15a764hrcb9URyVEUCWBU||H6|01|10|1|0|||||||||||1|6|13||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G14|AOH|VNP|AOH|VNP|15:00|19:36|04:36|IS_TIME_NOT_BUY|VyN8KW3DEeWDipXBnZoMhHHVf6m6YwwJ3QT5GnlQqbQPFOCK||H6|01|05|1|0|||||||||||2|2|1||O090M0|O9M|0&, &null|23:00-06:00系统维护时间|5l|G148|AOH|VNP|AOH|VNP|15:23|21:13|05:50|IS_TIME_NOT_BUY|v4DRs/7cxkGkWywbOoZYi/lM8FMuYWVO31zuFqaoPsWzuk2N||H6|01|11|1|0|||||||||||无|有|4||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G170|AOH|VNP|AOH|VNP|15:52|21:18|05:26|IS_TIME_NOT_BUY|OwWGlKxfnPfPYGOuhjVhioA2r3kj2krs0zxNVD04+IDhPhfc||H1|01|08|1|0|||||||||||无|1|无||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G150|AOH|VNP|AOH|VNP|16:05|22:00|05:55|IS_TIME_NOT_BUY|B+kl5hvzm26b184g8odo4t15OHC22ban1A1nGGF301bDERGO||H6|01|10|1|0|||||||||||1|有|8||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G152|AOH|VNP|AOH|VNP|16:18|22:12|05:54|IS_TIME_NOT_BUY|81VzXPX7cSnMfNL08HCNwU+u50GpJ+QNOZctnNmnxXE8onhQ||H6|01|10|1|0|||||||||||无|有|15||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G16|AOH|VNP|AOH|VNP|17:00|21:36|04:36|IS_TIME_NOT_BUY|1Tjp2E11rAd8KSvlP8BLxwfyqQNNurrS6nFPFNIumUhIkIX3||H6|01|05|1|0|||||||||||1|无|4||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G154|AOH|VNP|AOH|VNP|17:13|22:48|05:35|IS_TIME_NOT_BUY|FMIX4FHuTLpNf0wPQlJhJvoLN5kawBBXSs2PWGQJ/422H0c0||H6|01|08|1|0|||||||||||无|有|5||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G156|AOH|VNP|AOH|VNP|17:18|22:58|05:40|IS_TIME_NOT_BUY|wnJtQjVkFz37b4Xp1eP4obJTdrV9ioOqRUvqvJzy7+AYI7YL||H6|01|09|1|0|||||||||||1|有|17||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|B0|G44|HGH|VNP|AOH|VNP|17:23|23:08|05:45|IS_TIME_NOT_BUY|4M/BToLy7SoKriz9NLnM6EZwyFF9Tt//rrPb6JCTSb6DtMgW||H6|04|13|1|0|||||||||||8|无|1||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G158|AOH|VNP|AOH|VNP|17:34|23:29|05:55|IS_TIME_NOT_BUY|3qcvQyDRKrXX2hJGyupGQxH/evCUFK0TJKN6KMqh8Lzyu/dQ||H6|01|10|1|0|||||||||||1|有|15||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G160|AOH|VNP|AOH|VNP|17:44|23:48|06:04|IS_TIME_NOT_BUY|Fs4rA/vbQ+b+MOZP5UK4sCe4nmEcE9xJsA1SywdMcZ2otlav||H6|01|10|1|0|||||||||||有|有|有||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|5l|G18|AOH|VNP|AOH|VNP|18:00|22:36|04:36|IS_TIME_NOT_BUY|NEuxbLCppnaF8Fm+wuVXDFCSMsVBbOGsCrawCMD/YLarh6s3||H6|01|05|1|0|||||||||||1|5|4||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|61|T110|SHH|BJP|SHH|BJP|18:02|09:30|15:28|IS_TIME_NOT_BUY|Zqy8vHHz4tA2WNH/H1f8d2PE0pc2k+48QoX2hffwrKeUU8zTljDvKT0kSNLlww66AJUR/1v6ckE=||H3|01|09|0|0||无||无|||有||2|1||||||14163|0&, &null|23:00-06:00系统维护时间|5l|G22|AOH|VNP|AOH|VNP|19:00|23:18|04:18|IS_TIME_NOT_BUY|pbuRJ1NgYwLV0f1B6kNwLT1sMCL9o/+CDoQJ6vd1Kbe3GP+1||H6|01|03|1|0|||||||||||6|3|5||O0M090|OM9|0&, &null|23:00-06:00系统维护时间|70|D312|SHH|VNP|SHH|VNP|19:10|07:07|11:57|IS_TIME_NOT_BUY|QNf6TCZV01wG6pmiy2gz3lg/QUAA/Uvm||H3|01|04|0|0||||5||||||||||1|F040|F4|1&, &null|23:00-06:00系统维护时间|60|D322|SHH|VNP|SHH|VNP|19:53|07:45|11:52|IS_TIME_NOT_BUY|xtuqf0inq39vWyfVaA6GfBad2dPnjBk6||H3|01|03|0|0||||有|||||||无||||O040|O4|0&, &null|23:00-06:00系统维护时间|90|D314|SHH|VNP|SHH|VNP|21:07|08:55|11:48|IS_TIME_NOT_BUY|Lamvi3Rs8Nk3cxG7zey21PJvsuzo7v5O||H3|01|04|0|0||||有|||||||5||||O040|O4|0&],
&flag&: &1&,
&AOH&: &上海虹桥&,
&BJP&: &北京&,
&VNP&: &北京南&,
&SHH&: &上海&
&messages&: [],
&validateMessages&: {}
&/code&&/pre&&/div&&p&其中含有的余票信息在result节点中,这是一个数组。每个节点以|分割,我们可以格式化后显示在自己的界面上:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-d8ae005e5ec1dd6677c65c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&862& data-rawheight=&684& class=&origin_image zh-lightbox-thumb& width=&862& data-original=&https://pic1.zhimg.com/v2-d8ae005e5ec1dd6677c65c_r.jpg&&&/figure&&p&&br&&/p&&p&我这里做的界面比较简陋,读者如果有兴趣可以做更精美的界面。我们列下这个请求发送的http数据包和应答包:&/p&&p&请求包:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&GET /otn/leftTicket/query?leftTicketDTO.train_date=&leftTicketDTO.from_station=SHH&leftTicketDTO.to_station=BJP&purpose_codes=ADULT HTTP/1.1
Host: kyfw.12306.cn
Connection: keep-alive
Cache-Control: no-cache
Accept: */*
X-Requested-With: XMLHttpRequest
If-Modified-Since: 0
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0. Safari/537.36
Referer: https://kyfw.12306.cn/otn/leftTicket/init
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,q=0.9,q=0.8
Cookie: RAIL_EXPIRATION=5; RAIL_DEVICEID=WKxIYg-q1zjIPVu7VjulZ9PqEGvW2gUB9LvoM1Vx8fa7l3SUwnO_BVSatbTq506c6VYNOaxAiRaUcGFTMjCz9cPayEIc9vJ0pHaXdSqDlujJP8YrIoXbpAAs60l99z8bEtnHgAJzxLzKiv2nka5nmLY_BMNur8b8; _jc_save_fromStation=%u4E0A%u6D77%2CSHH; _jc_save_toStation=%u5317%u4EAC%2CBJP; _jc_save_fromDate=; _jc_save_toDate=; _jc_save_wfdc_flag=dc
HTTP/1.1 200 OK
Date: Sat, 19 May :58 GMT
Content-Type: application/charset=UTF-8
Transfer-Encoding: chunked
ct: C1_217_85_8
Content-Encoding: gzip
X-Via: 1.1 houdianxin183:6 (Cdn Cache Server V2.0)
Connection: keep-alive
X-Dscp-Value: 0
X-Cdn-Src-Port: 33963
Cache-Control: no-cache, no-store
&/code&&/pre&&/div&&p&&br&&/p&&p&通过上一篇文章《从零实现一个http服务器》我们知道这是一个http GET请求,其中在url后面是请求附带的参数:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&leftTicketDTO.train_date:
leftTicketDTO.from_station: SHH
leftTicketDTO.to_station: BJP
purpose_codes: ADULT
&/code&&/pre&&/div&&p&这四个参数分别是购票日期、出发站、到达站和票类型(这里是成人票(普通票)),正好对应我们界面上的查询信息:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-6c53d91efe8df087b72c96_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1022& data-rawheight=&386& class=&origin_image zh-lightbox-thumb& width=&1022& data-original=&https://pic3.zhimg.com/v2-6c53d91efe8df087b72c96_r.jpg&&&/figure&&p&&br&&/p&&p&但是,读者可能会问,这里的出发站和到达站分别是SHH和BJP,这些站点代码,我如何获得呢?因为只有知道这些站点编码我才能自己购买指定出发站和到达站的火车票啊。如果您是一位细心的人,您肯定会想到,我们查票的时候再进入查票页面,这些站点信息就已经有了,那么可能是在这个查票页面加载时,从服务器请求的站点信息,所以我们刷新下查票页面,发现果然是这样:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-64a02b69bf766f3ebae64_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1357& data-rawheight=&673& class=&origin_image zh-lightbox-thumb& width=&1357& data-original=&https://pic1.zhimg.com/v2-64a02b69bf766f3ebae64_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&进入查票页面之前,浏览器从&a href=&http://link.zhihu.com/?target=https%3A//kyfw.12306.cn/otn/resources/js/framework/station_name.js%3Fstation_version%3D1.9053& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&kyfw.12306.cn/otn/resou&/span&&span class=&invisible&&rces/js/framework/station_name.js?station_version=1.9053&/span&&span class=&ellipsis&&&/span&&/a&下载一个叫station.name.js文件,这是一个javascript脚本,里面只有一行代码,就是定义了一个station_names的js变量,之所以url地址后面加一个station_version=1.9053,你可以理解成版本号,但是主要是通过一个随机值1.9053,让浏览器不要使用缓存中的station_name.js,而是每次都从服务器重新加载下这个文件,这样的话如果站点信息有更新,也可以避免因为缓存问题,导致本地的缓存与服务器上的站点信息不一致。由于站点信息比较多,我们截个图把:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-5c7fa80f4daaf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1320& data-rawheight=&414& class=&origin_image zh-lightbox-thumb& width=&1320& data-original=&https://pic2.zhimg.com/v2-5c7fa80f4daaf_r.jpg&&&/figure&&p&&br&&/p&&p&看上图,我们可以看出来,每个站点信息都是通过@符号分割,然后通过|分割每一个站点的各种信息。这样的话,根据上文的格式假如我们要查询日从长春到南京的火车普通票,就可以通过网址&a href=&http://link.zhihu.com/?target=https%3A//kyfw.12306.cn/otn/leftTicket/query%3FleftTicketDTO.train_date%3D%26leftTicketDTO.from_station%3DCCT%26leftTicketDTO.to_station%3DNJH%26purpose_codes%3DADULT& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&kyfw.12306.cn/otn/leftT&/span&&span class=&invisible&&icket/query?leftTicketDTO.train_date=&leftTicketDTO.from_station=CCT&leftTicketDTO.to_station=NJH&purpose_codes=ADULT&/span&&span class=&ellipsis&&&/span&&/a&。&/p&&p&由于知乎文章字数限制,您可以继续阅读下一篇《从零实现一款12306抢票软件(二)》。&/p&&p&&br&&/p&&p&&b&文章版权所有,转载请保留版权申明。&/b&&/p&&p&&br&&/p&&p&&b&欢迎关注公众号『easyserverdev』。如果有任何技术或者职业方面的问题需要我提供帮助,可通过这个公众号与我取得联系,此公众号不仅分享高性能服务器开发经验和故事,同时也免费为广大技术朋友提供技术答疑和职业解惑,您有任何问题都可以在微信公众号直接留言,我会尽快回复您。&/b&&/p&&p&&br&&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//weixin.qq.com/r/DS_qsp3Em8DkrdnR93of& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&weixin.qq.com/r/DS_qsp3&/span&&span class=&invisible&&Em8DkrdnR93of&/span&&span class=&ellipsis&&&/span&&/a& (二维码自动识别)&/p&&p&&/p&&p&&/p&&p&&/p&&p&&/p&
写在前面的话每年逢年过节,一票难求读者肯定不陌生。这篇文章,我们带领读者从零实现一款12306刷票软件,其核心原理还是通过发送http请求模拟登录12306网站的购票的过程,最后买到票。关于http请求的格式和如何组装http数据包给服务器发送请求,我们在上一…
&p&说几个不是库的&/p&&p&OpenAFS,著名的分布式文件系统。&/p&&p&Memcached,没人不知道吧&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//code.google.com/p/cpp-btree/& class=& wrap external& target=&_blank& rel=&nofol

我要回帖

更多关于 天翼校园wifi破解2017 的文章

 

随机推荐