Нужно написать программку которая бы создавала\удаляла\активировала\дизактивировала или использовала VPN соединение в Windows. Когда искал инфу, большенство сайтов ссылалось на RAS с которым особо не смог разобраться, т.к. не было нормальных примеров. Помимо всего нужно иметь возможность знать трафик текущего соединения. Хелп? P.S. Среда Delphi 7
Психически неустойчивым дельфи-программистам не смотреть! /ASM Code: .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\user32.inc includelib \masm32\lib\user32.lib include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\macros\strings.mac include \masm32\include\masm32.inc includelib \masm32\lib\masm32.lib include \masm32\include\rasapi32.inc includelib \masm32\lib\rasapi32.lib include \masm32\include\msvcrt.inc includelib \masm32\lib\msvcrt.lib _RASENTRYA STRUCT dwSize DWORD ? dwfOptions DWORD ? dwCountryID DWORD ? dwCountryCode DWORD ? szAreaCode db RAS_MaxAreaCode + 1 dup(?) szLocalPhoneNumber db RAS_MaxPhoneNumber + 1 dup(?) dwAlternateOffset DWORD ? ipaddr RASIPADDR <> ipaddrDns RASIPADDR <> ipaddrDnsAlt RASIPADDR <> ipaddrWins RASIPADDR <> ipaddrWinsAlt RASIPADDR <> dwFrameSize DWORD ? dwfNetProtocols DWORD ? dwFramingProtocol DWORD ? szScript db MAX_PATH dup(?) szAutodialDll db MAX_PATH dup(?) szAutodialFunc db MAX_PATH dup(?) szDeviceType db RAS_MaxDeviceType + 1 dup(?) szDeviceName db RAS_MaxDeviceName + 1 dup(?) szX25PadType db RAS_MaxPadType + 1 dup(?) szX25Address db RAS_MaxX25Address + 1 dup(?) szX25Facilities db RAS_MaxFacilities + 1 dup(?) szX25UserData db RAS_MaxUserData + 1 dup(?) dwChannels DWORD ? dwReserved1 DWORD ? dwReserved2 DWORD ? dwSubEntries DWORD ? dwDialMode DWORD ? dwDialExtraPercent DWORD ? dwDialExtraSampleSeconds DWORD ? dwHangUpExtraPercent DWORD ? dwHangUpExtraSampleSeconds DWORD ? dwIdleDisconnectSeconds DWORD ? dwType DWORD ? dwEncryptionType DWORD ? dwCustomAuthKey DWORD ? guidId GUID <> szCustomDialDll db MAX_PATH dup(?) dwVpnStrategy DWORD ? dwfOptions2 DWORD ? dwfOptions3 DWORD ? szDnsSuffix db 256 dup(?) dwTcpWindowSize DWORD ? szPrerequisitePbk db MAX_PATH dup(?) szPrerequisiteEntry db RAS_MaxEntryName + 1 dup(?) dwRedialCount DWORD ? dwRedialPause DWORD ? _RASENTRYA ENDS RASCREDENTIALS STRUCT dwSize DWORD ? dwMask DWORD ? szUserName db UNLEN + 1 dup(?) szPassword db PWLEN + 1 dup(?) szDomain db DNLEN + 1 dup(?) RASCREDENTIALS ENDS .code CreatVPN proc User:dword,Pass:dword local re:_RASENTRYA local crd:RASCREDENTIALS invoke memset,addr re,0,00000B44h mov re.dwSize,00000B44h mov re.dwfOptions,3c000710h mov re.dwCountryID,0 mov re.dwCountryCode,0 invoke lstrcpy,addr re.szLocalPhoneNumber,$CTA0("127.0.0.1") mov re.dwAlternateOffset,0 mov re.dwFrameSize,0 mov re.dwfNetProtocols,4 mov re.dwFramingProtocol,1 invoke lstrcpy,addr re.szDeviceType,$CTA0("vpn") invoke lstrcpy,addr re.szDeviceName,$CTA0("WAN Miniport (L2TP)") mov re.dwIdleDisconnectSeconds,00000000h mov re.dwType,00020000h mov re.dwEncryptionType,00030000h mov re.dwfOptions2,01040000h mov re.dwRedialPause,00000300h mov re.dwVpnStrategy,00020000h invoke RasSetEntryProperties,0,$CTA0("internet"),addr re,00000B44h,0,0 .if eax == 0 invoke lstrcpy,addr crd.szUserName,User invoke lstrcpy,addr crd.szPassword,Pass mov crd.dwMask,3 mov crd.dwSize,sizeof RASCREDENTIALS + 2 invoke RasSetCredentials,0,$CTA0("internet"),addr crd,0 .if eax == 0 .endif .endif ret CreatVPN endp start: invoke CreatVPN,$CTA0("username"),$CTA0("password") invoke ExitProcess,0 end start
никогда не понимал тех,кто такую хренотень пишет на асме... на СИ не можете что ли структуру заполнить или это вы*бон такой?
я вообще видел давольно тупой но в тоже время понятный способ коннекта: юзать консольную виндовую прогу rasdial через winexec или можно через пайпы чтобы вывод виден был. Но этот способ больше подходит под PHP