那些天在家里做准备去北京找软件开发方面的工作。正巧去姑姑那里玩,她在邮电所工作,最近装了宽带和机顶盒,有个数字电视演示电视机。但姑姑不知道宽带的帐号和密码,没办法,她那里的查询系统也查不到帐号和密码。于是我试着拿网线连接机顶盒和我的笔记本电脑。发现本地连接断开的,机顶盒没反应。于是我用双机互联的网线连接,本地连接连上了,机顶盒提示正在寻找服务器,时间长了提示超时。我想到了我电脑里有大学计算机网络课的实验软件Ethereal,试着抓包看看,发现机顶盒在发送PPPOED类型广播包(PADI)。用网线连接猫和我电脑,发现我桌面的宽带连接也发送PADI和有其他包直到和宽带接入服务器建立连接,并发送帐号和密码验证(都错的,当然失败)。计划来了:写个程序伪装成服务器,和客户端沟通并获取帐号密码。
开发过程:
首先想到了winsock,但后来发现PPPOE协议的特点是没用到IP协议。用winsock原始套接字自定义封包不知道可以实现否,我没找到资料。突然想到了Ethereal可以抓到PPPOE封包,并且可以分析交互过程,分析下它的实现,发现原来这个软件使用了libpcap的内核,找到方法了。到网上下了个winpcap,已经编译好的windows下的开发包,其实就包含在winpcap源代码中,我使用了4.0.2版本,幸好我机器上有win32sdk2003,不然会缺少文件。
我使用了简单的win32控制台界面。简单描述了功能和使用方法和注意事项,尽量显示在一个屏幕中不用滚动。用控制台输入事件监听键盘输入(因为winpcap有提示用户选择使用网卡的一步),这样就不需要回车了。比如选择2号网卡。直接输入 2,不用回车,程序就响应了,提示"你选择了2号网卡"。超出范围程序就自动选择一个,然后就会用该网卡来监听网络,发现PPPOE封包后会做出回应,接着建立连接,进而让对方发送用户名和密码(当然首先要发送一个要求设置PAP身份验证的封包。其实有工具可以建立传入的连接,用CHAP验证,但我当时不能上网,没找到相关资料),然后会显示并保存帐号和密码到文件。
这个程序使用时。路由器必须在自动连接状态(路由器默认是按需连接)。1.可以用两台电脑,一台连上路由器,另一台用双机互联网线连路由器的WAN口。2.设置路由器为定时连接或其他能自动连接的方式。然后一台电脑连路由器的WAN口就可以了得到密码了。
当初写的时候没做实际测试。只在本地截获本机宽带连接的密码。这几天在住的地方有个路由器,于是做了测试并做了修改,并把实际可用的代码发出来。测试的路由器是腾达的。
------------------------------------------------------------------------------------
程序和源代码在下面这个图片里面(其实是个压缩包)。
右键另存为或用迅雷等下载工具下载。下面这张图片其实是个压缩包。
http://hiphotos.baidu.com/zhupf/pic/item/d48fba2676e39c018a82a139.jpg
下载后改名为 PPPOE密码嗅探器 v1.0.rar 或 在打开方式中 选中 winrar
程序需要WinPcap_4_0_2.rar.jpg,在下面这个图片里面。
http://hiphotos.baidu.com/zhupf/pic/item/2fbf91019b18ec101d95832a.jpg
------------------------------------------------------------------------------------------