|
前段时间接触的某个项目,因为服务器对客户端的IP做了限制,所以就需要隔断时间自动进行ADSL宽带重新拨号,实现换IP的功能。
网上也找了一些源码,但不是不好用就是功能有所限制,所以,这里面找到了一个相对来说靠谱的,之后自己又重新封装并优化了下代码,动态获取拨号的IP地址,以及判断是否之前已经使用过,等等吧,基本实现了我要的功能。
下面给大家大概讲解下怎么用:我封装的类的名字叫:CAdslMgr
用到的相关头文件和系统lib库如下:
- #include <ras.h>
- #include <RasError.h>
- #include <Wininet.h>
- #pragma comment(lib, "Rasapi32.lib")
- #pragma comment(lib,"wininet.lib")
复制代码
► 首先,CAdslMgr 类提供了一个 BOOL OnEnum(CString strPPPoEName); 方法,用来枚举参数指定的宽带拨号链接是否存在,存在则返回 TRUE,否则返回 FALSE。
► 之后如果指定的宽带拨号链接不存在则可以调用 BOOL CreatePPPoE(CString strEntryName, CString strUser, CString strPass); 进行ADSL宽带拨号链接的创建工作,其中 strEntryName 是宽带拨号的名字,这个可以随便填,比如:大连联通 之类的。strUser 表示ADSL宽带的账号,strPass 表示ADSL宽带的密码。这个你家的宽带账号和密码是什么就填什么。函数创建成功返回 TRUE,失败返回 FALSE。
► 枚举或者创建完了一个ADSL拨号链接之后,还没有进行连接,可以调用 BOOL RAS_Connect(CString strUser, CString strPass, CString *pOutIpAddr); 函数进行连接,strUser 指定自定义的ADSL拨号用户名,strPass 指定密码,pOutIpAddr 可以获得到ADSL拨号成功之后被分配的IP地址。
► CString CheckNet(); 函数用来返回当前网络的类型,是拨号上网,还是局域网本地连接上网,还是代理上网,等等。
► BOOL IsConnected(); 函数用来判断之前创建或者枚举到的ADSL拨号链接是否已经连接上了网络;
► void RAS_Close(); 用来关闭断开当前的ADSL网络拨号链接。
基本核心的ADSL网络拨号操作就是上面那些函数。
////////////////////////////////////////////////////////////////////////
本篇文章来自VC驿站:https://www.cctry.com/thread-278478-1-1.html
转载请注明出处!
////////////////////////////////////////////////////////////////////////
CAdslMgr 类中还提供了一些动态换IP的辅助成员变量和函数:
GetIpAddrByRemote 获取当前的公网IP地址;
CMap <CString,LPCTSTR,CString,LPCTSTR> m_IpMap; 是个IP字符串的Map,把之前用过的IP放到这个Map里面,方便以后换IP的时候检测,如果发现存在了就重新拨号;
► 以上两个是作为私有成员存在的,对外的接口就是这个:
BOOL ChangeIpAddr(CString strPPPoEName, CString strUser, CString strPass); 功能就是通过重复拨号实现动态换IP的功能。
好了,关于这个类的几个函数的使用基本给大家介绍完了,相关的具体使用大家可以自己写代码实现以下,试试好不好用。各个函数的实现细节如果大家感兴趣的话可以看下源码哦!不仅要知道怎么用,而且要知道为什么这么用!
哦,对了,代码中的 GetIpAddrByRemote 这个函数是通过HTTP网页的形式获取本机的外网IP地址,所以用到了我之前封装的一个 WinHttp 方面的类:CWinHttpEx
这个类的源码就先不给大家提供了。以后会开源的。也算是给大家留一个小作业吧,自己通过HTTP网页的形式获取本机的外网IP地址,实现 BOOL GetIpAddrByRemote(CString& strIp); 函数的功能。具体HTTP这块用什么库都行,winhttp 也行,libcurl 也行,不嫌麻烦的话用 socket 来实现也行的。大家赶快动手吧!学编程这东西就得多动手实践,多写代码,看到什么写什么,这样才能进步的快啊!
源码在附件中:AdslMgr.h 和 AdslMgr.cpp
(回复后可见,下载权限:普通会员 级别及其以上)
|
上一篇: 侯捷+深入浅出MFC非扫描版下一篇: GDI变色字体
|