python做为一门高级编程语言,它的定位是优雅、明确和简单。阅读Python编写的代码感受像在阅读英语同样,这让使用者能够专一于解决问题而不是去搞明白语言自己。Python虽然是基于C语言编写,可是摒弃了C中复杂的指针,使其变得简明易学。而且做为开源软件,Python容许对代码进行阅读,拷贝甚至改进。这些性能成就了Python的高效率,有“人生苦短,我用Python”之说,是一种十分精彩又强大的语言。python
在最近的公司项目开发中接触到python语言及wifi相关的一些知识,正好将最近学到的和你们分享一下。linux
0x0001 开发环境:编程
windows 10+python2.7.15windows
0x0002 开发目标:微信
开发基于字典破解wifi热点密码的小工具app
在开发这个工具的时候笔者如今网上搜索到了一些项目,但都是linux下的,不能直接用于windows平台,所以就决定结合找到的linux下的项目,修改为windows下可运行的。python2.7
首先找到文章《一个很是简单易懂的WIFI密码爆破python脚本》可是文章中说使用了pywifi模块,“这个模块在win下有点鸡肋,做者在调用WLANAPI时没有作好WLAN_SECURITY_ATTRIBUTES的封装,因此推荐在linux下跑,我测试所使用的是Kali 2.0 自带python 2.7.6 ,可直接经过 pip install pywifi 安装。”但笔者在测试的时候发现,在windows下仍是能够运行的,由于要对这个模块的源代码进行一些修改,因此就没有安装模块,而是直接拷贝模块的源代码到项目目录下。编程语言
0x0003 模块的修改:函数
在使用模块自带的测试用例时候,发现print输出了不少无用的信息,所以在_wifiutil_win.py的335行去掉对“show_my_need_info”的调用。工具
0x0004 程序执行流程
功能需求比较清晰,所以咱们的步骤以下:
一、得到本机无线网卡信息
二、扫描周围wifi热点
三、使用字典尝试链接wifi热点
四、输出扫描结果
按照上面的流程就能够编写代码了。
0x0005 代码实现
得到无线网信息
引用模块后,主要使用interfaces函数获取本机无线网卡信息,具体代码封装以下:
扫描周围热点
主要经过scan函数得到scan_results结果,具体代码封装以下,这里sleep(2)是由于测试的时候本机的无线网卡返回信息须要一些时间,固然若是你的网卡性能好,能够去掉这个sleep:
尝试链接(破解密码)
密码破解这里先要定义一个Profile,而后再将Profile做为参数调用connect进行链接尝试,使用status函数取链接结果的返回值,若是是const.IFACE_CONNECTED则链接成功,显示结果,若是是其余则为失败。
主要代码如上,运行效果以下:
问题
这里有一个问题,就是pywifi模块的windows版本的代码里并无实现获取wifi热点的加密状态信息,好比是使用WPA、WPA二、WPA2PSK仍是WPAPSK方式加密认证的,所以我就默认将全部的wifi热点看做是开启了加密认证的,并在破解的时候视为“profile.akm.append(const.AKM_TYPE_WPA2PSK)”进行破解尝试。
开始学注意几点:
1.代码规范,这自己就是一个很是好的习惯,若是开始不养好好的代码规划,之后会很痛苦
2.多动手,少看书,不少人学Python就一味的看书,这不是学数学物理,你看例题可能就会了,学习Python主要是学习编程思想。
3.勤练习,学完新的知识点,必定要记得如何去应用,否则学完就会忘,学咱们这行主要都是实际操做。
4.学习要有效率,若是本身都以为效率很是低,那就停不停,找一下缘由,去问问过来人这是为何
我有一个微信公众号,常常会分享一些python技术相关的干货;若是你喜欢个人分享,能够用微信搜索“python语言学习”关注