ADSL的所有操作都要调用RASAPI32.DLL这个dll,详细的调用方法和参数,大家可以查询MSDN。
在codeplex上有个叫dotras的项目http://dotras.codeplex.com/这个项目封装了rasapi dll的操作,大家可以下载下来使用,不用自己在封装了,关于操作方法可以参见实例,下载过来后有示例的
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
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操作
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 { }
}
}
//获取连接信息
|
我之前找过一次用API实现ADSL拨号的资料,结果发现没那么简单。网上很多源代码 是很老的,根本就用不上。
后来发现了系统命令就自带命令可实现ADSL拨号。
所以这里再贴一个方式:
rasdial.exe 宽带名称 宽带帐号 宽带密码
说明:
rasdial.exe ---> 是windows命令
宽带名称 ---> 是创建的拨号连接的名称
宽带帐号 --->ISP给你的帐号
宽带密码 --->ISP给你的密码
示例:
运行--cmd.exe--输入下面的命令 自己修改
rasdial.exe 宽带连接 0769123456@163.gd dg123456
-----------------以上是宽带连接---------------------------
rasdial.exe 宽带名称 /disconnect
-----------------以上是断开连接---------------------------
其实自己用代码来实现的话,就能实现自动换IP刷点赞或投票神马的。不过效率有多高就不知道了。
!评论内容需包含中文