最新文章:

首页 信息安全

ADSL拨号调用api来实现+命令行方法

发布时间:2015年06月12日 评论数:抢沙发 阅读数:7266

    201204221643077114.pngADSL的所有操作都要调用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刷点赞或投票神马的。不过效率有多高就不知道了。

二维码加载中...
本文作者:Mr.linus      文章标题: ADSL拨号调用api来实现+命令行方法
本文地址:http://www.90qj.com/177.html  本文已经被百度收录,点击查看详情
版权声明:若无注明,本文皆为“挨踢 Blog”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论