请问下有人用过 C#ADSL宽带连接操作类Ras(DotRas;)

wuxin52115288 2014-04-16 01:18:28
如题 ·对~这个我该如何引用????我加入了个
using DotRas.Internal;
using DotRas;
using Microsoft.Win32;
using System.Runtime.InteropServices;
可还是不行

RASDIALPARAMS structure = new RASDIALPARAMS();还是报错~~求大神指导下
...全文
391 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxin52115288 2014-04-21
  • 打赏
  • 举报
回复
引用 5 楼 lanzyer 的回复:
不会用去我下载吧,我上传资源里有。
大哥~~~给个链接地址嘛??这个只能获取ADSL拨号连接~~~~~路由器里面的可以获取到么?
lanzyer 2014-04-21
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/lanzyer/7224331
lanzyer 2014-04-20
  • 打赏
  • 举报
回复
不会用去我下载吧,我上传资源里有。
lanzyer 2014-04-20
  • 打赏
  • 举报
回复
这个就可以WIn7获取
wuxin52115288 2014-04-16
  • 打赏
  • 举报
回复
引用 1 楼 lanzyer 的回复:
}[/code]
大哥~~~能给个就单单获取宽带账号的么?WIN7可以获取到的。。我弄了两天 一直失败。。。明天要被老大叼了。。哎。。
lanzyer 2014-04-16
  • 打赏
  • 举报
回复

        public class RAS
        {
            [DllImport("Rasapi32.dll", EntryPoint = "RasEnumConnectionsA",
                 SetLastError = true)]

            internal static extern int RasEnumConnections
                (
                ref RASCONN lprasconn, // buffer to receive connections data
                ref int lpcb, // size in bytes of buffer
                ref int lpcConnections // number of connections written to buffer
                );


            [DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
            internal static extern uint RasGetConnectionStatistics(
                IntPtr hRasConn,       // handle to the connection
                [In, Out]RasStats lpStatistics  // buffer to receive statistics
                );
            [DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
            public extern static uint RasHangUp(
                IntPtr hrasconn  // handle to the RAS connection to hang up
                );

            [DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
            public extern static uint RasEnumEntries(
                string reserved,              // reserved, must be NULL
                string lpszPhonebook,         // pointer to full path and
                //  file name of phone-book file
                [In, Out]RasEntryName[] lprasentryname, // buffer to receive
                //  phone-book entries
                ref int lpcb,                  // size in bytes of buffer
                out int lpcEntries             // number of entries written
                //  to buffer
                );

            [DllImport("wininet.dll", CharSet = CharSet.Auto)]
            public extern static int InternetDial(
                IntPtr hwnd,
                [In]string lpszConnectoid,
                uint dwFlags,
                ref int lpdwConnection,
                uint dwReserved
                );

            public RAS()
            {
            }
        }
        public enum DEL_CACHE_TYPE //要删除的类型。
        {
            File,//表示internet临时文件
            Cookie //表示Cookie
        }

        public class RASDisplay
        {
            [DllImport("wininet.dll", CharSet = CharSet.Auto)]
            public static extern bool DeleteUrlCacheEntry(
                DEL_CACHE_TYPE type
                );
            private string m_duration;
            private string m_ConnectionName;
            private string[] m_ConnectionNames;
            private double m_TX;
            private double m_RX;
            private bool m_connected;
            private IntPtr m_ConnectedRasHandle;

            //     RasStats status = new RasStats();
            public RASDisplay()
            {
                m_connected = true;

                RAS lpras = new RAS();
                RASCONN lprasConn = new RASCONN();

                lprasConn.dwSize = Marshal.SizeOf(typeof(RASCONN));
                lprasConn.hrasconn = IntPtr.Zero;

                int lpcb = 0;
                int lpcConnections = 0;
                int nRet = 0;
                lpcb = Marshal.SizeOf(typeof(RASCONN));

                nRet = RAS.RasEnumConnections(ref lprasConn, ref lpcb, ref
            lpcConnections);

                if (nRet != 0)
                {
                    m_connected = false;
                    return;

                }

                if (lpcConnections > 0)
                {
                    //for (int i = 0; i < lpcConnections; i++)

                    //{
                    RasStats stats = new RasStats();

                    m_ConnectedRasHandle = lprasConn.hrasconn;
                    RAS.RasGetConnectionStatistics(lprasConn.hrasconn, stats);


                    m_ConnectionName = lprasConn.szEntryName;

                    int Hours = 0;
                    int Minutes = 0;
                    int Seconds = 0;

                    Hours = ((stats.dwConnectionDuration / 1000) / 3600);
                    Minutes = ((stats.dwConnectionDuration / 1000) / 60) - (Hours * 60);
                    Seconds = ((stats.dwConnectionDuration / 1000)) - (Minutes * 60) - (Hours * 3600);


                    m_duration = Hours + " hours " + Minutes + " minutes " + Seconds + " secs";
                    m_TX = stats.dwBytesXmited;
                    m_RX = stats.dwBytesRcved;
                    //}
                }
                else
                {
                    m_connected = false;
                }


                int lpNames = 1;
                int entryNameSize = 0;
                int lpSize = 0;
                RasEntryName[] names = null;

                entryNameSize = Marshal.SizeOf(typeof(RasEntryName));
                lpSize = lpNames * entryNameSize;

                names = new RasEntryName[lpNames];
                names[0].dwSize = entryNameSize;

                uint retval = RAS.RasEnumEntries(null, null, names, ref lpSize, out lpNames);

                //if we have more than one connection, we need to do it again
                if (lpNames > 1)
                {
                    names = new RasEntryName[lpNames];
                    for (int i = 0; i < names.Length; i++)
                    {
                        names[i].dwSize = entryNameSize;
                    }

                    retval = RAS.RasEnumEntries(null, null, names, ref lpSize, out lpNames);

                }
                m_ConnectionNames = new string[names.Length];


                if (lpNames > 0)
                {
                    for (int i = 0; i < names.Length; i++)
                    {
                        m_ConnectionNames[i] = names[i].szEntryName;
                    }
                }
            }

            public string Duration
            {
                get
                {
                    return m_connected ? m_duration : "";
                }
            }

            public string[] Connections
            {
                get
                {
                    return m_ConnectionNames;
                }
            }

            public double BytesTransmitted
            {
                get
                {
                    return m_connected ? m_TX : 0;
                }
            }
            public double BytesReceived
            {
                get
                {
                    return m_connected ? m_RX : 0;

                }
            }
            public string ConnectionName
            {
                get
                {
                    return m_connected ? m_ConnectionName : "";
                }
            }
            public bool IsConnected
            {
                get
                {
                    return m_connected;
                }
            }

            public int Connect(string Connection)
            {
                int temp = 0;
                uint INTERNET_AUTO_DIAL_UNATTENDED = 2;
                int retVal = RAS.InternetDial(IntPtr.Zero, Connection, INTERNET_AUTO_DIAL_UNATTENDED, ref temp, 0);
                return retVal;
            }
            public void Disconnect()
            {
                RAS.RasHangUp(m_ConnectedRasHandle);
            }
        }
    }
lanzyer 2014-04-16
  • 打赏
  • 举报
回复
我正在用的一个类,人试下。有个拨号方式是包含DOTras的。
using System;
using System.Collections.Generic;

using System.Text;
using System.Runtime.InteropServices;
using System.Net;

using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Diagnostics;
using System.Threading;
using System.IO;
using DotRas;

namespace REGQQ
{
    public delegate void Do_adslEventHandler(bool re);

    public class AdslTool
    {
        /// <summary>
        /// 重新拨号
        /// </summary>
        public bool CennectioningTF = false; //正在拨号
        public string Cname, User, Pwd;
        public event Do_adslEventHandler do_adslEventHandler = null;

        public AdslTool()
        {
            //Cname = QQGlobal.adslname;
            //User = QQGlobal.adsluser;
            //Pwd = QQGlobal.adslpwd;
        }
        public AdslTool(string name, string user, string pwd)
        {
            Cname = name;
            User = user;
            Pwd = pwd;

        }



        public void adslCennection0()
        {
            try
            {
                RASDisplay ras = new RASDisplay();
                ras.Disconnect();
                System.Threading.Thread.Sleep(QQGlobal.AdslWaitTime * 1000);
                ras.Connect(Cname);
                System.Threading.Thread.Sleep(500);
                do_adslEventHandler(true);

            }
            catch (Exception)
            {
                do_adslEventHandler(false);
            }
        }

        public void adslCennection()
        {
            try
            {
                RASDisplay ras = new RASDisplay();
                ras.Disconnect();
                //doProcessDISCONNECT(string.Format(" {0} /DISCONNECT", Cname));
                System.Threading.Thread.Sleep(QQGlobal.AdslWaitTime * 1000 + 200);
                bool re = doProcess(string.Format(" {0} {1} {2}", Cname, User, Pwd));
                Thread.Sleep(200);
                do_adslEventHandler(re);
            }
            catch (Exception)
            {
                do_adslEventHandler(false);
            }
        }

        //RasDialer方式
        public void adslCennection2()
        {
            //try
            //{
                doProcessDISCONNECT(string.Format(" {0} /DISCONNECT", Cname));
                System.Threading.Thread.Sleep(QQGlobal.AdslWaitTime * 1000 + 200);
                RasDialer dialer = new RasDialer();
           
                dialer.EntryName = Cname;
                dialer.PhoneNumber = " ";
                dialer.AllowUseStoredCredentials = true;
                dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);
                dialer.Timeout = 2000;
                dialer.Dial();
                Thread.Sleep(500);
                do_adslEventHandler(true);
            //}
            //catch (Exception)
            //{
            //    do_adslEventHandler(false);
            //}
        }

        private void doProcessDISCONNECT(string str)
        {


            try
            {
                ProcessStartInfo ras = new ProcessStartInfo();
                ras.FileName = "rasdial.exe";
                ras.WindowStyle = ProcessWindowStyle.Hidden;
                ras.CreateNoWindow = true;
                ras.Arguments = str;
                ras.RedirectStandardOutput = true;
                ras.UseShellExecute = false;
                Process p = Process.Start(ras);
                //string re = p.StandardOutput.ReadToEnd();
            }
            catch (Exception)
            {
            }

        }


        private void Killprocess()
        {
            System.Diagnostics.Process myproc = new System.Diagnostics.Process();

            //得到所有打开的进程
         

                foreach (System.Diagnostics.Process singleProc in System.Diagnostics.Process.GetProcesses())
                {
                    try
                    {
                        string ProcessName = singleProc.ProcessName.ToLower();
                        if (ProcessName.Contains("rasdial"))
                        {
                            singleProc.Kill();
                        }
                    }
                    catch (Exception)
                    {
                      
                    }
                }
  
        }

        private bool doProcess(string str)
        {

            //try
            //{
                bool rebool = false;

                Killprocess();
                ProcessStartInfo ras = new ProcessStartInfo();
                ras.FileName = "rasdial.exe";
                ras.WindowStyle = ProcessWindowStyle.Hidden;
                ras.CreateNoWindow = true;
                ras.Arguments = str;
                ras.RedirectStandardOutput = true;
                ras.UseShellExecute = false;
                Process p = Process.Start(ras);
              
                string re = p.StandardOutput.ReadToEnd();
                p.Close();
                p.Dispose();
                if (re.IndexOf("已连接") > 0)
                    rebool = true;
                return rebool;
            //}
            //catch (Exception)
            //{
            //    return false;
            //}



        }


        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public struct RasEntryName      //define the struct to receive the entry name
        {
            public int dwSize;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256 + 1)]
            public string szEntryName;
#if WINVER5
     public int dwFlags;
     [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260+1)]
     public string szPhonebookPath;
#endif
        }

        [DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
        public extern static uint RasEnumEntries(
            string reserved,              // reserved, must be NULL
            string lpszPhonebook,         // pointer to full path and file name of phone-book file
            [In, Out]RasEntryName[] lprasentryname, // buffer to receive phone-book entries
            ref int lpcb,                  // size in bytes of buffer
            out int lpcEntries             // number of entries written to buffer
        );


        //获取当前创建的adsl宽带列表

        public string[] adsllist()
        {
            int lpNames = 1;
            int entryNameSize = 0;
            int lpSize = 0;
            RasEntryName[] names = null;
            entryNameSize = Marshal.SizeOf(typeof(RasEntryName));
            lpSize = lpNames * entryNameSize;
            names = new RasEntryName[lpNames];
            names[0].dwSize = entryNameSize;
            uint retval = RasEnumEntries(null, null, names, ref lpSize, out lpNames);

            //if we have more than one connection, we need to do it again
            if (lpNames > 1)
            {
                names = new RasEntryName[lpNames];
                for (int i = 0; i < names.Length; i++)
                {
                    names[i].dwSize = entryNameSize;
                }
                retval = RasEnumEntries(null, null, names, ref lpSize, out lpNames);
            }
            string[] keysList = new string[names.Length];
            if (lpNames > 0)
            {
                for (int i = 0; i < names.Length; i++)
                {
                    keysList[i] = (names[i].szEntryName);
                }
            }

            return keysList;
        }


        [DllImport("wininet.dll")]
        private extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue);

        private static int currentTry = 0;
        public static bool IsConnected(out string ip, out string head)
        {

            ip = "";
            head = "";
            //try
            //{
            currentTry++;
            HttpHelper http = new HttpHelper();
            string url = "http://iframe.ip138.com/ic.asp";
            http.timeout = 60000;
            string result = http.GetHtml(url);
            string regexStr = "(?<ip1>[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})(?<ip2>\\.[0-9]{1,3})";
            Regex r = new Regex(regexStr, RegexOptions.IgnoreCase);
            MatchCollection M = r.Matches(result);
            if (M.Count > 0)
            {
                ip = M[0].Groups["ip1"].Value + M[0].Groups["ip2"].Value;
                head = M[0].Groups["ip1"].Value;
                currentTry = 0;
                return true;
            }
            else if (currentTry < 3)
            {
                Thread.Sleep(1000);
                return IsConnected(out ip, out head);
            }
            else
            {
                currentTry = 0;
                return false;
            }
            //}
            //catch (Exception)
            //{

            //    return false;
            //}

        }

        public struct RASCONN
        {
            public int dwSize;
            public IntPtr hrasconn;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)]
            public string szEntryName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)]
            public string szDeviceType;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]
            public string szDeviceName;
        }

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public struct RasStats
        {
            public int dwSize;
            public int dwBytesXmited;
            public int dwBytesRcved;
            public int dwFramesXmited;
            public int dwFramesRcved;
            public int dwCrcErr;
            public int dwTimeoutErr;
            public int dwAlignmentErr;
            public int dwHardwareOverrunErr;
            public int dwFramingErr;
            public int dwBufferOverrunErr;
            public int dwCompressionRatioIn;
            public int dwCompressionRatioOut;
            public int dwBps;
            public int dwConnectionDuration;
        }


}
红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线红队蓝军逆向学习路线

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧