网上找的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   String ByRef  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   String ByVal  lpszEntry  As   String ByVal  lpRasEntry  As  RASENTRY,  ByVal  dwEntryInfoSize  As   Long ByVal  lpbDeviceInfo  As   Long ByVal  dwDeviceInfoSize  As   Long As   Long
     Private   Declare   Function  RasSetCredentials  Lib   " rasapi32 "   Alias   " RasSetCredentialsA "  ( ByVal  lpszPhonebook  As   String ByVal  lpszEntry  As   String ByVal  lpCredentials  As  RASCREDENTIALS,  ByVal  fClearCredentials  As   Long As   Long

     Private   Function  Create_PPPoE_Connection( ByVal  sEntryName  As   String ByVal  sUserName  As   String ByVal  sPassword  As   String As   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),  0 0 )

     End Function


End Class
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值