PDA

Просмотр полной версии : VPN & Delphi


SiDChik
17.10.2007, 18:38
Нужно написать программку которая бы создавала\удаляла\активиро вала\дизактивировала или использовала VPN соединение в Windows. Когда искал инфу, большенство сайтов ссылалось на RAS с которым особо не смог разобраться, т.к. не было нормальных примеров.
Помимо всего нужно иметь возможность знать трафик текущего соединения. Хелп? ;)

P.S. Среда Delphi 7

Krey
17.10.2007, 18:50
+1
также интересует сабж.

Ni0x
17.10.2007, 19:03
Психически неустойчивым дельфи-программистам не смотреть!
/ASM

.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

GoreMaster
18.10.2007, 18:05
Психически неустойчивым дельфи-программистам не смотреть!
/ASM
никогда не понимал тех,кто такую хренотень пишет на асме...
на СИ не можете что ли структуру заполнить или это вы*бон такой?

slesh
18.10.2007, 23:35
я вообще видел давольно тупой но в тоже время понятный способ коннекта:
юзать консольную виндовую прогу rasdial через winexec или можно через пайпы чтобы вывод виден был.

Но этот способ больше подходит под PHP

Nightmarе
19.10.2007, 05:30
+2 кто поможет по САБЖу, тому 10 в репу!!!!!!!!!!!!!