好多天没有在Linux下上网了,网通在学校使用了drcom作为pppoe拨号的一个补充,目的是防止用户使用代理、监视用户使用情况,而且这个drcom是经过修改的,在Linux下没有对应的版本。所以这段时间一直不能上网,花了几天的时间抓包分析、测试,仍然没能解决Linux下上网的问题,现在只能通过wine模拟运行网通给的drcom客户端来上网,详细的使用可以参考草儿同学的一篇文章。
记一下这几天分析的结果:
先首说一下整个通信过程,pppoe拨号连接上去后打开drcom客户端,通过wireshark抓包可以看到,drcom首先给1.1.1.1与202.1.1.1这两个ip同时(Windows上抓包的时间戳是相同的)发送一次UDP包,数据长度为8字节,接着服务器(221.11.20.10)会返回两次UDP包,内容是相同的,数据长度为16字节。接下来drcom会发送96字节的UDP包到服务器,服务器返回16字节UDP包。然后重复这一过程一次,不过这一次通信中第一次发送的UDP包的目的变为221.11.20.10并且只发一次,服务器也只给一次响应。首次通信结束后每隔18秒会重复上面通信过程一次。如下图:
下面对每次发送的UDP包中的数据进行分析:
客户端—->服务器:
07 01 08 00 01 00 00 30 00 00
上面8个字节是客户端给服务器的请求,固定不变,代表这是客户端第一次请求(这里指的第一次是指服务器与客户端4次UDP通信中的第一次)。
服务器—->客户端:
07 01 10 00 02 00 00 00 30 6a 0a 00 c0 a8 10 86
最前面的8个字前是数据类型,代表了这个UDP包是服务器给客户端的第一次响应,这个是一直不变的。蓝色部分应该是一个类似签名(暂时先这样叫吧)的东西,每次通信这4个字节中的前两个字节一直在变化,后两个字节隔一段时间(约1 小时左右)会加一;红色部分是客户端每次pppoe拨号上去后分配到的IP地址;
客户端—->服务器:
07 00 60 00 03 00 00 00 00 00 00 00
c0 a8 10 86 00 03 00 02
30 6a 0a 00 ca 3c 96 b000 00 00 00 02 74 e2 4d 49 75
00 03 c0 51 08 f6 ff ff ff ff 00 a6 15 00 00 00
00 8b c0 51 40 34 ff ff ff ff 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
红色前边的12个字节是固定不变的,代表了这是客户端第二次的请求;红色部分4个字节是从上次服务器的返回中得到的,也是本机IP;绿色的4个字节含义不清楚,这4个字节有时候会变为00 02 00 02,变化规律目前不太清楚,不过在一次正常上网的情况下(这里指每隔18秒服务器会收到客户端发出的这些UDP包)这个是一直不变的;
蓝色的4个字节就是上次得到一个签名;接下来紫色的4个字节是目前最棘手的,这4个字节每次通信都在变(也就是每隔18秒变一次),而且我抓了2个小时的包把这4个字节提取出来,并且排序也没有发现有任何规律;再下来4个0是一直不变的;
粉色显示的这6个字节应该是和系统相关的信息,经过我的测试在同一机器上这个值是一直不变的,直到今天我用wine运行drcom才发现这6个字节在Linux下是全零,我猜想这个应该是系统信息吧;
下来浅蓝色的这一行16个字节在同一个机子上是不变的,但在不同的机子上还是有些差异的,有的机子上08 f6变为了00 7b,也有的变为了0c b8;甚至有的机子这一行只剩下00 a6 15 00 00 00这6个字节;
下来这一行中的内容也基本固定,只有40 34这两个字节会在你断线重拨后变化,也就是说在一次正常的上网情况下这两个字节是不变的,但这两个字节是如何得到的我就不清楚了,感觉这两个字节很重要,我曾经试着穷举这两个字节,不过没有任何收获,很可能这两个字节和前面某些字节有联系;
剩余的26个字节大部机子会全填零的,不过也有机子不是这样,有可能有更多的零,比如上面提到浅蓝色的那一行有可能只剩下00 a6 15 00 00 00这6个字节,这种情况会多6个字节的零;也有的机子会以16字节为单位重复类似“00 03 c0 51 08 f6 ff ff ff ff 00 a6 15 00 00 00”这样的数据;
服务器—->客户端:
07 00 10 00 04 00 00 00 2c 10 63 96 00 00 00 00
这是最后一次服务器发给客户端的UDP数据,前几个字节是数据类型,代表服务器发给客户端的第二次响应,后几个字节没有去研究,现在还卡在上面96个字节呢!
目前我只能根据我自己的机子把一些与机器、系统相关的字节确定下来,然后重点去分析那96字节中蓝色、深蓝色、紫色那几位的字节,不过已经好几天了,还是没有什么进展:-(

[...] 前段时间网通更换了原有的PPPOE拨号方式,改为使用Drcom验证服务。可恶的网通,可恶的水产社会。更换拨号方式以后,对于一切为了用户方便的Windows用户来说,只需要轻轻点一下鼠标,就可以安装客户端进行上网了,然而我们为难的却是被他们所抛弃的Linux。 先来说下Drcom客户端。Drcom是城市热点公司(http://www.doctorcom.com)开发的宽带计费系统,在全国高校、企业、政府机关广泛使用(从该公司的宣传来看,其客户主要是各地网通公司以及全国各高校)。网上有Drcom的Linux版本drcom-client,drcom-client现在是sourceforge(http://sourceforge.net)上的一个项目,以GPL协议发布,它包括window平台下的版本drcom-client-win32和Linux下的版本drcomsuite,它的主页地址是: http://sourceforge.net/projects/drcom-client。同时网上也给出了很多安装方法,这里就不多做介绍了。 ; 而今,网通公司给我们安装的客户端只是一个800+K的插件(怀疑是修改过的,软件版本号为V3.49。附下载,以便大家学习交流使用)。安装插件后会随系统启动而自动运行,运行后没有界面,只在进程中有一项。用户上网时依然采用PPPOE协议,使用Windows自带的拨号程序拨上去以后,客户机与服务器进行UDP通信校验,经过往返四次的验证成功后,客户机即可上网。以后每隔18S左右,该插件会在后台自动与服务器重复该验证过程。 由此我们可以看出,只要我们在Linux下能够按照双方约定与服务器进行UDP通信验证,就可以完美地实现Linux下上网的问题。我的朋友cocobear(http://cocobear.cn)在这个思路下对该问题做了大量的前期工作,也大致写出了一个自动发送与服务器UDP通信的C程序雏形,只是目前尚有几个字节不能断定其涵义,从而不能正确伪造报文,暂时还不能正确与服务器进行验证。详细的报文分析可以参看cocobear写的这篇文章。 在cocobear从这个方向研究的同时,我尝试利用wine进行安装,结果是令人兴奋的—-我们成功了。 系统环境:Fedora 7 Wine版本:0.9.39 Released(目前最新版本是0.9.51) Drcom版本:V3.49 首先我们安装Wine,如果是Fedora用户可以直接通过yum进行安装,当然,不能上网的或是其他发行版的可以到Wine的主页(http://www.winehq.org)下载对应的软件包进行安装。 安装好Wine后我们可以进行一些简单的调试,在终端下输入winecfg打开配置界面,可以根据自己的实际进行一些高级配置。 然后我们将终端中打开放置Drcom客户端的目录,输入 $ wine drcom-client.exe 之后就会弹出我们熟悉的安装界面,默认安装的Wine是不支持中文的,为了避免出现乱码,我们选择安装软件语言为English,以后就一直NEXT,安装完成。中间会提示安装Winpcap驱动程序,点击安装就行了。 安装完成后,我们用wine打开程序: $ wine ishare_user.exe 这时在终端窗口中会显示出一系列DEBUG信息,如我自己的电脑在该步骤中出现了以下信息: # wine ishare_user.exe err:module:import_dll Library packet.dll (which is needed by L"C:\Program Files\PPOE Client\ishare_user.exe") not found err:module:LdrInitializeThunk Main exe initialization for L"C:\Program Files\PPOE Client\ishare_user.exe" failed, status c0000135 [...]
嗯,多人研究一下,希望能够尽早搞定这个问题。
终于用wine把linux上网问题搞定了,用wine模拟时缺少四个dll,分别是NPPTools.dll、WanPacket.dll、mfc42u.dll和Packet.dll,从win下挨个cp过来就好了~~
恩,大体看了一下。这应该就是咱们研究的全部成果了吧?
总结得不错,革命尚未成功,同志还需努力啊!!
[...] 前段时间网通更换了原有的PPPOE拨号方式,改为使用Drcom验证服务。可恶的网通,可恶的水产社会。更换拨号方式以后,对于一切为了用户方便 的Windows用户来说,只需要轻轻点一下鼠标,就可以安装客户端进行上网了,然而我们为难的却是被他们所抛弃的Linux。 先来说下Drcom客户端。Drcom是城市热点公司(http: //www.doctorcom.com)开发的宽带计费系统,在全国高校、企业、政府机关广泛使用(从该公司的宣传来看,其客户主要是各地网通公司以及 全国各高校)。网上有Drcom的Linux版本drcom-client,drcom-client现在是sourceforge(http: //sourceforge.net)上的一个项目,以GPL协议发布,它包括window平台下的版本drcom-client-win32和 Linux下的版本drcomsuite,它的主页地址是: http://sourceforge.net/projects/drcom-client。同时网上也给出了很多安装方法,这里就不多做介绍了。 而今,网通公司给我们安装的客户端只是一个800+K的插件(怀疑是修改过的,软件版本号为V3.49。附下载, 以便大家学习交流使用)。安装插件后会随系统启动而自动运行,运行后没有界面,只在进程中有一项。用户上网时依然采用PPPOE协议,使用Windows 自带的拨号程序拨上去以后,客户机与服务器进行UDP通信校验,经过往返四次的验证成功后,客户机即可上网。以后每隔18S左右,该插件会在后台自动与服 务器重复该验证过程。 由此我们可以看出,只要我们在Linux下能够按照双方约定与服务器进行UDP通信验证,就可以完美地实现Linux下上网的问题。我的朋友cocobear(http: //cocobear.cn)在这个思路下对该问题做了大量的前期工作,也大致写出了一个自动发送与服务器UDP通信的C程序雏形,只是目前尚有几个字节 不能断定其涵义,从而不能正确伪造报文,暂时还不能正确与服务器进行验证。详细的报文分析可以参看cocobear写的这篇文章。 在cocobear从这个方向研究的同时,我尝试利用wine进行安装,结果是令人兴奋的—-我们成功了。 系统环境:Fedora 7 Wine版本:0.9.39 Released(目前最新版本是0.9.51) Drcom版本:V3.49 首先我们安装Wine,如果是Fedora用户可以直接通过yum进行安装,当然,不能上网的或是其他发行版的可以到Wine的主页(http://www.winehq.org)下载对应的软件包进行安装。 安装好Wine后我们可以进行一些简单的调试,在终端下输入winecfg打开配置界面,可以根据自己的实际进行一些高级配置。 然后我们将终端中打开放置Drcom客户端的目录,输入 $ wine drcom-client.exe 之后就会弹出我们熟悉的安装界面,默认安装的Wine是不支持中文的,为了避免出现乱码,我们选择安装软件语言为English,以后就一直NEXT,安装完成。中间会提示安装Winpcap驱动程序,点击安装就行了。 安装完成后,我们用wine打开程序: $ wine ishare_user.exe 这时在终端窗口中会显示出一系列DEBUG信息,如我自己的电脑在该步骤中出现了以下信息: # wine ishare_user.exe err:module:import_dll Library packet.dll (which is needed by L”C:\Program Files\PPOE Client\ishare_user.exe”) not found err:module:LdrInitializeThunk Main exe initialization for L”C:\Program Files\PPOE Client\ishare_user.exe” failed, status c0000135 从中可以看出,wine运行drcom插件缺少了packet.dll文件。我们到Windows系统的system32目录里找到相应的文件,复制到 wine目录下的windows/system32目录里,然后再次运行,就可以正常打开了。这时我们再利用PPPOE拨号,就能够正常上网了。 [...]
我是11号楼的,我安上面的方法装上 Drcom,可是当 ishare_user.exe时,出现Drcom客服端,
要输入账号,密码。
电话号的的那种界面,怎么解决呀
当wine ishare_user.exe,时弹出一个对话框要输入服务器,帐号,密码,服务器ip怎么弄?希望你帮我解决一下。。感谢我
这个没办法,有时候就会有这样的窗口出来,放到一边,不理它。