| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3574 人关注过本帖
标题:创建拨号错误
只看楼主 加入收藏
rogersgb
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2016-2-3
结帖率:47.37%
收藏
已结贴  问题点数:20 回复次数:3 
创建拨号错误
图片附件: 游客没有浏览图片的权限,请 登录注册

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 Integer
        Public dwMask As Integer
        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 Integer = 0               '   No   encryption
    Private Const ET_Require As Integer = 1               '   Require   Encryption
    Private Const ET_RequireMax As Integer = 2               '   Require   max   encryption
    Private Const ET_Optional As Integer = 3               '   Do   encryption   if   possible.   None   Ok.

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

    Private Const RASET_Phone As Integer = 1             '   Phone   lines:   modem,   ISDN,   X.25,   etc
    Private Const RASET_Vpn As Integer = 2             '   Virtual   private   network
    Private Const RASET_Direct As Integer = 3             '   Direct   connect:   serial,   parallel
    Private Const RASET_Internet As Integer = 4               '   BaseCamp   internet
    Private Const RASET_Broadband As Integer = 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 Integer, ByVal lpbDeviceInfo As Integer, ByVal dwDeviceInfoSize As Integer) As Integer
    Private Declare Function RasSetCredentials Lib "rasapi32" Alias "RasSetCredentialsA" (ByVal lpszPhonebook As String, ByVal lpszEntry As String, ByVal lpCredentials As RASCREDENTIALS, ByVal fClearCredentials As Integer) As Integer

    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
2016-05-20 14:17
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
收藏
得分:14 
尝试把声明RasSetEntryDialParams 后的 As Int32 改成  As Long 试试。
现在没时间也没环境测试。

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2016-05-20 15:29
rogersgb
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2016-2-3
收藏
得分:0 
回复 2楼 不说也罢
Public Class VPN
    Private Const RASET_Vpn As Int32 = 2   ' Virtual private network
    Private Const VS_Default As Int32 = 0    ' default (PPTP for now)
    Private Const ET_Optional As Int32 = 3    ' Do encryption if possible. None Ok.
    Private Const RASET_Broadband As Long = 5  ' Broadband
    Public Structure GUID
        Public Data1 As Int32
        Public Data2 As Int32
        Public Data3 As Int32
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> _
        Public Data4() As Byte
    End Structure

    Public Structure RASENTRY
        Public dwSize As Int32
        Public dwfOptions As Int32
        Public dwCountryID As Int32
        Public dwCountryCode As Int32
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=11)> _
        Public szAreaCode() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=129)> _
        Public szLocalPhoneNumber() As Byte
        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.ByValArray, SizeConst:=260)> _
        Public szScript() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=260)> _
        Public szAutodialDll() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=260)> _
        Public szAutodialFunc() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=17)> _
        Public szDeviceType() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=129)> _
        Public szDeviceName() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=33)> _
        Public szX25PadType() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=201)> _
        Public szX25Address() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=201)> _
        Public szX25Facilities() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=201)> _
        Public szX25UserData() As Byte
        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.ByValArray, SizeConst:=260)> _
        Public szCustomDialDll() As Byte
        Public dwVpnStrategy As Int32
        Public dwfOptions2 As Int32
        Public dwfOptions3 As Int32
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
        Public szDnsSuffix() As Byte
        Public dwTcpWindowSize As Int32
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=260)> _
        Public szPrerequisitePbk() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> _
        Public szPrerequisiteEntry() As Byte
        Public dwRedialCount As Int32
        Public dwRedialPause As Int32
    End Structure   
    Public Structure RASCREDENTIALS
        Public dwSize As Int32
        Public dwMask As Int32
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=257)> _
        Public szUserName() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=257)> _
        Public szPassword() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> _
        Public szDomain() As Byte
    End Structure


    Public Structure RASIPADDR
        Public a As Byte
        Public b As Byte
        Public c As Byte
        Public d As Byte
    End Structure


    <DllImport("rasapi32.dll", EntryPoint:="RasSetEntryPropertiesA", _
           SetLastError:=True, _
           ExactSpelling:=True, _
           CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function RasSetEntryProperties(ByVal lpszPhonebook _
                                                 As String, ByVal lpszEntry As String, _
                                                 ByRef lpRasEntry As RASENTRY, _
                                                 ByVal dwEntryInfoSize As Int32, ByVal lpbDeviceInfo _
                                                 As Int32, ByVal dwDeviceInfoSize As Int32) As Int32
    End Function
    <DllImport("rasapi32.dll", EntryPoint:="RasSetCredentialsA", _
             SetLastError:=True, _
             ExactSpelling:=True, _
             CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function RasSetCredentials(ByVal lpszPhonebook As String, _
                                                  ByVal lpszEntry As String, _
                                                  ByRef lpCredentials As RASCREDENTIALS, _
                                                  ByVal fClearCredentials As Int32) As Int32
    End Function

    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal lpvDest() As Byte, ByVal lpvSource() As Byte, ByVal cbCopy As Integer)

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim sServer As String
        sServer = "uk.
        sEntryName = "VPN连接"
        sUsername = "ukusvpn"
        sPassword = "1900"
        If Create_VPN_Connection(sEntryName, sServer, sUsername, sPassword) = True Then
            MsgBox("连接建立成功!")
        Else
            MsgBox("连接建立失败!")
        End If
    End Sub
Function Create_VPN_Connection(ByVal sEntryName As String, ByVal sServer As String, ByVal sUsername As String, ByVal sPassword As String) As Boolean
        Create_VPN_Connection = False
        sServer = "uk. '或者用域名 sServer = "www.
        sEntryName = "VPN连接"
        sUsername = "ukusvpn"
        sPassword = "1900"
        Dim re As New RASENTRY
        Dim sDeviceName As String, sDeviceType As String
        sDeviceName = "WAN 微型端口 (L2TP)"
        sDeviceType = "vpn"
        With re
            ReDim .szAreaCode(10)
            ReDim .szLocalPhoneNumber(128)
            ReDim .szDeviceName(128)
            ReDim .szDeviceType(16)
            ReDim .szScript(259)
            ReDim .szAutodialDll(259)
            ReDim .szAutodialFunc(259)
            ReDim .szX25PadType(32)
            ReDim .szX25Address(200)
            ReDim .szX25Facilities(200)
            ReDim .szX25UserData(200)
            ReDim .szCustomDialDll(259)
            ReDim .szDnsSuffix(255)
            ReDim .szPrerequisitePbk(259)
            ReDim .szPrerequisiteEntry(256)
            .dwCountryCode = 86
            .dwCountryID = 86
            .dwDialExtraPercent = 75
            .dwDialExtraSampleSeconds = 120
            .dwDialMode = 1
            .dwfNetProtocols = 4
            .dwfOptions = 1024262928
            .dwfOptions2 = 367
            .dwFramingProtocol = 1
            .dwHangUpExtraPercent = 10
            .dwHangUpExtraSampleSeconds = 120
            .dwRedialCount = 3
            .dwRedialPause = 60
            .dwType = RASET_Vpn

            Dim bSrc(100) As Byte
            bSrc = System.Text.Encoding.ASCII.GetBytes(sDeviceName)
            Dim cbCopy As Integer = sDeviceName.Length()
            CopyMemory(.szDeviceName, bSrc, cbCopy)


            bSrc = System.Text.Encoding.ASCII.GetBytes(sDeviceType)
            cbCopy = sDeviceType.Length()
            CopyMemory(.szDeviceType, bSrc, cbCopy)


            bSrc = System.Text.Encoding.ASCII.GetBytes(sServer)
            cbCopy = sServer.Length()
            CopyMemory(.szLocalPhoneNumber, bSrc, cbCopy)
            .dwVpnStrategy = VS_Default    'vpn类型
            .dwEncryptionType = ET_Optional '数据加密类型
        End With
        re.dwSize = Marshal.SizeOf(re)
        Dim rc As New RASCREDENTIALS
        With rc
            ReDim .szPassword(256)
            ReDim .szUserName(256)
            ReDim .szDomain(15)
            .dwSize = Marshal.SizeOf(rc)
            .dwMask = 11

            Dim bSrc(100) As Byte
            bSrc = System.Text.Encoding.ASCII.GetBytes(sUsername)
            Dim cbCopy As Integer = sUsername.Length()
            CopyMemory(.szUserName, bSrc, cbCopy)
            bSrc = System.Text.Encoding.ASCII.GetBytes(sPassword)
            cbCopy = sPassword.Length()
            CopyMemory(.szPassword, bSrc, cbCopy)
        End With
        Dim buffinfo(0) As Byte
        Dim rtn As Int32
        if rtn = RasSetEntryProperties(vbNullString, sEntryName, re, Marshal.SizeOf(re), 0, 0)=0 then
            If rtn = RasSetCredentials(vbNullString, sEntryName, rc, 0) = 0 Then
                Create_VPN_Connection = True
            End If
            
        End If
2016-05-21 16:34
rogersgb
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2016-2-3
收藏
得分:0 
回复 2楼 不说也罢
改成这样,老是提示"连接建立失败"
2016-05-21 16:36
快速回复:创建拨号错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020793 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved