QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1798|回复: 11

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

[复制链接]
发表于 2008-10-10 11:51:29 | 显示全部楼层 |阅读模式
nihui兄突然说我开发新的拔号器迟迟没有动工很是刺激我,所以硬着头皮去看rp-pppoe的gui部份的源码,发现其实就是调用

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

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

(10897)
[haulm@haulmtf root]$ /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
 楼主| 发表于 2008-10-10 11:56:38 | 显示全部楼层
然后我们来看下以下操作

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

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

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

使用道具 举报

 楼主| 发表于 2008-10-10 12:00:34 | 显示全部楼层
想想很可笑,我原本很想从CJACKER那抄袭evlink实现普通用户的拔号,可惜环境改变了旧源码无法编译通过,新源码CJACKER不公开。现在看来的的确确不能拿来主义,很多东西本来就是在眼皮底下,只是你不懂得用和珍惜。
回复

使用道具 举报

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

使用道具 举报

发表于 2008-10-10 13:23:58 | 显示全部楼层
你只要能找到河南网通的拨号模式就行了。
听说有的地方的密码是 md5 后的。拨号时直接用 md5 后的密码就能正常拨号。
回复

使用道具 举报

发表于 2008-10-10 14:52:05 | 显示全部楼层
河南网通有一部分是特殊的拨号器,有Linux版本的。
密码加密那个是比较好办的,一抓包就行了。

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

使用道具 举报

 楼主| 发表于 2008-10-11 07:41:22 | 显示全部楼层
原帖由 sejishikong 于 2008-10-10 14:52 发表
河南网通有一部分是特殊的拨号器,有Linux版本的。
密码加密那个是比较好办的,一抓包就行了。

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

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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2008-10-11 10:34:25 | 显示全部楼层
这是练习写的代码,大概重写rp-pppoe的gui界面应当从这个思路开始
  1. #include
  2. #include
  3. #include
  4. int main(int argc,char *argv[])
  5. {
  6. uid_t uid;
  7. uid=getuid();
  8. int opt;
  9. opt=getopt(argc,argv,"do");
  10. if(opt!=-1)
  11. {
  12. switch(opt){
  13. case 'd':
  14. if(uid==0)
  15. {
  16. system("/usr/sbin/adsl-stop");
  17. }
  18. else
  19. {
  20. system("/usr/sbin/pppoe-wrapper stop haulm");
  21. }
  22. break;
  23. case 'o':
  24. if(uid==0)
  25. {
  26. system("/usr/sbin/adsl-start");
  27. }
  28. else
  29. {
  30. system("/usr/sbin/pppoe-wrapper start haulm");
  31. }
  32. break;
  33. }
  34. }
  35. exit(0);
  36. }
复制代码
界面我可能用Qt4来写,界面可能不会太复杂,一个用户框加密码框,对文件进行读写操作,拔号后直接退出程序,所有的连接状态我打包 knetstats来显示,因为knetstats比较专业一些,有专门的人在维护。其它比如无线网络的拔号设置如果能整理出来,也会纳入新的MXD进行设置。大家有什么意见没有?
回复

使用道具 举报

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

使用道具 举报

发表于 2008-10-11 16:03:49 | 显示全部楼层
拨号的时候是不是会尝试重启网卡,有一次我开过机后路由和猫才开,结果就不能自动启动网卡连网了,后来只得用网络设置工具里面走到最后重启了网卡,不然就得重启机器。
看书有重启网卡的命令,方便的话加进去得了,估计也就几行代码的事

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

使用道具 举报

 楼主| 发表于 2008-10-12 11:26:42 | 显示全部楼层
原帖由 panpanpdj 于 2008-10-11 16:03 发表
拨号的时候是不是会尝试重启网卡,有一次我开过机后路由和猫才开,结果就不能自动启动网卡连网了,后来只得用网络设置工具里面走到最后重启了网卡,不然就得重启机器。
看书有重启网卡的命令,方便的话加进去得了,估计也就几行 ...

嗯,反正有什么需要可以提,目前已经实现托盘菜单的拔号了,只是还没实现界面配置功能和网络流量显示。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-27 06:37 , Processed in 0.046652 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表