综合项目之闪讯破解(三)之 如何用C++实现PPPOE拨号

如何用C++实现PPPOE拨号

1)CMD命令行方式

拨号本是一件很简单的事情,CMD命令行直接搞定,但我在第一篇文章中提到过,闪讯的真实用户名的前两位是换行符‘\n’和 ‘\r’,这两个字符是不可能在命令行中打出来的(这正是闪讯之所以限制我们的原因),所以这个方法行不通。

2)使用Rasapi32.dll中的函数来进行PPPOE拨号

函数名:RasDial
函数具体功能见:https://msdn.microsoft.com/en-us/library/windows/desktop/aa377004(v=vs.85).aspx
直接上代码

# include <ras.h>
# include <windows.h>
#pragma comment(lib, "Rasapi32.lib")
BOOL  DailPPPOE(char* PPPOENumber, char* UserName, char* UserPassWard)
{
    RASDIALPARAMSA RasPragma = { 0 };
    HRASCONN   m_hRasConn = NULL;
    RasPragma.dwSize = 1064;//这个非常重要

    strcpy(RasPragma.szEntryName, PPPOENumber); //set PPPOE Dial up entry name
    RasPragma.szEntryName[1] = '\0';
    strcpy(RasPragma.szUserName, UserName);  //set PPPOE Dial up user name
    RasPragma.szUserName[29] = '\0';
    strcpy(RasPragma.szPassword, UserPassWard);  //set PPPOE Dial up password
    RasPragma.szPassword[6] = '\0';

    BOOL ret = RasDialA(NULL, NULL, &RasPragma, 0L, NULL, &m_hRasConn);
    return ret;
}

在这里我必须强调一下RasPragma.dwSize = 1064;这一段代码,这段代码的实际意义是取得RasPragma结构体的大小,这个是整个拨号代码中最重要的一段。我们一般在网上搜到的RasDial拨号代码一般是”RasPragma.dwSize =sizeof(RasPragma);”,这段代码在WIN8/10上使用都没有问题,但在WIN7上拨号就会一直返回错误632(结构大小错误),这就是为什么在WIN7上拨号总是失败的原因,具体为什么要让RasPragma大小等于1064我也不是很清楚,其实当时我也是被这个问题困扰了许久,后来网上下了一个大神的拨号程序,他的程序可以在WIN7上拨号,于是我就用IDA反编译看到了他的拨号代码,注意下图红框部分,他直接让RasPragma.dwSize =1064了,我按着他的尝试了一下,直接OK。
用IDA反编译看到大神的代码
另一个问题就是大神用的是RasDialA这个函数,我在ras.h头文件中找了一下还发现了RasDialW这个函数,他俩的区别在于传入变量名称的字符编码方式的不同,功能都一样,区别见下图
这里写图片描述
其实VS已经自动的帮我们选用了一种编码方式UNICODE编码,所以我们一般写RasDial其使用的是RasDialW这个函数,见下图
这里写图片描述
虽说两者W和A功能相同但还是要注意传入变量的结构体还是有区别的,编程的时候注意一下就OK了。
经过上面的处理,我们只要把用户名和密码都以Char*传进去就可以了,PPPOE拨号问题也就迎刃而解了。

BY Sunday丶若雪 转载请注明出处

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值