自动投票系统【五】IP更换

    技术2022-05-20  48

    其实这个东西也有很多方式,比如软件商代理,有丰富的IP资源,ADSL.像我这样的当然没前面两个咯。最后一个倒可以考虑,结果让我找到了个好软件,简单绿色。下载设置直接断开;拨号。既然是自动投票当然是嵌入到自己的程式中咯。自己控制多好啊!好,那就自己些个吧。了解知识,消化知识。自己模拟。

     

    在网络编程中,有时候会需要重新拨号建立网络连接(Ad点击软件通过重新拨号形成有效点击) ,下面介绍两种程序中拨号的方法.

    1、最简单的方法:使用RasDial命令    RasDialWindows自带的命令,使用非常简单。实际使用是可将下面代码保存为一个批处理文件,然后直接运行或在程序里进行调用。

    rasdial.exe /disconnect '断开连接 del "C:/Documents and Settings/hyuqin/Cookies/*.*" /Q '清除Cookie rasdial.exe 连接名 连接账户 连接密码 '重新拨号

    2、封装为类,灵活调用上面提到的方法虽然很简单,但并非标准的实现方法,使用时会受到一些限制,此时最好的办法就是将实现代码封装为类库。下面这个类库是网上一位朋友提供的,直接调用就行.

    using System;using System.Runtime.InteropServices;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;}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public struct RasEntryName{    public int dwSize;    //[MarshalAs(UnmanagedType.ByValTStr,SizeConst=(int)RasFieldSizeConstants.RAS_MaxEntryName + 1)]    public string szEntryName;    //#if WINVER5    //  public int dwFlags;    //  [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260+1)]    //  public string szPhonebookPath;    //#endif}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(nullnull, 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(nullnull, 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);    }}

     


    最新回复(0)