(三)C# QQ讨论组广告群发工具——ADSL 拨号实现(附源码)

作者: 时间: 2012-04-23 分类: 技术文章 | 3 评论数 |

上篇我们说到了如何实现登陆,但是腾讯对某一个IP在某一段时间的登陆行为存在检测,对于存在异常的IP会出现验证码,但是腾讯的验证码比较难识别,或许是我对图形识别(匹配)的技术还认识的不够深刻。C#/Java技术交流群:96020642,传送门:http://www.cnblogs.com/Rolends

(三)C# QQ讨论组广告群发工具——ADSL 拨号实现(附源码)

噪线,倾斜,字符连接,镂空,噪线字符同色.这些都是识别的难点,具体的算法我试过,识别成功率很低,技术不够没办法,好了偏题了,还是说ADSL拨号的实现ADSL拨号需要调用windows api来实现。

调用RASAPI32.DLL

(三)C# QQ讨论组广告群发工具——ADSL 拨号实现(附源码)

(三)C# QQ讨论组广告群发工具——ADSL 拨号实现(附源码)

ADSL的所有操作都要调用这个dll,详细的调用方法和参数,大家可以查询MSDN
不过对于我这种懒人,明白了原理,能使用拿来主义就拿哦
在codeplex上有个叫dotras的项目http://dotras.codeplex.com/这个项目封装了rasapi dll的操作,大家可以下载下来使用,不用自己在封装了,关于操作方法可以参见实例,下载过来后有示例的:

 C# Code By wuleba.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
List<string> historyIps = new List<string>();

private void ChangeIP()

{

    SysConfig.IsChangeIp = 
true;

    QQHelper.WriteLog (
“更换IP”);

HANDUPCON:

    
string oldIpAddress = “”;

    RasConnection oldConn = 
null;

    GetIPAddress (
out oldIpAddress, out oldConn);

    
string entryName = “”;

    
if (oldConn != null)

    {

        entryName = oldConn.EntryName;

        RasIPInfo ipAddresses = (RasIPInfo) oldConn.GetProjectionInfo (RasProjectionType.IP);

        
string oldIp = ipAddresses.IPAddress.ToString();

        ipAddresses = 
null;

        QQHelper.WriteLog (
“现在的IP是” + oldIp);

        
bool isUp = false;

        
try

        {

            Console.WriteLine (
“开始挂断”);

            oldConn.HangUp (
10 * 1000);

            Thread.Sleep (SysConfig.RasHangUpSleepTime);

            
if (RasConnection.GetActiveConnectionById (oldConn.EntryId) != null)

            {

                Console.WriteLine (
“结束挂断失败,重新挂断”);

                
goto HANDUPCON;

            }

            oldConn = 
null;

            Console.WriteLine (
“结束挂断”);

            isUp = 
true;

        }

        
catch (Exception ex)

        {

            QQHelper.WriteLog (
“宽带连接挂断失败,” + ex.Message);

        }

    }

CHANGEIP:

    
try

    {

        var dt = SqliteHelper.GetDataTable (
“select * from sys_config”);

        RasDialer rs = 
new RasDialer();

        
if (entryName == “”)

        {

            entryName = dt.Rows[
0][“SC_NetEntryName”].ToString();

        }

        rs.EntryName = entryName;

        rs.PhoneBookPath = RasPhoneBook.GetPhoneBookPath (RasPhoneBookType.AllUsers);

        rs.Credentials = 
new NetworkCredential (dt.Rows[0][“SC_NetUser”].ToString() , dt.Rows[0][“SC_NetPwd”].ToString() );

        dt.Dispose();

        rs.Dial();

        rs.Dispose();

    }

    
catch (Exception ex)

    {

        QQHelper.WriteLog (
“宽带连接拨号失败,” + ex.Message);

        Thread.Sleep (SysConfig.DialFaildSleepTime);

        
goto CHANGEIP;

    }

    
if (oldConn != null)

    {

        
string ipAddresses = “”;

        GetIPAddress (
out ipAddresses, out oldConn);

        oldConn = 
null;

        
if (oldIpAddress == ipAddresses)

        {

            QQHelper.WriteLog (
“IP和上次重复,重新拨号”);

            Thread.Sleep (SysConfig.DialFaildSleepTime);

            
goto HANDUPCON;

        }

        
else

        {

            
if (historyIps.Contains (ipAddresses) )

            {

                QQHelper.WriteLog (
“IP和前” + SysConfig.IPLoopCount + “次重复,重新拨号”);

                Thread.Sleep (SysConfig.DialFaildSleepTime);

                
goto HANDUPCON;

            }

            
if (historyIps.Count >= SysConfig.IPLoopCount)

            {

                historyIps.RemoveAt (
0);

                historyIps.Add (ipAddresses);

            }

            historyIps.Add (ipAddresses);

        }

        QQHelper.WriteLog (
“现在的IP是” + ipAddresses);

    }

    SysConfig.IsChangeIp = 
false;

}

切换IP操作

 C# Code By wuleba.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private void GetIPAddress (out string ipAddress, out RasConnection oldConn)

{

    oldConn = 
null;

    ipAddress = 
“”;

    var conns = RasConnection.GetActiveConnections();

    
foreach (var conn in conns)

    {

        
if (conn.Device.DeviceType.ToLower() == “pppoe”)

        {

            oldConn = conn;

            
break;

        }

    }

    conns = 
null;

    
if (oldConn != null)

    {

        
try

        {

            RasIPInfo ipAddresses = (RasIPInfo) oldConn.GetProjectionInfo (RasProjectionType.IP);

            ipAddress = ipAddresses.IPAddress.ToString();

            ipAddresses = 
null;

        }

        
catch { }

    }

}

获取连接信息

这一篇到此结束,期待 Rolends 的下一篇教程,吾乐吧软件站将会对此项目进行跟进,第一时间获得更新。

本文采用 CC协议 发布,转载请注明:转载自 吾乐吧软件站

本文链接地址:http://www.wuleba.com/?p=2157

3 条评论 给“(三)C# QQ讨论组广告群发工具——ADSL 拨号实现(附源码)”

  1. 第1、2篇在哪?博主应该做一个目录,哈哈

  2. 开源不顶,没有人品~~加油

发表评论


微软MSDN资源免费订阅,MSDN 我告诉你