VPN & Delphi

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by SiDChik, 17 Oct 2007.

  1. SiDChik

    SiDChik New Member

    Joined:
    14 Oct 2007
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Нужно написать программку которая бы создавала\удаляла\активировала\дизактивировала или использовала VPN соединение в Windows. Когда искал инфу, большенство сайтов ссылалось на RAS с которым особо не смог разобраться, т.к. не было нормальных примеров.
    Помимо всего нужно иметь возможность знать трафик текущего соединения. Хелп? ;)

    P.S. Среда Delphi 7
     
  2. Krey

    Krey Member

    Joined:
    8 Sep 2007
    Messages:
    0
    Likes Received:
    16
    Reputations:
    -20
    +1
    также интересует сабж.
     
    2 people like this.
  3. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Психически неустойчивым дельфи-программистам не смотреть!
    /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
    
     
    4 people like this.
  4. GoreMaster

    GoreMaster Elder - Старейшина

    Joined:
    28 May 2007
    Messages:
    119
    Likes Received:
    32
    Reputations:
    4
    никогда не понимал тех,кто такую хренотень пишет на асме...
    на СИ не можете что ли структуру заполнить или это вы*бон такой?
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    я вообще видел давольно тупой но в тоже время понятный способ коннекта:
    юзать консольную виндовую прогу rasdial через winexec или можно через пайпы чтобы вывод виден был.

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