Auto proxy changer application code in VB .Net

The code given here is for making simple app in VB .Net which will read a proxy address from file specified in path field and then automatically change the proxy settings of PC to next proxy address from file after specified time amount. Note that file contains list of proxy addresses with port number in format as given below

0.0.0.0:80
1.1.1.1:8080
……………
…………….

i.e., ip address and port number.

Form1.vb

----------------------------------------------------------------------------------Imports SystemImports System.Runtime.InteropServicesImports System.IOImports Microsoft.VisualBasicImports System.TimersPublic Class Form1    Dim FILE_NAME As String = "C:UsersDellDocuments12.txt"    Dim label As String    Public proxy(2000) As String    Public index As Integer = 0    Public max_proxys As Integer=0    Dim a As String    Dim start_check As Integer = 0    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load           End Sub    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        If (start_check > 0) Then            index = 0            Do While index <> max_proxys                proxy(index) = ""                index = index + 1            Loop            If TextBox3.Text = "" Then                FILE_NAME = "C:UsersDellDocuments12.txt"            End If        End If        If TextBox3.Text <> "" Then            FILE_NAME = TextBox3.Text        End If        Try            Dim reader As StreamReader = My.Computer.FileSystem.OpenTextFileReader(FILE_NAME)            index = 0            Do While reader.Peek <> -1                a = reader.ReadLine                proxy(index) = a.ToString                index = index + 1            Loop            max_proxys = index            reader.Close()        Catch ex As Exception            MessageBox.Show("File Not Found")            Timer1.Stop()        End Try        label = "true"        index = 0        ''TextBox1.Text = proxy(0)        If TextBox2.Text = "" Then            Timer1.Interval = 1000 'ms        Else            Try                Dim a As Integer = Convert.ToDecimal(TextBox2.Text)            Timer1.Interval = a * 1000 'ms            Catch ex As Exception                MessageBox.Show(ex.Message & "Please Enter Valid Time in Seconds ")                If Timer1.Enabled Then                    Timer1.Stop()                End If            End Try        End If        start_check = 1        Timer1.Start()    End Sub    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged    End Sub    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click        label = "false"    End Sub    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click        Dim clsProxy As New IEProxy        clsProxy.DisableProxy()    End Sub        Private Sub Timer1_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick        ''Timer1.Stop()        TextBox1.Text = proxy(index)        index = index + 1        Dim clsProxy As New IEProxy        If clsProxy.SetProxy(TextBox1.Text) Then            ''  MessageBox.Show("Proxy successfully enabled.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)        Else            '' MessageBox.Show("Error enabling proxy.", "Failed", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)        End If        If index >= max_proxys Then            index = 0        End If        If label.Equals("false") Then            Timer1.Stop()        End If    End SubEnd ClassPublic Class IEProxy    Public Enum Options        INTERNET_PER_CONN_FLAGS = 1        INTERNET_PER_CONN_PROXY_SERVER = 2        INTERNET_PER_CONN_PROXY_BYPASS = 3        INTERNET_PER_CONN_AUTOCONFIG_URL = 4        INTERNET_PER_CONN_AUTODISCOVERY_FLAGS = 5        INTERNET_OPTION_REFRESH = 37        INTERNET_OPTION_PER_CONNECTION_OPTION = 75        INTERNET_OPTION_SETTINGS_CHANGED = 39        PROXY_TYPE_PROXY = &H2        PROXY_TYPE_DIRECT = &H1    End Enum    <StructLayout(LayoutKind.Sequential)> _    Private Class FILETIME        Public dwLowDateTime As Integer        Public dwHighDateTime As Integer    End Class    <StructLayout(LayoutKind.Explicit, Size:=12)> _    Private Structure INTERNET_PER_CONN_OPTION        <FieldOffset(0)> Dim dwOption As Integer        <FieldOffset(4)> Dim dwValue As Integer        <FieldOffset(4)> Dim pszValue As IntPtr        <FieldOffset(4)> Dim ftValue As IntPtr        Public Function GetBytes() As Byte()            Dim b(12) As Byte            BitConverter.GetBytes(dwOption).CopyTo(b, 0)            Select Case dwOption                Case Options.INTERNET_PER_CONN_FLAGS                    BitConverter.GetBytes(dwValue).CopyTo(b, 4)                Case Options.INTERNET_PER_CONN_PROXY_BYPASS                    BitConverter.GetBytes(pszValue.ToInt32()).CopyTo(b, 4)                Case Options.INTERNET_PER_CONN_PROXY_SERVER                    BitConverter.GetBytes(pszValue.ToInt32()).CopyTo(b, 4)            End Select            Return b        End Function    End Structure    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _    Private Class INTERNET_PER_CONN_OPTION_LIST        Public dwSize As Integer        Public pszConnection As String        Public dwOptionCount As Integer        Public dwOptionError As Integer        Public pOptions As IntPtr    End Class    <StructLayout(LayoutKind.Sequential)> _    Private Class INTERNET_PROXY_INFO        Public dwAccessType As Integer        Public lpszProxy As IntPtr        Public lpszProxyBypass As IntPtr    End Class    Private Const ERROR_INSUFFICIENT_BUFFER = 122    Private Const INTERNET_OPTION_PROXY = 38    Private Const INTERNET_OPEN_TYPE_DIRECT = 1    <DllImport("wininet.dll")> _    Private Shared Function InternetSetOption(ByVal hInternet As IntPtr, _             ByVal dwOption As Integer, _             ByVal lpBuffer As INTERNET_PER_CONN_OPTION_LIST, _             ByVal dwBufferLength As Integer) As Boolean    End Function    <DllImport("kernel32.dll")> _    Private Shared Function GetLastError() As Integer    End Function    Public Function SetProxy(ByVal proxy_full_addr As String) As Boolean        Dim bReturn As Boolean        Dim list As New INTERNET_PER_CONN_OPTION_LIST        Dim dwBufSize As Integer = Marshal.SizeOf(list)        Dim opts(3) As INTERNET_PER_CONN_OPTION        Dim opt_size As Integer = Marshal.SizeOf(opts(0))        list.dwSize = dwBufSize        list.pszConnection = ControlChars.NullChar        list.dwOptionCount = 3        'set flags        opts(0).dwOption = Options.INTERNET_PER_CONN_FLAGS        opts(0).dwValue = Options.PROXY_TYPE_DIRECT Or Options.PROXY_TYPE_PROXY        'set proxyname        opts(1).dwOption = Options.INTERNET_PER_CONN_PROXY_SERVER        opts(1).pszValue = Marshal.StringToHGlobalAnsi(proxy_full_addr)        'set override        opts(2).dwOption = Options.INTERNET_PER_CONN_PROXY_BYPASS        opts(2).pszValue = Marshal.StringToHGlobalAnsi("local")        Dim b(3 * opt_size) As Byte        opts(0).GetBytes().CopyTo(b, 0)        opts(1).GetBytes().CopyTo(b, opt_size)        opts(2).GetBytes().CopyTo(b, 2 * opt_size)        Dim ptr As IntPtr = Marshal.AllocCoTaskMem(3 * opt_size)        Marshal.Copy(b, 0, ptr, 3 * opt_size)        list.pOptions = ptr        'Set the options on the connection        bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_PER_CONNECTION_OPTION, list, dwBufSize)        If Not bReturn Then            Debug.WriteLine(GetLastError)        End If        'Notify existing Internet Explorer instances that the settings have changed        bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_SETTINGS_CHANGED, Nothing, 0)        If Not bReturn Then            Debug.WriteLine(GetLastError)        End If        'Flush the current IE proxy setting        bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_REFRESH, Nothing, 0)        If Not bReturn Then            Debug.WriteLine(GetLastError)        End If        Marshal.FreeHGlobal(opts(1).pszValue)        Marshal.FreeHGlobal(opts(2).pszValue)        Marshal.FreeCoTaskMem(ptr)        Return bReturn    End Function    Public Function DisableProxy() As Boolean        Dim bReturn As Boolean        Dim list As New INTERNET_PER_CONN_OPTION_LIST        Dim dwBufSize As Integer = Marshal.SizeOf(list)        Dim opts(0) As INTERNET_PER_CONN_OPTION        Dim opt_size As Integer = Marshal.SizeOf(opts(0))        list.dwSize = dwBufSize        list.pszConnection = ControlChars.NullChar        list.dwOptionCount = 1        opts(0).dwOption = Options.INTERNET_PER_CONN_FLAGS        opts(0).dwValue = Options.PROXY_TYPE_DIRECT        Dim b(opt_size) As Byte        opts(0).GetBytes().CopyTo(b, 0)        Dim ptr As IntPtr = Marshal.AllocCoTaskMem(opt_size)        Marshal.Copy(b, 0, ptr, opt_size)        list.pOptions = ptr        'Set the options on the connection        bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_PER_CONNECTION_OPTION, list, dwBufSize)        If Not bReturn Then            Debug.WriteLine(GetLastError)        End If        'Notify existing Internet Explorer instances that the settings have changed        bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_SETTINGS_CHANGED, Nothing, 0)        If Not bReturn Then            Debug.WriteLine(GetLastError)        End If        'Flush the current IE proxy setting        bReturn = InternetSetOption(IntPtr.Zero, Options.INTERNET_OPTION_REFRESH, Nothing, 0)        If Not bReturn Then            Debug.WriteLine(GetLastError)        End If        Marshal.FreeCoTaskMem(ptr)        Return bReturn    End FunctionEnd Class

Output :

auto proxy changer in vb.net

 

Comments

Popular posts from this blog

MATLAB code for Circular Convolution using Matrix method

Positive number pipe in angular 2+