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

下载说明:① 请不要相信网站的任何广告;② 当你使用手机访问网盘时,网盘会诱导你下载他们的APP,大家不要去下载,直接把浏览器改成“电脑模式/PC模式”访问,然后免费普通下载即可;③ 123云盘限制,必须登录后才能下载,且限制每人每天下载流量1GB,下载 123云盘免流量破解工具

版权声明:
小编:吾乐吧软件站
链接:https://wuleba.com/4216.html
来源:吾乐吧软件站
本站资源仅供个人学习交流,请于下载后 24 小时内删除,不允许用于商业用途,否则法律问题自行承担。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录