前段时间帮朋友写一个vpn的客户端, 涉及到了L2TP方式的连接问题。
先看看普通的PPTP连接设置方法:
With re .dwSize = LenB(re) .dwCountryCode = 86 .dwCountryID = 86 .dwDialExtraPercent = 75 .dwDialExtraSampleSeconds = 120 .dwDialMode = 1 .dwfNetProtocols = 4 .dwfOptions = 1024262928 .dwfOptions2 = 367-256 ' PPTP为此值 .dwFramingProtocol = 1 .dwHangUpExtraPercent = 10 .dwHangUpExtraSampleSeconds = 120 .dwRedialCount = 3 .dwRedialPause = 60 .dwType = RASET_Vpn CopyMemory .szDeviceName(0), ByVal sDeviceName, Len(sDeviceName) CopyMemory .szDeviceType(0), ByVal sDeviceType, Len(sDeviceType) CopyMemory .szLocalPhoneNumber(0), ByVal sServer, Len(sServer) '服务器地址 .dwVpnStrategy = 1 'vpn类型 0 默认 1仅pptp 2先pptp 3仅l2tp 4先l2tp .dwEncryptionType = 1 '数据加密类型 如果是pptp方式的话这句可以直接留空 End With Dim rc As RASCREDENTIALS With rc Mid(.szPassword, 1, Len("xxxxxx")) = "xxxxxx" 'xxxxxx为密码 .dwSize = 540 .dwMask = 11 'PPTP此处设置值为11 End With
上面是基本的PPTP连接方式的写法, 因为L2TP模式涉及到密钥方面, 所以一直很困惑
主要是在想RAS里面是否有一个特定的变量来存放密钥, 然后搜遍了谷歌百度CSDN, 始终不得其果
似乎没有人公开过L2TP的写法
最终看到某篇文章后顿时醒悟, 原来这个密钥并不是存放在一个单独的"变量"里!
其实写法很简单 下面贴出L2TP的写法核心代码:
With re .dwSize = LenB(re) .dwCountryCode = 86 .dwCountryID = 86 .dwDialExtraPercent = 75 .dwDialExtraSampleSeconds = 120 .dwDialMode = 1 .dwfNetProtocols = 4 .dwfOptions = 1024262928 .dwfOptions2 = 16 ' 查阅资料得出L2TP这里应该设置为16 具体原理不得而知 .dwFramingProtocol = 1 .dwHangUpExtraPercent = 10 .dwHangUpExtraSampleSeconds = 120 .dwRedialCount = 3 .dwRedialPause = 60 .dwType = RASET_Vpn CopyMemory .szDeviceName(0), ByVal sDeviceName, Len(sDeviceName) CopyMemory .szDeviceType(0), ByVal sDeviceType, Len(sDeviceType) CopyMemory .szLocalPhoneNumber(0), ByVal sServer, Len(sServer) '服务器地址 .dwVpnStrategy = 3 'vpn类型 首先这里设置为3 也就是默认L2TP方式连接 .dwEncryptionType = 3 '数据加密类型 设置为3 也就是密钥加密 End With Dim rc As RASCREDENTIALS With rc Mid(.szPassword, 1, Len("xxxxxx")) = "xxxxxx" 'xxxxxx为预共享密钥, 而在PPTP方式里本应设置密码处直接设置成L2TP的密钥 .dwSize = 540 .dwMask = 16 'L2TP此处设置值为16 End With
以上写法创建出的L2TP方式的VPN可以完美连接, 注意在连接的时候用户密码就直接是密码了 而不是密钥了!!!
最后说一下怎么在win7中隐藏VPN链接, 其实只需要为VPN指定一个电话薄位置就行了~
RasDial函数第二个参数lpszPhonebook的值直接指定成电话薄的位置即可~ 如:"c:\1.xxx"
以上方法研究了很久, 网上关于RAS相关的信息也很少, MSDN介绍的也比较简单, 所以查询起来很模糊~ 此文就当是为准备写相关程序的黑客们提供一个方便拉 o(∩_∩)o ~
其他代码部分L2TP和PPTP写法都是一样的 网上都有源码 我只贴最核心的代码 完整代码可以参考下这个:
http://www.cnblogs.com/JackSun/archive/2011/04/01/2002167.html
摘自:https://www.t00ls.net/thread-21252-1-1.html
留言评论(旧系统):