tigers55手机型号,,,怎么网上u盘查不到主控型号,手机就是这个型号,有谁知道么?

发说说,怎么显示和隐藏手机型号_百度知道
发说说,怎么显示和隐藏手机型号
我有更好的答案
  1、打开手机QQ,并登陆自己的QQ,然后找到“动态”栏,然后点击其中的“好友动态”,打开自己的QQ空间手机页面。  2、接下来,使用其中的“个性化”设置项,如图:  3、打开了个性化设置项,点击其中的“手机标识”栏,打开这个设置。  4、可以看到其中列出了设置的选项,可以选择自己想要显示的文字或者自定义,隐藏的话选择不显示即可。
资深电脑人
打开设置里面,最后一项关于手机,点击关于手机,里面有个手机名称 ,可以改或者删掉,就可以了
点击别人说说的手机型号就可以了
下载qq空间手机客户端。大小:8.7MB
版本:4.1.2.953
打开空间客户端登录后点击更多——设置或点击菜单键后点击设置点击我的手机标志选择你的你的手机型号或安卓或不显示。
其他1条回答
为您推荐:
其他类似问题
手机型号的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。安卓刷机的话,一定要选自己手机型号的rom吗?_百度知道
安卓刷机的话,一定要选自己手机型号的rom吗?
我有更好的答案
是的,必须是自己手机型号完全相符的ROM才可以刷。要不然,轻则手机无法正常使用,重则手机直接刷成砖(开不了机,连上电脑也无反应)。 手机的操作系统与电脑的操作系统还是有不同之处,因为兼容PC机是按照统一标准进行生产的,而手机则是不同的手机产商有不同的标准和技术,因此手机操作系统必须先经手机厂商进行适配(软硬件接口,硬件驱动程序)集成后才可以使用。
制造企业管理
不一定的,不过你最好这样选,因为现在的rom大部分是个人制作的,都是根据自己手机型号制作的,所以不一定能兼容你的手机
我这手机还没上市,所以网上没有他的rom,
但是我把里面的系统文件删了。。然后,想刷机,问下,如果变砖后,还能不能 继续刷?
一般不会变砖的,除非你真的操作严重失误。现在的手机大部分变砖后是可以刷回来的,当然这种情况我没有碰到过,但是一般可以刷回来。你可以进论坛看看,既然你的手机没有上市,可以进别的手机型号的版块,原理是通的
本回答被提问者采纳
刷机的时候看清楚ROM是否支持要刷的手机型号,有的虽然可以强刷,但是大部分都是需要适配的。
找自己一样型号的是为了兼容,如果你能找到同样兼容没问题的也可以刷的。
必须是一样的!!!不是就变砖!!!
其他2条回答
为您推荐:
其他类似问题
您可能关注的内容
安卓的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。搜不到vivoy73手机型号是怎么回事_百度知道
搜不到vivoy73手机型号是怎么回事
我有更好的答案
我们是没有y73的,是有y37的,Y37的主要参数如下:操作系统:Android5.0,Funtouch OS2.1系统。屏幕:5.5英寸IPS显示屏,分辨率拍照:1300W像素后置摄像头+500W像素前置摄像头处理器:64位八核1.4GHz高通骁龙处理器外观尺寸:154 x 77 x 6.79mm电池容量:2720mAh,不可拆卸电池重量:169g网络类型:双卡网络支持:移动2G、3G、4G 联通2G机身内存:2G RAM+16GB ROM扩展存储:最大支持128G Micro SD卡
vivo,专注智能手机领域。
主营:智能手机
为您推荐:
其他类似问题
您可能关注的内容
手机型号的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。手机液晶屏型号怎么看?_百度知道
手机液晶屏型号怎么看?
有人说手机液晶屏的型号是看液晶屏背后的一串数字,手机型号是长虹L158M,拆下来后我看不懂。上面有两串数字-NZG-ROWS-C0655AD
TM022GBH06
00CH22B1 A1 OMP11 008090
谁知道这些哪是液晶屏的型号啊 ?
还有怎么看...
我有更好的答案
TM022GBH06这个是液晶屏型号深圳天马微电子生产液晶屏的型号一般是这样的规则:2-3个英文字母,各公司使用不同的一些缩写代码然后是3位数字,表示屏幕尺寸然后是一串字母和数字,代表具体型号
采纳率:39%
为您推荐:
其他类似问题
您可能关注的内容
手机液晶屏的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&p&我一个学姐的故事,我觉得很黑暗吧。&/p&&p&所以不想绘声绘色说。&/p&&p&学姐,遇到一个追求她的学长,郎才女貌吧。&/p&&p&然后,顺理成章,毕业了就结婚。&/p&&p&我们一致公认是一对模范夫妻吧。&/p&&p&男的开了个广告公司,女的是公务员。&/p&&p&我去姐姐那办理业务,因为之前关系不错,我就多嘴一句:姐姐之前结婚喊我,我在国外礼到人没来,你们貌似还没孩子吧?孩子的满月酒我一定要来。我出双份的份子钱。&/p&&p&她一下神色不对,尴尬了会,说了句:我离婚了。&/p&&p&&b&你是不是会猜什么出轨之类的?这个太小儿科了。出轨这事在我看来真不算什么黑暗面。男的渣,女的贱才会这么做。比如我这种性子,遇到对方出轨,就问他是想死,还是不想活了。&/b&&/p&&p&出于同情,也出于好奇,我办完业务,死活拉着她一起吃午饭。&/p&&p&找了个包间之后,我就直接问是不是你男人出轨。&/p&&p&学姐,摇了摇头,苦笑了下:不是。&/p&&p&不是出轨,离婚?在我看来,不是出轨,那一切问题都可以迎刃而解啊。&/p&&p&我皱着眉头,表示我不理解。&/p&&p&学姐说了一句:你姐夫,哦,不,是他不能生。&/p&&p&我忽然明白为什么我在她办公室说满月酒份子钱的时候,她神情那么不对。&/p&&p&于是她不说话,我也不敢再问,气氛一下死寂起来。&/p&&p&过了许久,服务员进来说菜齐了,看着一桌子没动的菜,诧异的看着我。&/p&&p&我识趣的用支付宝结账后,轻轻催促学姐吃饭。&/p&&p&她没吃,忽然低头哭起来:&/p&&p&我为了他吃了多少药。&/p&&p&为了他打了多少针。&/p&&p&光取卵泡,全麻都难受得我生不如死。&/p&&p&我愣愣看着她,听着一些我听不懂的词汇,什么不能鲜移,什么子宫内膜增厚,什么卵裂胚,什么养囊。&/p&&p&只听她边哭边说了一堆后,我就明白一点,折腾的她生不如死,还是没有孩子。&/p&&p&&b&我明知故问了句,那没希望了吗?&/b&&/p&&p&&b&她哭着,没有抹泪,纸巾用光了,我想去帮她去前台拿,她阻止了我。特别哀凉说了句:我去医院陪他检查的时候,才发现,我自己也是多囊卵巢(之前不懂……)。所以要孩子就是难上加难了。&/b&&/p&&p&我点点头。&/p&&p&看她不停哭,却根本不知道怎么劝。&/p&&p&唯记得她那一句话,叫我特别心疼:&b&为什么他不能生,我愿意为他不顾一切。而我仅仅是怀孕困难,他却对我这么轻易放手。我是个女人啊,我没做错什么啊。&/b&&/p&&p&&b&为什么?&/b&&/p&&p&&b&我不知道那天怎么离开的。更不知道怎么回答她这句为什么。&/b&&/p&&p&&b&人说:冷不过人性,凉不过人心。&/b&&/p&&p&&b&如花美眷,终究敌不过,传宗接代,后继有人吧。&/b&&/p&&p&&b&本身想唾弃学姐的前夫。&/b&&/p&&p&&b&忽然想想,这医院里,多了去的因为女方不能生育就离婚的。多了去的自己不能生育,拿着爱逼着媳妇做试管婴儿的。更多了去因为第一胎是女娃,开放了二胎政策后,四十多岁还拼死生二胎。甚至听说过去香港测试性别,因为是女娃,又流了的。&/b&&/p&&p&&b&我忽然就无力说什么了。&/b&&/p&&p&&b&男的必须有子存焉,女的就必须接绍香烟。&/b&&/p&&p&&b&我看了知乎一个问题,关于男方不能生育,女方会不会嫁的提问。&/b&&/p&&p&&b&很多回答里,都是些做试管婴儿成功的,一脸骄傲说自己是幸运的,幸运的找了一个爱他的好老婆——这几位男士。&/b&&/p&&p&&b&我祝福你的同时,特想问一句,要是你老婆试管一直失败,或则中途她不愿意继续做了。&/b&&/p&&p&&b&那是不是代表,她就不是一个爱你的好老婆呢?(事实上,其中有个回答就让我特别恶心,他说,我老婆也很争气,总算成功了。看的出来,她是爱我的!我觉得这话怎么这么别扭!)&/b&&/p&&p&&b&到时候,那个所谓丈夫,还会坚定不移的不离不弃吗?&/b&&/p&&p&&b&我觉得,还是算了吧,不要回答了。因为那个提问下面的所有回答里,没有一个男人回答,他准备和妻子领养一个。&/b&&/p&&p&&b&或许这就是现实,这就是黑暗面。&/b&&/p&&p&&b&一如学姐和她前夫的结局。&/b&&/p&&p&&b&事实上,这种故事,在不孕不育的诊所门口真的屡见不鲜。&/b&&/p&&p&&b&+++++++++++++++++++++++++++++++&/b&&/p&&p&一早起来:又被有些评论再次恶心到了,忽然明白为什么学姐的前夫自己不能生育,还能抛弃她的这种做法,原来这种男人比比皆是。&/p&&p&传宗接代,生儿育女,无可厚非。这是人的天性,我没有攻击正常男人的意思。只是觉得,学姐的前夫,果断离婚找一个更适合做试管婴儿的妻子,额,应该是生育机器吧,这事真的让我呵呵哒了。&/p&&p&所以,我一开始写这篇故事的时候,就觉得,说不出的不舒服,现在看了评论,才豁然开朗。就是女的,不管你多爱你老公,多为这个家庭付出。只要你不能生孩子,甭管问题出在谁身上。你要自己身子有问题,趁早滚蛋,你要是不愿意配合试管婴儿,你也滚蛋,你要是试管婴儿失败了,你还是得背锅,你还是得滚蛋。&/p&&p&谢谢各位在评论里那些不要把爱情看得太重的苦口婆心。&/p&&p&可是,我一直认为咱们相信爱情,总不能一开始就要明白,爱情会死。&/p&&p&我本人,不是什么丁克人士,我骨子里很喜欢孩子,更觉得生孩子是爱情的结晶,任何人,想要后代无可厚非。但是,因为自己不能生,逼着老婆一定要试管婴儿,或则老婆不能生育,就离婚休妻,这事,我真的做不出来。&/p&&p&如果我的挚爱不能生育,我永远不会放开她/他的手。别的不想辩驳,只是觉得,做人再现实,也应心存希望,一如黑暗里,渴求光明一样。&/p&&p&所以,有些人私信不用骂我,有些事,司马昭之心路人皆知。我从来没说过反对做试管婴儿,我也没说反对生二胎。我觉得这些想法特别正常。&/p&&p&我恶心的是,试管婴儿失败了,就抛弃妻子的,我也鄙视40多岁辛苦怀了二胎,不是男娃就流掉的!随便你们怎么撕!这种人,我就是恶心,就是看不起!怎么了!?&/p&&p&知友说,学姐的多囊卵巢,是很可能情绪外加打激素的受孕排卵针所致。学姐的前夫,自己死精死精死精!!(说三遍!)从头到尾,她老婆不离不弃陪着他做试管,结果换来的是始乱终弃。&/p&&p&做试管的时候,就用爱绑架了自己爱人,最后试管婴儿失败,毫不犹豫抛弃,并且已经开始又物色下一个更好,更年轻的子宫。对,我学姐还没从悲伤里走出来,他已经开始去相亲了。&/p&&p&人心之恶毒和卑劣,我真的无语了。&/p&&p&我承认,陌不相干的人,我看都不会看一眼。但是,朋友不一样。我总认为,如果朋友陷入悲伤的旋涡里,你得拉他一把。就如抑郁症的患者,或许他会拒绝你,甚至攻击你,可是,你还是得拉他啊。&/p&&p&&b&别的我不多说了,我觉得,人性黑暗,真的多种多样。在评论区里,我真的大开眼界!心里清楚自己的底线,适婚男女一定要做好婚前检查!!&/b&&/p&&p&&b&++++++++++++++++++++++++++&/b&&/p&&p&&b&取匿,其实师姐这事,我早早就知道了,一直没写是因为这她私人的事。后来她知道我写知乎,她跟我说:弟啊,你可以把我的故事写下。那样可以警醒下别的女孩子。&/b&&/p&&p&&b&她说作为女人一厢情愿,到头来愿赌服输,扪心自问,从不后悔,可是结果是不值得!&/b&&/p&&p&&b&当初师姐告诉我的时候,差不多已经是四个月前的事情。我实在气不过,在一个提问下,&/b&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&磐石:女人会嫁没有生育能力的男生吗?&/a&写下这个答案。&/p&&p&所以我评论下面骂我女权癌,骂我是个无事生非的女人,让你们失望了,实在抱歉,我是个男人。&/p&&p&打你们脸,真不好意思,我始终认为,爱人和孩子,都重要,可是,任何事,都要分个先来后到。非要二舍一,我选爱人。&/p&&p&抛弃一个无怨无悔为你做了三年试管婴儿的女人,甭洗地了。女人这样付出,你跟我说这不算爱?&/p&&p&这种天生没生育能力的男人,不光是渣,更是丢男人的脸!还口口声声说压力大,自个儿种是坏的,怪地不行?所有我评论区里,大言不惭说着做男人没自己后代压力有多大的调调,真心替你们丢人!这么要孩子,自己想法子人工代孕啊!折腾一个原本健健康康的女人,折腾到她多囊,折腾到她青春不再,一句离婚是要孩子,是无奈的选择?活该老天断他的种!&/p&&p&别的话,我不想,也不会再更新了。&/p&
我一个学姐的故事,我觉得很黑暗吧。所以不想绘声绘色说。学姐,遇到一个追求她的学长,郎才女貌吧。然后,顺理成章,毕业了就结婚。我们一致公认是一对模范夫妻吧。男的开了个广告公司,女的是公务员。我去姐姐那办理业务,因为之前关系不错,我就多嘴一句…
&p&修改,经过@荒野大嫖客的纠正,是我把巴黎世家balenciaga拼成了balengiaca.我为我的不严谨道歉,希望各位搜索的时候不要搜错从而买到不需要的商品。&/p&&p&&br&&/p&&p&&br&&/p&&p&……对不起,我找不到廉价感的对应--高级感,所以就把答案写这里。本篇不是教人怎么低调又好看的,是教怎么穿的高级的,我不接抬杠,都是我自己观点,我一不靠这个挣钱二时间宝贵,只想提供参考给觉得我的意见有用的人。&/p&&p&&br&&/p&&p&1-不要再买SW靴子了,看起来太一般了,毫无亮点。&/p&&p&取代品:推荐巴黎世家袜子长靴。(图我是淘宝搜的,不要看上面的代购,我不知道卖真的卖假的这些都不要问,我也不负责。)&/p&&figure&&img src=&https://pic4.zhimg.com/v2-d02bcab8f5ff_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2880& data-rawheight=&2880& class=&origin_image zh-lightbox-thumb& width=&2880& data-original=&https://pic4.zhimg.com/v2-d02bcab8f5ff_r.jpg&&&/figure&&p&&br&&/p&&p&2尽量少点os跟卫衣,不是牌子的看起来都差不多(Low),是牌子的也是因为牌子看起来还好,也有少部分做的好的,亚历山大王算个正面例子,欢迎补充。&/p&&p&3,抛弃啵啵点,雪纺花边大规模蕾丝花边以及领口收的太死的裙子,哪怕他是华伦天奴。怎么看怎么像服务台小妹。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ffcebe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&820& data-rawheight=&1200& class=&origin_image zh-lightbox-thumb& width=&820& data-original=&https://pic3.zhimg.com/v2-ffcebe_r.jpg&&&/figure&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-3b3f991b845ee74c4ffe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&900& data-rawheight=&1200& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic3.zhimg.com/v2-3b3f991b845ee74c4ffe_r.jpg&&&/figure&&p&&br&&/p&&p&4,质感!质感!质感!裁剪裁剪裁剪!&/p&&p&淘宝名媛风不要买!不要买!不要买!照的再好看!穿到身上那个布料跟裁剪都是招人笑话的,&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e5a4fd4d03cb23b87c84_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&801& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/v2-e5a4fd4d03cb23b87c84_r.jpg&&&/figure&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-612bd7b12ce9d16c0636_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&750& data-rawheight=&1000& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic3.zhimg.com/v2-612bd7b12ce9d16c0636_r.jpg&&&/figure&&p&&br&&/p&&p&尤其是深圳现在很喜欢这种仿cd毛毛风,不要买,放弃吧真的。&br&越是看起来简单的款式就越讲究,我每次看我微信加的员工在里面美滋滋的拍照片,但那个裙子走线歪歪扭扭的时候,我就特别想帮她P好再发给她。&br&怎么看起来穿的高级点&/p&&p&1尽量买贵的(不是网红店,品牌店确实有点划不来,买那种独立设计师自己做的店,但我不知道有哪些,可以自己看看。),我的小助理送过我一件裁缝自己做的裙子,860,质感好的不得了。&br&2我个人的审美是倾向于针织羊绒衫的,羊绒衫配阔腿裤,各式各样精致的羊绒衫会让人看起来顺眼的多,我这里举的例子很多都是香奈儿,但不必要朝我这个来,就是个方向。当然,还是买贵的。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f4469fabe6dec5da23741_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&750& data-rawheight=&1000& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic2.zhimg.com/v2-f4469fabe6dec5da23741_r.jpg&&&/figure&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-13a70b2c4e5fcc287bf01d5f0e9b368a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&1503& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-13a70b2c4e5fcc287bf01d5f0e9b368a_r.jpg&&&/figure&&p&&br&&/p&&p&3,多穿点真丝,毛呢,绸缎(我也不知道叫什么反正就是很舒服很舒服)的裙子,尤其是礼服裙,不要层层叠叠的招人烦。less is more&/p&&figure&&img src=&https://pic4.zhimg.com/v2-fc2a597fa9869ace9427eb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&540& data-rawheight=&780& class=&origin_image zh-lightbox-thumb& width=&540& data-original=&https://pic4.zhimg.com/v2-fc2a597fa9869ace9427eb_r.jpg&&&/figure&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-bd3eb8e6f84_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&390& data-rawheight=&585& class=&content_image& width=&390&&&/figure&&p&&br&&/p&&p&配手包(推荐rv)&/p&&p&鞋这个还好,关注我的人大部分知乎写完了的极雷的问题是不会犯的,要我讲好看的话,gz的鞋款式我基本没买到过失望的,也可以自己搜一下看看往这方面靠。穿平底鞋我倾向于rv,上班下班什么时候都能穿。运动鞋可以参考一下华伦天奴的铆钉运动鞋,但是少穿点,都20的人了多穿裙子高跟跟皮鞋。&br&鞋子推荐:&br&Rv&br&Giuseppe zanotti &br&Maison margiela&br&Balengiaca袜子靴 买了不后悔&/p&&p&4,实际上我建议,花大价钱买衣服,花少的钱买包,衣服的质感影响整个人的精神面貌,而包买爆款只会过时的很快,而且我不建议买爱马仕,看着老。以下有几个参考的牌子&br&Okhtein&br&Destree&br&Maison margiela&br&Kawakawa&/p&&p&5胸针,配饰这些都带好了,墨镜不要老买常规款,有时候放开胆子也没什么&/p&&p&可能会说我的标准太高,我说明一下这里面的牌子都只是一个大概穿衣方向,并不是要你照着这么来,你可以去买有类似款但是物美价廉的,包并不贵,也可以找到类似款。都只是一个方向,如何摆脱太廉价的感觉,不要一身淘宝货背一个好包,看起来还是很拧巴,少穿点运动鞋,少穿点卫衣(尽量),如果学生觉得针织衫这些太老了,balengiaca有很多不错的衬衣,牛仔衣款式都可以参考,多去专柜转转。&/p&
修改,经过@荒野大嫖客的纠正,是我把巴黎世家balenciaga拼成了balengiaca.我为我的不严谨道歉,希望各位搜索的时候不要搜错从而买到不需要的商品。 ……对不起,我找不到廉价感的对应--高级感,所以就把答案写这里。本篇不是教人怎么低调又好看的,是教怎…
&p&每个人的气质里,&br&藏着他看过的书,走过的路,爱过的人。&br&&br&奇葩说的某一期,&br&辩题是伴侣应该找恋爱经验多还是恋爱经验少的。&br&柏邦妮说:心里那么苦的人,你要给他多少甜才能填满那个洞。台下一片唏嘘。&br&可马东老师突然说:&br&&br&他心里的苦越多,一丝甜就能填满。&br&&figure&&img data-rawwidth=&1136& data-rawheight=&640& src=&https://pic2.zhimg.com/v2-c4bc995b50dced4a7131_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1136& data-original=&https://pic2.zhimg.com/v2-c4bc995b50dced4a7131_r.jpg&&&/figure&&br&&br&&figure&&img data-rawwidth=&1136& data-rawheight=&640& src=&https://pic2.zhimg.com/v2-30fa4affe049f6e_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1136& data-original=&https://pic2.zhimg.com/v2-30fa4affe049f6e_r.jpg&&&/figure&&br&&br&&figure&&img data-rawwidth=&1136& data-rawheight=&640& src=&https://pic3.zhimg.com/v2-55a48ca03d510beb65f4ba_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1136& data-original=&https://pic3.zhimg.com/v2-55a48ca03d510beb65f4ba_r.jpg&&&/figure&&br&&br&&figure&&img data-rawwidth=&1136& data-rawheight=&640& src=&https://pic3.zhimg.com/v2-3e9ff3a64dabe21e316bf3a_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1136& data-original=&https://pic3.zhimg.com/v2-3e9ff3a64dabe21e316bf3a_r.jpg&&&/figure&&br&&br&&br&台下一片鼓掌欢呼。&br&&br&可那时候,我心里想起的全是他。&br&&br&我并非庆幸我是那个可以只用一点点的甜或许就能让他心满意足的人,&br&我只是一阵阵的难过。&br&&br&想起他那些在异乡独自与生活拼命的样子,&br&想起他曾经认真地付出但也会爱而不得,&br&想起那些没有人陪伴他喝醉后迷糊的深夜,&br&用酒精麻痹的颓废和强颜欢笑掩饰的难过。&br&&br&那些没有人牵着他走的夜路,&br&是不是特别心慌;&br&没有人陪他看过的好景色,&br&是不是总有些可惜;&br&&br&睡醒了手边缺一杯解渴的水,&br&翻来覆去的睡姿被子也掉到床下,&br&困顿时不小心打翻了垃圾也要强撑着困倦的身体收拾,&br&太多太多。&br&生活或许对谁都不曾温柔,&br&生活或许本不苦,只是拿欲望奈何。&br&可为何对他这样。&br&我眼中的至若珍宝为什么你们不知道珍惜,&br&为什么我最珍贵的人却要经历这么多坎坷。&br&&br&谁没有过去。&br&我幼儿园还说我要嫁给我同桌的小男孩呢。&br&我那时候也可喜欢他了。&br&现在呢,站在我面前我连打招呼的欲望都没有。&br&你是哪家来的,别挡路,一边去。&br&难道我要哭着闹着和全世界说“这也是我曾经想要过一辈子的人?”&br&搞笑的吧。&br&&br&还不认识他的时候,断断续续听过某些片面的故事。&br&在默默惊讶感慨的时候,却更想伸手抱抱这个男孩子。&br&往后认识他的每一天,都想对他更好一点。&br&想把这世上所有的美好凝炼成一颗糖,&br&放在他心上。&br&&br&&br&看着知乎上秀恩爱的故事,&br&总是懊恼自己怎么不够优秀,&br&怎么不像别的女孩子那么精致有思想有创意。&br&烘焙出来的东西看起来好丑怎么拿得出手,&br&在厨房学做菜差点把手切了,&br&想学点小女生做点什么玩意但想想他还是不需要。&br&&br&我只会遗憾难过,&br&为什么他的过去有那些坎坷。&br&&br&奇葩说的辩题其实深究起来就觉得没有意义。&br&何来的应该不应该,&br&只因你是我所爱。&br&爱哪有应该不应该。&br&&br&我明白,他的过去,属于他,属于那个姑娘。&br&偶尔也会低头不开心那些让他心动的过往。&br&也会闹着小性子去回避一些东西。&br&比如某首歌,都不太愿意听他唱起。&br&&br&但他握着我的手,关节分明,十指紧扣,&br&眼神滚烫而热烈,&br&臂弯舒适而宽广,&br&怀抱温暖而心安。&br&&br&我有所爱人。&br&&a href=&//www.zhihu.com/people/5cf9b38c8dbfa352d7f91c56& data-hash=&5cf9b38c8dbfa352d7f91c56& class=&member_mention& data-hovercard=&p$b$5cf9b38c8dbfa352d7f91c56&&@浅嘲君&/a&&/p&
每个人的气质里, 藏着他看过的书,走过的路,爱过的人。 奇葩说的某一期, 辩题是伴侣应该找恋爱经验多还是恋爱经验少的。 柏邦妮说:心里那么苦的人,你要给他多少甜才能填满那个洞。台下一片唏嘘。 可马东老师突然说: 他心里的苦越多,一丝甜就能填满。…
&figure&&img src=&https://pic1.zhimg.com/v2-d3149bcab8e9d96e08006a5e_b.jpg& data-rawwidth=&551& data-rawheight=&497& class=&origin_image zh-lightbox-thumb& width=&551& data-original=&https://pic1.zhimg.com/v2-d3149bcab8e9d96e08006a5e_r.jpg&&&/figure&&p&&b&3.26 -- 更新实验2,增加视频演示&/b& &/p&&p&&b&3.28 -- 更新实验3&/b&&/p&&p&&b&5.5 -- 更新实验4&/b&&/p&&p&&b&5.18 -- 更新实验5&/b&&/p&&hr&&p&有几个月没有写专栏文章了,因为笔者闭关了两个月学Python去了,废话不多说,进入正题。&/p&&p&随着这几年SDN等网络自动化技术的兴起,以Python为主的编程能力对传统网络工程师来说已经成为了一项高需求,甚至是必备的技能了。换句话来说,那些不具备编程能力,在工作中只会使用CLI或者GUI来操控网络设备的网工,不管是现在还是将来,他们在行业里的竞争力只会是只减不增的,这是大势所趋,不可避免的。笔者今年1月份面试了一份新加坡对冲基金公司(行业TOP3)的高薪Network Architect职位(年薪90万+RMB),在该职位的Job Description中就明确提出了Python,JAVA, TCL这些编程能力是strongly preferred的技能,后来笔者拿到了offer,但是因为薪水没谈拢,最终笔者并没返回新加坡,而是继续留在沙特阿卜杜拉国王科技大学(KAUST)工作。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c606d1cfed0_b.jpg& data-size=&normal& data-rawwidth=&1287& data-rawheight=&1106& class=&origin_image zh-lightbox-thumb& width=&1287& data-original=&https://pic3.zhimg.com/v2-c606d1cfed0_r.jpg&&&figcaption&新加坡某对冲基金公司(行业TOP3)的Network Architect职位JD&/figcaption&&/figure&&p&笔者从业9年,换了很多份工作,比较熟识的同事和同行不下60个。笔者没有在国内工作过,对国内的行业情况不甚了解,但是以笔者在新加坡工作7年,沙特2年的经验来看,目前我认识的具备了能将Python熟练使用在网络运维中这项能力的同行60个人中不超过3个,而这3位清一色的都是在知名的Tier 1运营商里工作,大型企业网和SME(中小型公司)中笔者还没见到会使用Python的同事和同行。可见这项技能在计算机网络这个行业里还远没达到“烂大街&的地步,至少在国外是如此,也因此给的起钱的金融业公司愿意高薪聘请会Python的网络工程师,物以稀为贵嘛。&/p&&p&笔者2014年用Mininet来学习和尝试SDN时曾短暂接触过Python,当时学了些皮毛,没有深入。在1月份的这次面试后,笔者下定决心重拾Python,目的有两个:1. 希望已过而立之年的自己在行业里依然保持足够的竞争力,能够迈过即将到来的职场中年危机。2. 笔者目前所任职的沙特国王科技大学校园网络相当庞大,3000多台的接入层交换机(均为思科Catalyst,50/都有)管理起来工作量是相当大的,虽然我们已经部署了Solarwinds Orion这个网络管理系统,但是这种第三方NMS软件是有技术壁垒的,出了问题要找厂商的TAC帮助排错,效率低下不说,还会受到运行这个NMS的服务器本身性能的影响,另外如果你将来换了工作,你能确保下一家公司使用的是同样的NMS吗?而反观Python则没有上述的顾虑。&/p&&p&这篇文章是笔者这两个月来自学Python的一些笔记和心得,外加一些在网络运用中的实战配置和代码。网上关于Python的入门教程多如牛毛,笔者就不浪费篇幅详细地讲解Python的基础知识了,笔者将给出一些自认重要的知识点,配合代码实战讲解。笔者目前仍然在坚持自学Python,本篇文章也将不定时持续更新,鉴于笔者本身也只是初学者,本着抛砖引玉的态度,如有不足之处,还望诸君不吝赐教、指正。&/p&&hr&&h2&&b&Python实验运行环境:&/b&&/h2&&p&操作系统:Windows 8.1上跑CentOS 7(VMware虚拟机)&/p&&p&&b&*笔者最早接触的LINUX版本就是CentOS,对比较热门的Ubuntu, Debian等并不熟,不同版本的LINUX有一些基本命令不一样,比如yum install和apt-get的区别,但这并不影响我们学习Python,如果读者对Linux不熟,希望你能花点时间学习下touch, chmod, cat, ls等等这些最基础的命令,以及掌握vim或者nano这些编辑文档的程序。&/b&&/p&&p&网络设备:GNS3运行的思科三层交换机&/p&&p&网络设备版本:思科IOS (vios_12-ADVENTERPRISEK9-M) &/p&&p&Python编辑器: Sublime Text 3.0 (很不错的编辑器,有朋友介绍Pycharm,还没来得及试用)&/p&&p&Python版本:2.7.5&/p&&p&&b&**这里解释下为什么不用最新的Python 3:&/b& Python 3.x是最新的Python版本,将来终会淘汰Python 2成为最主流的版本。&b&但是目前很多和计算机网络有关的模块比如Scapy, Trigger, easySNMP等在Python 3中并没得到很好的支持,&/b&就目前的趋势来看,离Python 3彻底淘汰Python 2至少还有10年的时间,而且2和3的区别虽然有,但是如果你彻底掌握了2的话,只需要一两天就能将3懂个80%,因此目前我们完全可以从2开始学起,另外2.7.5算是比较旧的版本,但是对初学者来说完全够用了。&/p&&p&网络实验拓扑:&/p&&p&局域网IP地址段:192.168.2.0 /24&/p&&p&运行Python的客户端: 192.168.2.1&/p&&p&Layer3Switch-1: 192.168.2.11&/p&&p&Layer3Switch-2: 192.168.2.12&/p&&p&Layer3Switch-3: 192.168.2.13&/p&&p&Layer3Switch-4: 192.168.2.14&/p&&p&Layer3Switch-5: 192.168.2.15&/p&&p&&b&所有的交换机已经预配好了SSH,用户名: python 密码:123&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-600c9bc4a7ffafdf0770d3e_b.jpg& data-size=&normal& data-rawwidth=&1345& data-rawheight=&708& class=&origin_image zh-lightbox-thumb& width=&1345& data-original=&https://pic2.zhimg.com/v2-600c9bc4a7ffafdf0770d3e_r.jpg&&&figcaption&网络实验拓扑&/figcaption&&/figure&&ul&&li&要让Python通过SSH远程登陆网络设备,主要有Paramiko和Netmiko两种模块可以使用(telnet的话需要使用telnetlib模块,但是鉴于telnet的安全性,不建议使用,关于telnet的应用以后有机会再讲)。Paramiko和Netmiko的区别在于后者是前者的命令简化版本,且支持多厂商设备,但是笔者本人更偏爱Paramiko,因此代码里将使用Paramiko来SSH登陆设备。&/li&&li&Paramiko并不是Python自带的package,我们必须下载并安装Paramiko,要安装Paramiko,首先要安装pip(yum install不支持), pip的作用是用来安装和管理Python pacakges的,在CentOS中安装Paramiko的步骤如下(因为是单纯的实验环境,我是直接用的root账户):&/li&&/ul&&p&A. 先安装pip&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&curl &https://bootstrap.pypa.io/get-pip.py& -o &get-pip.py&
python get-pip.py
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-b5bdf9c25f971ab32ffd_b.jpg& data-size=&normal& data-rawwidth=&2584& data-rawheight=&1102& class=&origin_image zh-lightbox-thumb& width=&2584& data-original=&https://pic3.zhimg.com/v2-b5bdf9c25f971ab32ffd_r.jpg&&&figcaption&在CentOS 7里安装pip&/figcaption&&/figure&&p&B. 安装好pip后,接着安装paramiko&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&pip install paramiko
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-4d83c8eaebb9feced8d146d_b.jpg& data-size=&normal& data-rawwidth=&1304& data-rawheight=&66& class=&origin_image zh-lightbox-thumb& width=&1304& data-original=&https://pic3.zhimg.com/v2-4d83c8eaebb9feced8d146d_r.jpg&&&figcaption&用pip安装Paramiko&/figcaption&&/figure&&p&C. 安装好Paramiko后,打开Python测试是否可以使用import paramiko来引用它,如果没报错,则说明安装成功。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-21ec9affbfad6_b.jpg& data-size=&normal& data-rawwidth=&2404& data-rawheight=&488& class=&origin_image zh-lightbox-thumb& width=&2404& data-original=&https://pic4.zhimg.com/v2-21ec9affbfad6_r.jpg&&&figcaption&测试Paramiko是否安装成功&/figcaption&&/figure&&hr&&h2&&b&实验1: &/b&&/h2&&p&&b&实验目的:&/b&&/p&&ol&&li&&b&用Python实现SSH登陆单个交换机(192.168.2.11),为其loop0端口配置1.1.1.1 /32这个IP。&/b&&/li&&li&&b&因为是第一个实验,为求最简单,最直观的代码,这里我们在代码里预设IP,username, password,不使用raw_input()函数和getpass模块。&/b&&/li&&/ol&&ul&&li&运行代码前,首先确认S1上的配置,此时S1上的loop0端口并没有IP&/li&&/ul&&figure&&img src=&https://pic4.zhimg.com/v2-8fb5fe9b6dadd0577b4faff8c0197a14_b.jpg& data-size=&normal& data-rawwidth=&903& data-rawheight=&535& class=&origin_image zh-lightbox-thumb& width=&903& data-original=&https://pic4.zhimg.com/v2-8fb5fe9b6dadd0577b4faff8c0197a14_r.jpg&&&figcaption&执行代码前S1配置&/figcaption&&/figure&&ul&&li&在CentOS上创建一个名为lab1.py的文件,将其改为可执行(否则等会儿你无法运行该script文件),然后用vim打开该文件,然后放入下列代码&/li&&/ul&&figure&&img src=&https://pic3.zhimg.com/v2-139b8c2d7a2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&597& data-rawheight=&100& class=&origin_image zh-lightbox-thumb& width=&597& data-original=&https://pic3.zhimg.com/v2-139b8c2d7a2_r.jpg&&&/figure&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&ch&&#!/usr/bin/env python&/span&
&span class=&kn&&import&/span& &span class=&nn&&paramiko&/span&
&span class=&kn&&import&/span& &span class=&nn&&time&/span&
&span class=&n&&ip&/span& &span class=&o&&=&/span& &span class=&s2&&&192.168.2.11&&/span&
&span class=&n&&username&/span& &span class=&o&&=&/span& &span class=&s2&&&python&&/span&
&span class=&n&&password&/span& &span class=&o&&=&/span& &span class=&s2&&&123&&/span&
&span class=&n&&ssh_client&/span& &span class=&o&&=&/span& &span class=&n&&paramiko&/span&&span class=&o&&.&/span&&span class=&n&&SSHClient&/span&&span class=&p&&()&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&set_missing_host_key_policy&/span&&span class=&p&&(&/span&&span class=&n&&paramiko&/span&&span class=&o&&.&/span&&span class=&n&&AutoAddPolicy&/span&&span class=&p&&())&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&connect&/span&&span class=&p&&(&/span&&span class=&n&&hostname&/span&&span class=&o&&=&/span&&span class=&n&&ip&/span&&span class=&p&&,&/span&&span class=&n&&username&/span&&span class=&o&&=&/span&&span class=&n&&username&/span&&span class=&p&&,&/span&&span class=&n&&password&/span&&span class=&o&&=&/span&&span class=&n&&password&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&s2&&&Sucessfully login to &&/span&&span class=&p&&,&/span& &span class=&n&&ip&/span&
&span class=&n&&command&/span& &span class=&o&&=&/span& &span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&invoke_shell&/span&&span class=&p&&()&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&configure terminal&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&p&&)&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&int loop 0&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&p&&)&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&ip address 1.1.1.1 255.255.255.255&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&p&&)&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&end&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&p&&)&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&wr mem&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/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=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&output&/span& &span class=&o&&=&/span& &span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&recv&/span&&span class=&p&&(&/span&&span class=&mi&&65535&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&n&&output&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&close&/span&
&/code&&/pre&&/div&&p&&b&实验1代码部分讲解:&/b&&/p&&ul&&li&除了Paramiko外,我们还import了time这个Python自带的模块,它的作用后面会讲到&/li&&li&ip, username, password这三个变量很直接明了,只需注意它们的类型必须是string(字符串)。&/li&&li&&i&sshclient = paramiko.SSHClient(), &/i&调用paramiko的SSHClient()方法&i&,&/i&将其assign给ssh_client这个变量。顾名思义,这里我们的CentOS主机是做SSH client,而SSH server则是我们要登陆的S1交换机(192.168.2.11)。&/li&&li&默认情况下,Paramiko会拒绝任何未知的SSH public keys,这里我们使用&i&ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) &/i&来让Paramiko接受来自SSH Server端(也就是S1)提供的public key。&/li&&li&&i&ssh_client.connect(hostname=ip,username=username,password=password)&/i&,很好理解,调用Paramiko的connect()函数,使用我们预设好的ip, username, password来登陆S1。&/li&&li&如果登陆成功,用&i&print &Sucessfully login to &, ip&/i&来提示用户登录成功,并显示所登陆的交换机的ip地址,这里为192.168.2.11&/li&&li&&i&command = ssh_client.invokeshell(),&/i&调用paramiko的invoke_shell()方法,将其assign给command这个变量。&/li&&li&现在可以让command配合send()这个函数来对交换机发号施令了,后面的命令就不讲了,这些对网工来说应该是整个script里面最熟悉的部分了。&/li&&li&&i&time.sleep(1),&/i&前面提到了我们import了time这个模块。有时候系统运行script时会有延迟,它的作用是让系统稍侯1秒钟,再执行下面的语句。&/li&&li&&i&output = command.recv(65535),&/i&python截屏本次运行script后的所有输出记录,将其assign给output这个变量。&/li&&li&&i&print output,&/i& 再将output打印出来,这样你在运行python的过程中就能清楚看到python sciprt对你的交换机做了些什么。&/li&&li&&i&ssh_client.close,&/i&最后记得养成好习惯,退出SSH。&/li&&/ul&&p&&br&&/p&&p&下面运行这段代码,看看效果:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-cdad4c40fceb32c1df64_b.jpg& data-size=&normal& data-rawwidth=&1551& data-rawheight=&851& class=&origin_image zh-lightbox-thumb& width=&1551& data-original=&https://pic4.zhimg.com/v2-cdad4c40fceb32c1df64_r.jpg&&&figcaption&代码执行效果&/figcaption&&/figure&&p&运行成功!Python成功登录了192.168.2.11,帮我们执行了要配置的命令,现在再登录S1,看看变化,
S1的loop 0端口已经成功配置了1.1.1.1 /32这个IP。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-6f322ba19ec9a38f8bb460dc0500098a_b.jpg& data-size=&normal& data-rawwidth=&640& data-rawheight=&254& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-6f322ba19ec9a38f8bb460dc0500098a_r.jpg&&&figcaption&代码执行后S1配置&/figcaption&&/figure&&hr&&h2&&b&实验2:&/b&&/h2&&p&&b&实验目的:&/b&&/p&&ol&&li&&b&配合getpass模块和raw_input()函数实现交互式的SSH用户名和密码输入。&/b&&/li&&li&&b&配合for loop同时给5台交换机配置VLAN 10至VLAN 20。&/b&&/li&&/ol&&ul&&li&运行代码前,首先确认5台交换机上的配置,确认它们都没有VLAN 10至VLAN 20。&/li&&/ul&&figure&&img src=&https://pic1.zhimg.com/v2-cbc3ee58296cabff214edcc3740cf72f_b.jpg& data-size=&normal& data-rawwidth=&1276& data-rawheight=&303& class=&origin_image zh-lightbox-thumb& width=&1276& data-original=&https://pic1.zhimg.com/v2-cbc3ee58296cabff214edcc3740cf72f_r.jpg&&&figcaption&执行代码前S1配置&/figcaption&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-7b2ef1a29ff40c410e4be93f7223aac8_b.jpg& data-size=&normal& data-rawwidth=&1282& data-rawheight=&303& class=&origin_image zh-lightbox-thumb& width=&1282& data-original=&https://pic1.zhimg.com/v2-7b2ef1a29ff40c410e4be93f7223aac8_r.jpg&&&figcaption&执行代码前S2配置&/figcaption&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-71afaf33ee701a5ff22e220e8f1a58e2_b.jpg& data-size=&normal& data-rawwidth=&1274& data-rawheight=&305& class=&origin_image zh-lightbox-thumb& width=&1274& data-original=&https://pic1.zhimg.com/v2-71afaf33ee701a5ff22e220e8f1a58e2_r.jpg&&&figcaption&执行代码前S3配置&/figcaption&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-dac551ecbb6bee48e053fa0cc5f42270_b.jpg& data-size=&normal& data-rawwidth=&1274& data-rawheight=&305& class=&origin_image zh-lightbox-thumb& width=&1274& data-original=&https://pic3.zhimg.com/v2-dac551ecbb6bee48e053fa0cc5f42270_r.jpg&&&figcaption&执行代码前S4配置&/figcaption&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-b6ea2e041186cadef65a4_b.jpg& data-size=&normal& data-rawwidth=&1272& data-rawheight=&307& class=&origin_image zh-lightbox-thumb& width=&1272& data-original=&https://pic2.zhimg.com/v2-b6ea2e041186cadef65a4_r.jpg&&&figcaption&执行代码前S5配置&/figcaption&&/figure&&ul&&li&在CentOS上创建一个名为lab2.py的文件,将其改为可执行,然后用vim打开该文件,然后放入下列代码&/li&&/ul&&figure&&img src=&https://pic1.zhimg.com/v2-402afc0c86c925e70bffc0aaaeb18467_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&607& data-rawheight=&96& class=&origin_image zh-lightbox-thumb& width=&607& data-original=&https://pic1.zhimg.com/v2-402afc0c86c925e70bffc0aaaeb18467_r.jpg&&&/figure&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&ch&&#!/usr/bin/env python&/span&
&span class=&kn&&import&/span& &span class=&nn&&paramiko&/span&
&span class=&kn&&import&/span& &span class=&nn&&time&/span&
&span class=&kn&&import&/span& &span class=&nn&&getpass&/span&
&span class=&n&&username&/span& &span class=&o&&=&/span& &span class=&nb&&raw_input&/span&&span class=&p&&(&/span&&span class=&s1&&'Username: '&/span&&span class=&p&&)&/span&
&span class=&n&&password&/span& &span class=&o&&=&/span& &span class=&n&&getpass&/span&&span class=&o&&.&/span&&span class=&n&&getpass&/span&&span class=&p&&(&/span&&span class=&s1&&'Password: '&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&mi&&11&/span&&span class=&p&&,&/span&&span class=&mi&&16&/span&&span class=&p&&):&/span&
&span class=&n&&ip&/span& &span class=&o&&=&/span& &span class=&s2&&&192.168.2.&&/span& &span class=&o&&+&/span& &span class=&nb&&str&/span&&span class=&p&&(&/span&&span class=&n&&i&/span&&span class=&p&&)&/span&
&span class=&n&&ssh_client&/span& &span class=&o&&=&/span& &span class=&n&&paramiko&/span&&span class=&o&&.&/span&&span class=&n&&SSHClient&/span&&span class=&p&&()&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&set_missing_host_key_policy&/span&&span class=&p&&(&/span&&span class=&n&&paramiko&/span&&span class=&o&&.&/span&&span class=&n&&AutoAddPolicy&/span&&span class=&p&&())&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&connect&/span&&span class=&p&&(&/span&&span class=&n&&hostname&/span&&span class=&o&&=&/span&&span class=&n&&ip&/span&&span class=&p&&,&/span&&span class=&n&&username&/span&&span class=&o&&=&/span&&span class=&n&&username&/span&&span class=&p&&,&/span&&span class=&n&&password&/span&&span class=&o&&=&/span&&span class=&n&&password&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&s2&&&Successfully connect to &&/span&&span class=&p&&,&/span& &span class=&n&&ip&/span&
&span class=&n&&command&/span& &span class=&o&&=&/span& &span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&invoke_shell&/span&&span class=&p&&()&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&configure terminal&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&n&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span& &span class=&p&&(&/span&&span class=&mi&&10&/span&&span class=&p&&,&/span&&span class=&mi&&21&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span& &span class=&s2&&&Creating VLAN &&/span& &span class=&o&&+&/span& &span class=&nb&&str&/span&&span class=&p&&(&/span&&span class=&n&&n&/span&&span class=&p&&)&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&vlan &&/span& &span class=&o&&+&/span& &span class=&nb&&str&/span&&span class=&p&&(&/span&&span class=&n&&n&/span&&span class=&p&&)&/span& &span class=&o&&+&/span&
&span class=&s2&&&&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&p&&)&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&name Python_VLAN &&/span& &span class=&o&&+&/span& &span class=&nb&&str&/span&&span class=&p&&(&/span&&span class=&n&&n&/span&&span class=&p&&)&/span& &span class=&o&&+&/span&
&span class=&s2&&&&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/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.5&/span&&span class=&p&&)&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&end&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&p&&)&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&wr mem&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/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=&mi&&2&/span&&span class=&p&&)&/span&
&span class=&n&&output&/span& &span class=&o&&=&/span& &span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&recv&/span&&span class=&p&&(&/span&&span class=&mi&&65535&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&n&&output&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&close&/span&
&/code&&/pre&&/div&&p&&b&实验2代码部分讲解:&/b&&/p&&ul&&li&这里import了getpass这个模块,用来提示用户输入密码。它和raw_input()函数一样,都是python的交互式功能,区别是,如果用rawinput()来提示输入密码的话,用户输入的密码是明文可见的,如果你身边坐了他人,密码就这么暴露了。而getpass输入密码时,则是不可见的,安全性很高,所以强烈建议使用getpass来输入密码,使用raw_input()来输入用户名&/li&&li&由于这里S1-S5五个交换机的ip是连续的,192.168.2.11 - 15, 这样我们可以配合&i&for i in range(11,16)&/i&做一个简单的for loop,然后以此配合下一行代码&i&ip = &192.168.2.& + str(i)&/i&来实现循环(批量)登录交换机S1至S5。注意:这里的i是整数,整数不能和字符串相“+”,所以要用str(i)先将i转化成字符串。&/li&&li&&i&for n in range (10,21): &/i&同样的道理,我们要创建VLAN 10 至 VLAN 20,VLAN id是连续的,所以这里又可以配合一个简单的for loop达到循环配置VLAN10 - 20。&/li&&/ul&&p&&br&&/p&&p&执行代码来看效果&/p&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/032640& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic2.zhimg.com/80/v2-b4a0f5ff7b94c553119d_b.jpg& data-lens-id=&032640&&
&img class=&thumbnail& src=&https://pic2.zhimg.com/80/v2-b4a0f5ff7b94c553119d_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/032640&/span&
&p&最后登陆所有交换机一一验证,检查代码是否创建了VLAN 10 至 20&/p&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/227584& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic4.zhimg.com/80/v2-b8e9d6bff317_b.jpg& data-lens-id=&227584&&
&img class=&thumbnail& src=&https://pic4.zhimg.com/80/v2-b8e9d6bff317_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/227584&/span&
&p&&br&&/p&&hr&&h2&&b&实验3:&/b&&/h2&&p&&b&实验目的:&/b&&/p&&ol&&li&&b&在生产环境中,交换机的管理ip地址基本不可能像实验环境中这样11到15连续的,有些交换机的管理ip甚至在不同的网段,这种情况下,我们就不能简单的用for loop来循环ip地址的最后一段来登录交换机了。这里我们要额外开一个文本文件,把我们需要登录的交换机ip全部写进去,然后用for loop配合open()函数来批量登录所有交换机。&/b&&/li&&li&&b&用上面的方法登录所有交换机,开启EIGRP .&/b&&/li&&/ol&&p&&br&&/p&&p&&b&开始实验3前,我们需要做两个准备:&/b&&/p&&ol&&li&&b&把S5的管理地址从192.168.2.15改成192.168.2.55&/b&&/li&&li&&b&创建一个名为ip_list.txt的文件,把S1,S2,S3,S4,S5交换机的管理IP地址放进去&/b&&/li&&/ol&&figure&&img src=&https://pic2.zhimg.com/v2-7b1affbffbe1f24f52f431_b.jpg& data-size=&normal& data-rawwidth=&1200& data-rawheight=&486& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic2.zhimg.com/v2-7b1affbffbe1f24f52f431_r.jpg&&&figcaption&把S5的地址改为192.168.2.55&/figcaption&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-f7b218c2d51ef19ac6aaeac700c5c98b_b.jpg& data-size=&normal& data-rawwidth=&666& data-rawheight=&271& class=&origin_image zh-lightbox-thumb& width=&666& data-original=&https://pic2.zhimg.com/v2-f7b218c2d51ef19ac6aaeac700c5c98b_r.jpg&&&figcaption&创建一个ip_list.txt文件,把所有交换机的管理IP放进去&/figcaption&&/figure&&p&&br&&/p&&p&准备就绪后,老规矩创建lab3.py,把它改成可执行,然后放入下列代码&/p&&figure&&img src=&https://pic3.zhimg.com/v2-01cd490d4ab7e4b52e0eadbf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&652& data-rawheight=&109& class=&origin_image zh-lightbox-thumb& width=&652& data-original=&https://pic3.zhimg.com/v2-01cd490d4ab7e4b52e0eadbf_r.jpg&&&/figure&&div class=&highlight&&&pre&&code class=&language-cirru&&&span&&/span&&span class=&nf&&#!/usr/bin/env&/span&&span class=&w&& &/span&&span class=&nv&&python&/span&
&span class=&nf&&import&/span&&span class=&w&& &/span&&span class=&nv&&paramiko&/span&
&span class=&nf&&import&/span&&span class=&w&& &/span&&span class=&nv&&time&/span&
&span class=&nf&&import&/span&&span class=&w&& &/span&&span class=&nv&&getpass&/span&
&span class=&nf&&username&/span&&span class=&w&& &/span&&span class=&nv&&=&/span&&span class=&w&& &/span&&span class=&nv&&raw_input&/span&&span class=&o&&(&/span&&span class=&nf&&'Username:&/span&&span class=&w&& &/span&&span class=&nv&&'&/span&&span class=&o&&)&/span&
&span class=&nf&&password&/span&&span class=&w&& &/span&&span class=&nv&&=&/span&&span class=&w&& &/span&&span class=&nv&&getpass.getpass&/span&&span class=&o&&(&/span&&span class=&nf&&'password:&/span&&span class=&w&& &/span&&span class=&nv&&'&/span&&span class=&o&&)&/span&
&span class=&nf&&f&/span&&span class=&w&& &/span&&span class=&nv&&=&/span&&span class=&w&& &/span&&span class=&nv&&open&/span&&span class=&o&&(&/span&&span class=&s&&&ip_list.txt&&/span&&span class=&nv&&,&/span&&span class=&s&&&r&&/span&&span class=&o&&)&/span&
&span class=&nf&&for&/span&&span class=&w&& &/span&&span class=&nv&&line&/span&&span class=&w&& &/span&&span class=&nv&&in&/span&&span class=&w&& &/span&&span class=&nv&&f:&/span&
&span class=&w&&
&/span&&span class=&nf&&ip&/span&&span class=&w&& &/span&&span class=&nv&&=&/span&&span class=&w&& &/span&&span class=&nv&&line.strip&/span&&span class=&o&&()&/span&
&span class=&w&&
&/span&&span class=&nf&&ssh_client&/span&&span class=&w&& &/span&&span class=&nv&&=&/span&&span class=&w&& &/span&&span class=&nv&&paramiko.SSHClient&/span&&span class=&o&&()&/span&
&span class=&w&&
&/span&&span class=&nf&&ssh_client.set_missing_host_key_policy&/span&&span class=&o&&(&/span&&span class=&nf&&paramiko.AutoAddPolicy&/span&&span class=&o&&())&/span&
&span class=&w&&
&/span&&span class=&nf&&ssh_client.connect&/span&&span class=&o&&(&/span&&span class=&nf&&hostname=ip,username=username,password=password&/span&&span class=&o&&)&/span&
&span class=&w&&
&/span&&span class=&nf&&print&/span&&span class=&w&& &/span&&span class=&s&&&Successfully connect to &&/span&&span class=&nv&&,&/span&&span class=&w&& &/span&&span class=&nv&&ip&/span&
&span class=&w&&
&/span&&span class=&nf&&remote_connection&/span&&span class=&w&& &/span&&span class=&nv&&=&/span&&span class=&w&& &/span&&span class=&nv&&ssh_client.invoke_shell&/span&&span class=&o&&()&/span&
&span class=&w&&
&/span&&span class=&nf&&remote_connection.send&/span&&span class=&o&&(&/span&&span class=&s&&&conf t&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&o&&)&/span&
&span class=&w&&
&/span&&span class=&nf&&remote_connection.send&/span&&span class=&o&&(&/span&&span class=&s&&&router eigrp 1&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&o&&)&/span&
&span class=&w&&
&/span&&span class=&nf&&remote_connection.send&/span&&span class=&o&&(&/span&&span class=&s&&&end&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&o&&)&/span&
&span class=&w&&
&/span&&span class=&nf&&remote_connection.send&/span&&span class=&o&&(&/span&&span class=&s&&&wr mem&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&o&&)&/span&
&span class=&w&&
&/span&&span class=&nf&&time.sleep&/span&&span class=&o&&(&/span&&span class=&nf&&1&/span&&span class=&o&&)&/span&
&span class=&w&&
&/span&&span class=&nf&&output&/span&&span class=&w&& &/span&&span class=&nv&&=&/span&&span class=&w&& &/span&&span class=&nv&&remote_connection.recv&/span&&span class=&o&&(&/span&&span class=&nf&&65535&/span&&span class=&o&&)&/span&
&span class=&w&&
&/span&&span class=&nf&&print&/span&&span class=&w&& &/span&&span class=&nv&&output&/span&
&span class=&nf&&f.close&/span&&span class=&o&&()&/span&
&span class=&nf&&ssh_client.close&/span&
&/code&&/pre&&/div&&p&实验3代码部分讲解:&/p&&ul&&li&用&i&open(&ip_list.txt&, &r&)&/i&来打开我们实验前创建好了的ip_list.txt这个保存所有交换机管理地址的文档,后面的&r&表示只读,可写可不写,因为默认就是它。&/li&&li&&i&for line in f: &/i&用for loop读取ip_list.txt文档里的每一行内容,每一行都是交换机的管理地址。&/li&&li&&i&ip = line.strip(),&/i&用strip()去掉多于的空格然后把结果assign给ip这个变量。&/li&&li&&i&f.close(), &/i&文件有开有关,养成好习惯,用完后记得关闭。也可以用with
as的语句来写,这样不需要用close()来关闭已打开的文件,这个看个人喜好,初学者用简单的 f = open(),f.close()就够用了。&/li&&/ul&&p&老规矩,执行代码前登陆所有交换机,确认目前没有EIGRP开启:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e030c4ad0dd7fa72c3e01661cc7ccbb2_b.jpg& data-size=&normal& data-rawwidth=&374& data-rawheight=&69& class=&content_image& width=&374&&&figcaption&执行实验3代码前S1配置&/figcaption&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-fa2ce6041dbbbfab_b.jpg& data-size=&normal& data-rawwidth=&396& data-rawheight=&76& class=&content_image& width=&396&&&figcaption&执行实验3代码前S2配置&/figcaption&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-07bbe17ffeabc_b.jpg& data-size=&normal& data-rawwidth=&394& data-rawheight=&72& class=&content_image& width=&394&&&figcaption&执行实验3代码前S3配置&/figcaption&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-9d95e5c95b9e0133e57eed_b.jpg& data-size=&normal& data-rawwidth=&396& data-rawheight=&75& class=&content_image& width=&396&&&figcaption&执行实验3代码前S4配置&/figcaption&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-8e2be7ea1e5023fbe7734_b.jpg& data-size=&normal& data-rawwidth=&399& data-rawheight=&79& class=&content_image& width=&399&&&figcaption&执行实验3代码前S5配置&/figcaption&&/figure&&p&&br&&/p&&p&&br&&/p&&p&一切就绪后,执行代码看效果:&/p&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/579264& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic3.zhimg.com/80/v2-3ae083b8c1afac197becc2e0af45a406_b.jpg& data-lens-id=&579264&&
&img class=&thumbnail& src=&https://pic3.zhimg.com/80/v2-3ae083b8c1afac197becc2e0af45a406_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/579264&/span&
&p&最后登陆所有交换机一一验证EIGRP是否已经开启:&/p&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/066688& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic3.zhimg.com/80/v2-adb76a7db066ed7e355ee_b.jpg& data-lens-id=&066688&&
&img class=&thumbnail& src=&https://pic3.zhimg.com/80/v2-adb76a7db066ed7e355ee_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/066688&/span&
&hr&&h2&&b&实验4:&/b&&/h2&&p&前面的例子提到了,要使用Python来批量连接网络设备,可以把设备的IP地址写入一个文本文件,然后在代码里使用for循环配合open()函数以及readlines()函数逐行读取该文本文件里的IP地址,达到循环批量登录多台网络设备的目的。&br&&br&在成功登录网络设备后,我们又可以配合command.send()来对网络设备发号施令,但在前面的例子中我们都是将要输入的命令预先写在了代码里面,比如command.send(&conf t\n&),command.send(&router eigrp 1\n&), command.send(&end\n&)。&br&&br&举例如下:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# -- coding: UTF-8 --&/span&
&span class=&kn&&import&/span& &span class=&nn&&paramiko&/span&
&span class=&kn&&import&/span& &span class=&nn&&time&/span&
&span class=&kn&&import&/span& &span class=&nn&&getpass&/span&
&span class=&n&&username&/span& &span class=&o&&=&/span& &span class=&nb&&raw_input&/span&&span class=&p&&(&/span&&span class=&s1&&'Username: '&/span&&span class=&p&&)&/span&
&span class=&n&&password&/span& &span class=&o&&=&/span& &span class=&n&&getpass&/span&&span class=&o&&.&/span&&span class=&n&&getpass&/span&&span class=&p&&(&/span&&span class=&s1&&'password: '&/span&&span class=&p&&)&/span&
&span class=&n&&f&/span& &span class=&o&&=&/span& &span class=&nb&&open&/span&&span class=&p&&(&/span&&span class=&s2&&&ip_list.txt&&/span&&span class=&p&&,&/span&&span class=&s2&&&r&&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&line&/span& &span class=&ow&&in&/span& &span class=&n&&f&/span&&span class=&o&&.&/span&&span class=&n&&readlines&/span&&span class=&p&&():&/span&
&span class=&n&&ip&/span& &span class=&o&&=&/span& &span class=&n&&line&/span&
&span class=&n&&ssh_client&/span& &span class=&o&&=&/span& &span class=&n&&paramiko&/span&&span class=&o&&.&/span&&span class=&n&&SSHClient&/span&&span class=&p&&()&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&set_missing_host_key_policy&/span&&span class=&p&&(&/span&&span class=&n&&paramiko&/span&&span class=&o&&.&/span&&span class=&n&&AutoAddPolicy&/span&&span class=&p&&())&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&connect&/span&&span class=&p&&(&/span&&span class=&n&&hostname&/span&&span class=&o&&=&/span&&span class=&n&&ip&/span&&span class=&p&&,&/span&&span class=&n&&username&/span&&span class=&o&&=&/span&&span class=&n&&username&/span&&span class=&p&&,&/span&&span class=&n&&password&/span&&span class=&o&&=&/span&&span class=&n&&password&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&n&&username&/span&&span class=&p&&,&/span& &span class=&s2&&& You have successfully connect to &&/span&&span class=&p&&,&/span& &span class=&n&&ip&/span&
&span class=&n&&command&/span& &span class=&o&&=&/span& &span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&invoke_shell&/span&&span class=&p&&()&/span&
&span class=&c1&&#在代码里预设好要输入的命令&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&conf t&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&p&&)&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&router eigrp 1&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span&&span class=&p&&)&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&end&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/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=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&output&/span& &span class=&o&&=&/span& &span class=&n&&remote_connection&/span&&span class=&o&&.&/span&&span class=&n&&recv&/span&&span class=&p&&(&/span&&span class=&mi&&65535&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&n&&output&/span&
&span class=&n&&f&/span&&span class=&o&&.&/span&&span class=&n&&close&/span&&span class=&p&&()&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&close&/span&
&/code&&/pre&&/div&&p&&br&这种将配置命令预设在代码里的方法便于初学者理解和学习,在只有几台设备的实验环境中常用。但是在有成千上万台网络设备需要管理的生产环境中,这种方法显得很笨拙,缺乏灵活性。举例来说,假设你的生产环境中有不同型号,不同操作系统,不同命令格式的设备各1000台,比如思科的交换机,前者跑的是IOS,后者跑的是IOS-XE,你要分别给它们批量修改QoS的配置,因为两者的命令格式差异巨大(一个是MLS QOS,一个是MQC QOS),你必须反复修改command.send()这个部分的代码,如果只是简单数条命令还好办,一旦遇到大规模的配置,那这种方法的效率会很低下。&br&&br&解决这个问题的思路是分别创建两个文本文件,一个用来存放配置3750要用到的命令集,另一个用来存放配置3850要用到的命令集,然后在Python脚本里通过for循环加open()来读取两个文件里的内容以达到分别给所有交换机做QoS配置的目的,这样做的好处是无须修改command.send()这个部分的代码,因为所有的命令行已经在文本文件里预先设置好了。&br&&br&&br&&b&实验背景:&/b&&br&假设你现在手边有3台管理ip地址在192.168.100.x /24网段的3750交换机以及3台管理ip地址在172.16.100.x/24网段的3850交换机,它们的hostname和管理ip地址如下:&br&&br&2.168.100.11&br&2.168.100.22&br&2.168.100.33&br&&br&2.16.100.11&br&2.16.100.22&br&2.16.100.33&br&&br&&b&实验目的:&/b&&br&你需要同时修改所有的QoS配置,更改它们出队列(output queue)的队列参数集2(queue-set 2)的缓存(buffers)配置,给队列1,2,3,4分别分配15%, 25%, 40%, 20%的缓存 (默认状况下是25%,25%,25%,25%)。&br&&br&&b&实验步骤:&/b&&/p&&ol&&li&创建lab4.py,这步就略过不表了。&/li&&li&首先创建两个名为command_3750.txt和ip_3750.txt的文本文件,分别用来保存我们将要配置3750的QoS命令,以及所有3750交换机的IP地址。&br&&br&imacs-iMac:book-example imac$ &b&cat command_3750.txt&/b&&br&mls qos queue-set output 1 buffers 15 25 40 20&br&&br&imacs-iMac:book-example imac$ &b&cat ip_3750.txt &/b&&br&192.168.100.11&br&192.168.100.22&br&192.168.100.33&br&&br&同理,再创建两个名为command_3850.txt和ip_3850.txt的文本文件,分别用来保存我们将要配置3850的QoS命令,以及所有3850交换机的IP地址。&br&&br&imacs-iMac:book-example imac$ &b&cat command_3850.txt&/b&&br&configure terminal&br&class-map match-any cos7&br&match cos 7&br&class-map match-any cos1&br&match cos 1&br&exit&br&policy-map queue-buffer&br&class cos7&br&bandwidth percent 10&br&queue-buffers ratio 15&br&class cos1&br&bandwidth percent 30&br&queue-buffers ratio 25&br&exit&br&exit&br&interface gi1/0/1&br&service-policy output queue-buffer&br&end&br&wr mem&br&&br&imacs-iMac:book-example imac$ &b&cat ip_3850.txt &/b&&br&172.16.100.11&br&172.16.100.22&br&172.16.100.33&br&&br&不过这时新的问题又来了,每次配备不同型号的设备,我们必须手动修改open()函数所打开的配置文本文件以及ip地址文件,比如在给3750做配置的时候,我们要open('command_3750.txt')以及open('ip_3750.txt'), 给3850做配置的时候,我们又要open('command_3850.txt')以及open('ip_3850.txt'),这样一来二去修改配置脚本的做法大大缺乏灵活性。&br&&br&如果说只有两种不同型号,不同命令格式的设备还能应付的话,那么当你的生产环境中有3750(IOS),3850(IOS-XE), Nexus 3k/5k/7k/9k (NX-OS), CRS3/ASR9K (IOS-XR)甚至其他厂商的设备,而你又接到任务要对所有这些设备同时修改某个共有的配置(比如网络新添加了某台TACACS服务器,要统一给所有设备修改AAA配置,亦或者网络新添加了某台NMS系统,要统一给所有设备修改SNMP配置),因为不同OS的配置命令完全不同,这时你就能体会到痛苦了。这时可以用到sys.argv来解决这个问题。&br&&br&&br&&b&实验4代码:&/b&&/li&&/ol&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# -- coding: UTF-8 --&/span&
&span class=&kn&&import&/span& &span class=&nn&&paramiko&/span&
&span class=&kn&&import&/span& &span class=&nn&&time&/span&
&span class=&kn&&import&/span& &span class=&nn&&getpass&/span&
&span class=&kn&&import&/span& &span class=&nn&&sys&/span&
&span class=&n&&username&/span& &span class=&o&&=&/span& &span class=&nb&&raw_input&/span&&span class=&p&&(&/span&&span class=&s1&&'Username: '&/span&&span class=&p&&)&/span&
&span class=&n&&password&/span& &span class=&o&&=&/span& &span class=&n&&getpass&/span&&span class=&o&&.&/span&&span class=&n&&getpass&/span&&span class=&p&&(&/span&&span class=&s1&&'password: '&/span&&span class=&p&&)&/span&
&span class=&n&&ip_file&/span& &span class=&o&&=&/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=&n&&cmd_file&/span& &span class=&o&&=&/span& &span class=&n&&sys&/span&&span class=&o&&.&/span&&span class=&n&&argv&/span&&span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&]&/span&
&span class=&n&&iplist&/span& &span class=&o&&=&/span& &span class=&nb&&open&/span&&span class=&p&&(&/span&&span class=&n&&ip_file&/span&&span class=&p&&,&/span& &span class=&s1&&'r'&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&line&/span& &span class=&ow&&in&/span& &span class=&n&&iplist&/span&&span class=&o&&.&/span&&span class=&n&&readlines&/span&&span class=&p&&():&/span&
&span class=&n&&ip&/span& &span class=&o&&=&/span& &span class=&n&&line&/span&&span class=&o&&.&/span&&span class=&n&&strip&/span&&span class=&p&&()&/span&
&span class=&n&&ssh_client&/span& &span class=&o&&=&/span& &span class=&n&&paramiko&/span&&span class=&o&&.&/span&&span class=&n&&SSHClient&/span&&span class=&p&&()&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&set_missing_host_key_policy&/span&&span class=&p&&(&/span&&span class=&n&&paramiko&/span&&span class=&o&&.&/span&&span class=&n&&AutoAddPolicy&/span&&span class=&p&&())&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&connect&/span&&span class=&p&&(&/span&&span class=&n&&hostname&/span&&span class=&o&&=&/span&&span class=&n&&ip&/span&&span class=&p&&,&/span&&span class=&n&&username&/span&&span class=&o&&=&/span&&span class=&n&&username&/span&&span class=&p&&,&/span&&span class=&n&&password&/span&&span class=&o&&=&/span&&span class=&n&&password&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&s2&&&You have successfully connect to &&/span&&span class=&p&&,&/span& &span class=&n&&ip&/span&
&span class=&n&&command&/span& &span class=&o&&=&/span& &span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&invoke_shell&/span&&span class=&p&&()&/span&
&span class=&n&&cmdlist&/span& &span class=&o&&=&/span& &span class=&nb&&open&/span&&span class=&p&&(&/span&&span class=&n&&cmd_file&/span&&span class=&p&&,&/span& &span class=&s1&&'r'&/span&&span class=&p&&)&/span&
&span class=&n&&cmdlist&/span&&span class=&o&&.&/span&&span class=&n&&seek&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&line&/span& &span class=&ow&&in&/span& &span class=&n&&cmdlist&/span&&span class=&o&&.&/span&&span class=&n&&readlines&/span&&span class=&p&&():&/span&
&span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&n&&line&/span& &span class=&o&&+&/span& &span class=&s2&&&&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/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=&mi&&2&/span&&span class=&p&&)&/span&
&span class=&n&&cmdlist&/span&&span class=&o&&.&/span&&span class=&n&&close&/span&&span class=&p&&()&/span&
&span class=&n&&output&/span& &span class=&o&&=&/span& &span class=&n&&command&/span&&span class=&o&&.&/span&&span class=&n&&recv&/span&&span class=&p&&(&/span&&span class=&mi&&65535&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&n&&output&/span&
&span class=&n&&iplist&/span&&span class=&o&&.&/span&&span class=&n&&close&/span&&span class=&p&&()&/span&
&span class=&n&&ssh_client&/span&&span class=&o&&.&/span&&span class=&n&&close&/span&
&/code&&/pre&&/div&&p&&br&&b&实验4代码部分讲解:&/b&&/p&&ul&&li&因为要用到sys.argv,所以这里import了sys模块。&/li&&li&「argv」是「argument variable」参数变量的简写形式,这个变量返回的是一个列表,argv[0] 一般是被调用的脚本的文件名或全路径,从argv[1]开始就是传入的数据了。举个例子,我们现在返回linux,执行下面这个命令:&/li&&/ul&&p&imacs-iMac:book-example imac$ python lab4.py ip_3750.txt cmd_3750.txt&br&这时argv = ['lab4.py', 'ip_3750.txt', 'cmd_3750.txt']&br&我们代码里的:&br&ip_file = sys.argv[1],此时也就等同于ip_file = ip_3750.txt&br&cmd_file = sys.argv[2], 此时也就等同于cmd_file = cmd_3750.txt&br&同理,如果这时我们在linux执行命令:&br&imacs-iMac:book-example imac$ python lab4.py ip_3850.txt cmd_3850.txt&br&那么此时ip_file = ip_3850.txt, cmd_file = cmd_3850.txt&/p&&ul&&li&由此可见,配合sys.argv,我们可以很灵活地选用我们脚本需要调用的文本文件,而无需反反复复地修改脚本代码。&/li&&/ul&&p&&br&&/p&&p&&b&最后执行代码看效果:&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&imacs-iMac:book-example imac$ python lab4.py ip_3750.txt cmd_3750.txt
Username: python
You have successfully connect to 192.168.100.11
3750_1#conf t
3750_1(config)#mls qos queue-set output 1 buffers 15 25 40 20
3750_1(config)#end
3750_1#wr mem
Building configuration...
You have successfully connect to 192.168.100.22
3750_2#conf t
3750_2(config)#mls qos queue-set output 1 buffers 15 25 40 20
3750_2(config)#end
3750_2#wr mem
Building configuration...
You have successfully connect to 192.168.100.33
3750_3#conf t
3750_3(config)#mls qos queue-set output 1 buffers 15 25 40 20
3750_3(config)#end
3750_3#wr mem
Building configuration...
imacs-iMac:book-example imac$ python lab4.py ip_3850.txt cmd_3850.txt
Username: python
You have successfully connect to 172.16.100.11
3850_1#configure terminal
Enter configuration commands, one per line.
End with CNTL/Z.
3850_1(config)#class-map match-any cos7
3850_1(config-cmap)#match cos 7
3850_1(config-cmap)#class-map match-any cos1
3850_1(config-cmap)#match cos 1
3850_1(config-cmap)#exit
3850_1(config)#policy-map queue-buffer
3850_1(config-pmap)#class cos7
3850_1(config-pmap-c)#bandwidth percent 10
3850_1(config-pmap-c)#queue-buffers ratio 15
3850_1(config-pmap-c)#class cos1
3850_1(config-pmap-c)#bandwidth percent 30
3850_1(config-pmap-c)#queue-buffers ratio 25
3850_1(config-pmap-c)#exit
3850_1(config-pmap)#exit
3850_1(config)#interface gi1/0/1
3850_1(config-if)#service-policy output queue-buffer
3850_1(config-if)#end
3850_1#wr mem
Building configuration...
Compressed configuration from 62654 bytes to 19670 bytes[OK]
You have successfully connect to 172.16.100.22
3850_2#configure terminal
Enter configuration commands, one per line.
End with CNTL/Z.
3850_2(config)#class-map match-any cos7
3850_2(config-cmap)#match cos 7
3850_2(config-cmap)#class-map match-any cos1
3850_2(

我要回帖

更多关于 u盘查不到芯片型号 的文章

 

随机推荐