网上找的VB.NET实现PPPoE拨号,有错误但可借鉴

Option Explicit On
Imports System
Imports System.Text
Imports Microsoft.Win32
Imports System.Runtime.InteropServices

Public Class FormMain

    Public Const MAX_PATH As Int32 = 260
    Public Const RAS_MaxPATH As Int32 = 259
    Public Const RAS_MaxUserName As Int32 = 256
    Public Const RAS_MaxPassword As Int32 = 256
    Public Const RAS_MaxDomain As Int32 = 15
    Public Const RAS_MaxX25PadType As Int32 = 31
    Public Const RAS_MaxDeviceType As Int32 = 16
    Public Const RAS_MaxPhoneNumber As Int32 = 128
    Public Const RAS_MaxIpAddress As Int32 = 15
    Public Const RAS_MaxIpxAddress As Int32 = 21


    Public Const RAS_MaxEntryName As Int32 = 256
    Public Const RAS_MaxDeviceName As Int32 = 128
    Public Const RAS_MaxCallbackNumber As Int32 = RAS_MaxPhoneNumber

    Public Const RAS_MaxAreaCode As Int32 = 10
    Public Const RAS_MaxPadType As Int32 = 32
    Public Const RAS_MaxX25Address As Int32 = 200
    Public Const RAS_MaxFacilities As Int32 = 200
    Public Const RAS_MaxUserData As Int32 = 200
    public const RAS_MaxReplyMessage  As Int32 =   1024
    Public Const RAS_MaxDnsSuffix As Int32 = 256

    Public Structure GUID
        Public Data1 As UInteger
        Public Data2 As UShort
        Public Data3 As UShort
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=8)> Public data4 As String
    End Structure

    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> Public Structure RASDIALPARAMS
        Public Size As Int32
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxEntryName + 1)> Public EntryName As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxPhoneNumber + 1)> Public PhoneNumber As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxCallbackNumber + 1)> Public CallBackNumber As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxUserName + 1)> Public UserName As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxPassword + 1)> Public Password As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxDomain + 1)> Public Domain As String
        Public dwSubEntry As Integer
        Public dwCallbackId As UInt32
    End Structure

    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> Public Structure RASIPADDR
        Public a As Byte
        Public b As Byte
        Public c As Byte
        Public d As Byte
    End Structure

    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> Public Structure RASENTRY
        Public dwSize As Int32
        Public dwfOptions As Int32
        Public dwCountryID As Int32
        Public dwCountryCode As Int32
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxAreaCode + 1)> Public szAreaCode As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxPhoneNumber + 1)> Public szLocalPhoneNumber As String
        Public dwAlternateOffset As Int32
        Public ipaddr As RASIPADDR
        Public ipaddrDns As RASIPADDR
        Public ipaddrDnsAlt As RASIPADDR
        Public ipaddrWins As RASIPADDR
        Public ipaddrWinsAlt As RASIPADDR
        Public dwFrameSize As Int32
        Public dwfNetProtocols As Int32
        Public dwFramingProtocol As Int32
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxPATH)> Public szScript As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxPATH)> Public szAutodialDll As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxPATH)> Public szAutodialFunc As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxDeviceType + 1)> Public szDeviceType As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxDeviceName + 1)> Public szDeviceName As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxX25PadType + 1)> Public szX25PadType As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxX25Address + 1)> Public szX25Address As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxFacilities + 1)> Public szX25Facilities As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxUserData + 1)> Public szX25UserData As String
        Public dwChannels As Int32
        Public dwReserved1 As Int32
        Public dwReserved2 As Int32
        Public dwSubEntries As Int32
        Public dwDialMode As Int32
        Public dwDialExtraPercent As Int32
        Public dwDialExtraSampleSeconds As Int32
        Public dwHangUpExtraPercent As Int32
        Public dwHangUpExtraSampleSeconds As Int32
        Public dwIdleDisconnectSeconds As Int32
        Public dwType As Int32
        Public dwEncryptionType As Int32
        Public dwCustomAuthKey As Int32
        Public guidId As GUID
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH)> Public szCustomDialDll As String
        Public dwVpnStrategy As Int32
        Public dwfOptions2 As Int32
        Public dwfOptions3 As Int32
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxDnsSuffix)> Public szDnsSuffix As String
        Public dwTcpWindowSize As Int32
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH)> Public szPrerequisitePbk As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxEntryName + 1)> Public szPrerequisiteEntry As String
        Public dwRedialCount As Int32
        Public dwRedialPause As Int32
    End Structure


    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> Public Structure RASCREDENTIALS
        Public dwSize As Long
        Public dwMask As Long
        Public szUserName() As Byte
        Public szPassword() As Byte
        Public szDomain() As Byte
    End Structure

    Public Declare Auto Function RasSetEntryDialParams Lib "rasapi32.dll" (ByVal PhoneBook As StringByRef DialParams As RASDIALPARAMS, ByRef Password As Int32) As Int32

    Private Sub FormMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Create_PPPoE_Connection("PPPOE1""test""123456")
    End Sub

    '==================================================================================
    '函数名称   Create_PPPoE_Connection(ByVal sEntryName As String, ByVal sUserName As String, ByVal sPassword As String) As Boolean
    '参    数   sEntryName      连接名称
    '           sUserName       用户名
    '           sPassword       密码
    '描    述   创建PPPOE拨号连接
    '示    例   Create_PPPoE_Connection("宽带连接","user01","123456")
    '==================================================================================

    Private Const ET_None As Long = 0               '   No   encryption
    Private Const ET_Require As Long = 1               '   Require   Encryption
    Private Const ET_RequireMax As Long = 2               '   Require   max   encryption
    Private Const ET_Optional As Long = 3               '   Do   encryption   if   possible.   None   Ok.

    Private Const VS_Default As Long = 0               '   default   (PPTP   for   now)
    Private Const VS_PptpOnly As Long = 1               '   Only   PPTP   is   attempted.
    Private Const VS_PptpFirst As Long = 2               '   PPTP   is   tried   first.
    Private Const VS_L2tpOnly As Long = 3               '   Only   L2TP   is   attempted.
    Private Const VS_L2tpFirst As Long = 4               '   L2TP   is   tried   first.

    Private Const RASET_Phone As Long = 1             '   Phone   lines:   modem,   ISDN,   X.25,   etc
    Private Const RASET_Vpn As Long = 2             '   Virtual   private   network
    Private Const RASET_Direct As Long = 3             '   Direct   connect:   serial,   parallel
    Private Const RASET_Internet As Long = 4               '   BaseCamp   internet
    Private Const RASET_Broadband As Long = 5           '   Broadband

    Private Declare Function RasSetEntryProperties Lib "rasapi32" Alias "RasSetEntryPropertiesA" (ByVal lpszPhonebook As StringByVal lpszEntry As StringByVal lpRasEntry As RASENTRY, ByVal dwEntryInfoSize As LongByVal lpbDeviceInfo As LongByVal dwDeviceInfoSize As LongAs Long
    Private Declare Function RasSetCredentials Lib "rasapi32" Alias "RasSetCredentialsA" (ByVal lpszPhonebook As StringByVal lpszEntry As StringByVal lpCredentials As RASCREDENTIALS, ByVal fClearCredentials As LongAs Long

    Private Function Create_PPPoE_Connection(ByVal sEntryName As StringByVal sUserName As StringByVal sPassword As StringAs Boolean
        Create_PPPoE_Connection = False

        Dim re As New RASENTRY
        Dim sDeviceName As String, sDeviceType As String

        sDeviceName = "WAN 微型端口 (PPTP)"
        sDeviceType = "PPPoE"
        With re
            .dwSize = Marshal.SizeOf(re)
            .dwCountryCode = 86
            .dwCountryID = 86
            .dwDialExtraPercent = 75
            .dwDialExtraSampleSeconds = 120
            .dwDialMode = 1
            .dwEncryptionType = 3
            .dwfNetProtocols = 4
            .dwfOptions = 1024262928
            .dwfOptions2 = 367
            .dwFramingProtocol = 1
            .dwHangUpExtraPercent = 10
            .dwHangUpExtraSampleSeconds = 120
            .dwRedialCount = 3
            .dwRedialPause = 60
            .dwType = RASET_Broadband
            .szDeviceName = sDeviceName
            .szDeviceType = sDeviceType
        End With

        Dim params As New RASDIALPARAMS

        params.Size = Marshal.SizeOf(params)
        params.EntryName = sEntryName
        params.UserName = sUserName
        params.Password = sPassword
        Dim bFlag As Int32 = 0


        RasSetEntryProperties(vbNullString, sEntryName, re, Marshal.SizeOf(re), 00)

    End Function


End Class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值