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

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

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

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

调用RASAPI32.DLL

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

(三)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 的下一篇教程,吾乐吧软件站将会对此项目进行跟进,第一时间获得更新。

版权声明:

小编:吾乐吧软件站

链接:https://www.wuleba.com/4216.html

来源:吾乐吧软件站

本资源仅供个人学习,禁止用于商业用途。下载后请于24小时内删除,并支持正版或原作者。因使用本资源导致的任何法律纠纷或损失,由使用者自行承担。

THE END
上一篇 迅雷会员尊享版秘密研发 欲打造最“轻快”下载工具
下一篇 百度分享上线like按钮 向万家合作网站导流量
相关内容
转发
3
点赞
分享
全部转发 0 只看作者
按时间倒序 按时间正序

全部评论 3 只看作者
按时间倒序 按时间正序
Sunkong
第1、2篇在哪?博主应该做一个目录,哈哈
2012年4月24日 01:14 0 回复
Eva Haven
开源不顶,没有人品~~加油
2012年4月24日 01:11 0 回复
赞赏支持
微信收款码
微信扫一扫
支付宝收款码
支付宝扫一扫
投诉内容
0/200
上传图片(最多3张,单张不超过2MB)
生成分享图片
正在生成预览...