haulm 发表于 2008-10-10 11:51:29

关于MXD无法从普通用户拔号解决过程的新发现(pppoe-wrapper)

nihui兄突然说我开发新的拔号器迟迟没有动工很是刺激我,所以硬着头皮去看rp-pppoe的gui部份的源码,发现其实就是调用

pppoe-wrapper这个指令程序,adsl-start adsl-stop adsl-staus这些指令是只有root权限才能运行的

而pppoe-wrapper非root用户都可以使用。

(10897)
$ /usr/sbin/pppoe-wrapper start haulm
....... Connected!

haulm是我在tkpppoe里设置的连接名,它会在/etc/ppp/rp-pppoe-gui 生成 conf.×××,比如conf.haulm

# Configuration file for connection `haulm'.
# Automatically generated.Do not edit by hand.

USER=abc@adsl
ETH=eth0
DNSTYPE=SERVER
PEERDNS=yes
DNS1=
DNS2=
NONROOT=OK
SYNCHRONOUS=yes
FIREWALL=STANDALONE
SERVICENAME=
ACNAME=
CONNECT_TIMEOUT=30
CONNECT_POLL=1
FORCEPING="."
PIDFILE=/var/run/pppoe-haulm.pid
CLAMPMSS=1412
LCP_INTERVAL=20
LCP_FAILURE=3
PPPOE_TIMEOUT=80
LINUX_PLUGIN=
DEMAND=no
DEFAULTROUTE=yes

haulm 发表于 2008-10-10 11:56:38

然后我们来看下以下操作

haulm@haulmtf root]$ adsl-stop
adsl-stop: No PPPoE connection appears to be running
$ exit
exit
# adsl-stop
adsl-stop: No PPPoE connection appears to be running

也就是说目前的MXD所调用的只有root权限才能运行的指令

所以要想解决MXD的问题需要重写MXD对rp-pppoe的调用

haulm 发表于 2008-10-10 12:00:34

想想很可笑,我原本很想从CJACKER那抄袭evlink实现普通用户的拔号,可惜环境改变了旧源码无法编译通过,新源码CJACKER不公开。现在看来的的确确不能拿来主义,很多东西本来就是在眼皮底下,只是你不懂得用和珍惜。

panpanpdj 发表于 2008-10-10 12:59:38

呵呵,刚刚我还拿宿舍的线试着用普通用户拨号呢,不过在河南网通这边情况比较特殊
好像这里的PPOE需要网通专门的客户端
在网上看到有说网通公司给的用户号并不是真正的用户名,除非用网通端不然拨不上去
还有就是用路由,但是路由用不对了在河南网通这照样上去
像我们的路由就有河南网通专用的模式,我们买的第一个路由就是死活拨不上,因为它没河南网通专用的模式
haulm既然写了,不如再更深一步,加个河南网通的模式
这个听说网上有PPOE的算号器,我的意思是能不能把这个算号器加到拨号器里,这样的话在河南这边只要写入网通公司给的号就可以了(拨号直接用算号器算出的真正用户名)

jiangtao9999 发表于 2008-10-10 13:23:58

你只要能找到河南网通的拨号模式就行了。
听说有的地方的密码是 md5 后的。拨号时直接用 md5 后的密码就能正常拨号。
:?

sejishikong 发表于 2008-10-10 14:52:05

河南网通有一部分是特殊的拨号器,有Linux版本的。
密码加密那个是比较好办的,一抓包就行了。

mxd并不是直接调用adsl-xxx,是通过脚本的,只需要修改脚本就可以,我看看。

haulm 发表于 2008-10-11 07:41:22

原帖由 sejishikong 于 2008-10-10 14:52 发表 http://www.linuxfans.org/bbs/images/common/back.gif
河南网通有一部分是特殊的拨号器,有Linux版本的。
密码加密那个是比较好办的,一抓包就行了。

mxd并不是直接调用adsl-xxx,是通过脚本的,只需要修改脚本就可以,我看看。 ...
MXD的脚本就是直接调用adsl-XXX,我没通过代码都猜到了。。。,代码看了,只要改改MXD就可以直接由普通用户拔号。

haulm 发表于 2008-10-11 08:13:26

我可能会重新写一个拔号器,或者se兄重写一下脚本,root用户和非root用户使用的是不一样的指令的,这在rp-pppoe的gui程序代码中都可以看到,所以需要在拔号前对用户ID进行识别,然后才使用对应的指令,而且rp-pppoe以往的打包把gui部份给删除掉了,这是错误的,如此一来rp-pppoe当然只有root权限才能拔号。

haulm 发表于 2008-10-11 10:34:25

这是练习写的代码,大概重写rp-pppoe的gui界面应当从这个思路开始#include
#include
#include
int main(int argc,char *argv[])
{
uid_t uid;
uid=getuid();
int opt;
opt=getopt(argc,argv,"do");
if(opt!=-1)
{
switch(opt){
case 'd':
if(uid==0)
{
system("/usr/sbin/adsl-stop");
}
else
{
system("/usr/sbin/pppoe-wrapper stop haulm");
}
break;
case 'o':
if(uid==0)
{
system("/usr/sbin/adsl-start");
}
else
{
system("/usr/sbin/pppoe-wrapper start haulm");
}
break;
}
}
exit(0);
}界面我可能用Qt4来写,界面可能不会太复杂,一个用户框加密码框,对文件进行读写操作,拔号后直接退出程序,所有的连接状态我打包 knetstats来显示,因为knetstats比较专业一些,有专门的人在维护。其它比如无线网络的拔号设置如果能整理出来,也会纳入新的MXD进行设置。大家有什么意见没有?

haulm 发表于 2008-10-11 10:43:59

由于rppppoe的连接很是奇怪,root和非root拔号连接会冲突。
代码中可能还要加入一些进程判断,在拔号前如果发现root有拔号则立即停止普通用户拔号请求,如果root进行拔号时发现普通用户进行拔号,则应该弹出对话框说明已经连上网络,是否通过非root权限关闭连接。

panpanpdj 发表于 2008-10-11 16:03:49

拨号的时候是不是会尝试重启网卡,有一次我开过机后路由和猫才开,结果就不能自动启动网卡连网了,后来只得用网络设置工具里面走到最后重启了网卡,不然就得重启机器。
看书有重启网卡的命令,方便的话加进去得了,估计也就几行代码的事

haulm这个帖子如果不置顶的话估计看到的人会更多一些

haulm 发表于 2008-10-12 11:26:42

原帖由 panpanpdj 于 2008-10-11 16:03 发表 http://www.linuxfans.org/bbs/images/common/back.gif
拨号的时候是不是会尝试重启网卡,有一次我开过机后路由和猫才开,结果就不能自动启动网卡连网了,后来只得用网络设置工具里面走到最后重启了网卡,不然就得重启机器。
看书有重启网卡的命令,方便的话加进去得了,估计也就几行 ...
嗯,反正有什么需要可以提,目前已经实现托盘菜单的拔号了,只是还没实现界面配置功能和网络流量显示。
页: [1]
查看完整版本: 关于MXD无法从普通用户拔号解决过程的新发现(pppoe-wrapper)