Tutorial Membuat Tunnel / Aplikasi Openvpn Menggunakan Delphi 7
[Kincaimedia.net]
Step by step tutorialnya agar tidak ada error di dalam kode yang Anda terapkan, silahkan perhatikan tutorial dengan teliti. Sebelum melakukan penerapan kode ini Anda harus terlebih dahulu menginstal beberapa komponen yang di butuhkan, antara lain Doscommand, komponen BSF, kenapa perlu BSF ?
Karena nantinya kita akan membutuhkan sebuah open dialog yang di miliki oleh komponen BSF ini, karena jika menggunakan open dialog biasa yaitu di palet standar, listning kodenya tidak bisa di baca, bisa juga di bilang khusus untuk komponen BSF ini.
Tutorial Membuat Tunnel Openvpn Menggunakan Delphi 7
Langkah 1 :
Buat project baru dengan memasukkan beberapa toolbox / komponen dibawah ini
4 komponen Editberi nama : 1.EdtVpnUser, 2.EdtVpnPass, 3.EdtVpnProxy, 4.EdtVpnPort
4 komponen buttonberi caption : 1.Load, 2.Start, 3.Stop, 4.Edit
1 komponen memoberi nama : Mvpn
3 komponen checkboxberi nama : 1.noproji, 2.useproji, 3.useproji2
1 buah label :beri nama : cfgovpn
2 buah label :beri caption : username & password
1 komponen open dialog
1 komponen Timer
Berikut tampilan standart nya, Bisa Anda buat lagi menjadi lebih menarik 🙂
Langkah 2 :
Jika sudah memasukan komponen-komponen yang terdapat di langkh 1, lanjut ke lintinya yaitu memasukan kodingnya.
INIFiles,TlHelp32,ShellApi
procedure Simpanconfig(config: string);
procedure Loadconfig(config: string);
procedure am;
function KillTask(ExeFileName: string): Integer;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(
OpenProcess(PROCESS_TERMINATE,
BOOL(0),
FProcessEntry32.th32ProcessID),
0));
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
procedure TForm1.Simpanconfig(config: string);
var
f: textfile;
begin
AssignFile(f, config);
Rewrite(f);
Writeln(f, cfgovpn.Caption);
CloseFile(f);
end;//load config
procedure TForm1.Loadconfig(config: string);
var
f: textfile;
txt: string;
begin
if not FileExists(config) then Exit;
AssignFile(f, config);
Reset(f);
while not EOF(f) do begin
Readln(f, txt);
cfgovpn.Caption := txt;
end;
CloseFile(f);
end;
//Edit Config
procedure OpenAsTextFile(const FileName: string);
var
sei: TShellExecuteInfo;
begin
ZeroMemory(@sei, SizeOf(sei));
sei.cbSize := SizeOf(sei);
sei.fMask := SEE_MASK_CLASSNAME;
sei.lpFile := PChar(FileName);
sei.lpClass := ‘.rtf’;
sei.nShow := SW_SHOWNORMAL;
ShellExecuteEx(@sei);
end;procedure Tform1.am;
begin
cfgovpn.Caption:=config;
end;
var
F: TextFile;
S: string;
begin
if FileExists(‘datapass.txt’) then begin
AssignFile(F, ‘datapass.txt’);
Reset(F);
ReadLn(F, S);
EdtVpnUser.Text := S;
ReadLn(F, S);
EdtVpnPass.Text := S;
CloseFile(F);
Loadconfig(ExtractFilePath(Application.ExeName) + ‘dataUser.cfg’);
end;//form1.ClientHeight:=288;
//form1.ClientWidth:=367;
load.Hint:=cfgovpn.Caption;
//Dos Create
ping := TDosCommand.Create(nil);
end;
var
F: TextFile;
doscommand : TDosCommand;
vpnparam : string;
vpndir : string;
beginif useproji.Checked=true then begin
Mvpn.Clear;
doscommand := TDosCommand.Create(nil);
vpndir := ExtractFilePath(ParamStr(0)) + ‘data’;
vpnparam := ‘openvpn –config “‘+cfgovpn.Caption+’” –auth-user-pass pass.txt –http-proxy ‘+EdtVpnProxy.Text+’ ‘+EdtVpnPort.Text+’”‘;
doscommand.CommandLine := ‘cmd /C cd ‘ + vpndir + ‘ & ‘ + vpnparam;
doscommand.OutputLines := Mvpn.Lines;
doscommand.Execute;
end;if useproji2.Checked=true then begin
Mvpn.Clear;
doscommand := TDosCommand.Create(nil);
vpndir := ExtractFilePath(ParamStr(0)) + ‘data’;
vpnparam := ‘openvpn –config “‘+cfgovpn.Caption+’” –auth-user-pass pass.txt –socks-proxy ‘+EdtVpnProxy.Text+’ ‘+EdtVpnPort.Text+’ ‘;
doscommand.CommandLine := ‘cmd /C cd ‘ + vpndir + ‘ & ‘ + vpnparam;
doscommand.OutputLines := Mvpn.Lines;
doscommand.Execute;
end;if noproji.Checked=true then begin
Mvpn.Clear;
doscommand := TDosCommand.Create(nil);
vpndir := ExtractFilePath(ParamStr(0)) + ‘data’;
vpnparam := ‘openvpn –config “‘+cfgovpn.Caption+’” –auth-user-pass pass.txt ‘;
doscommand.CommandLine := ‘cmd /C cd ‘ + vpndir + ‘ & ‘ + vpnparam;
doscommand.OutputLines := Mvpn.Lines;
doscommand.Execute;
end;
Simpanconfig( ExtractFilePath(Application.ExeName) + ‘dataUser.cfg’ );
//KillTask(‘openvpn.exe’);
AssignFile(F, ‘datapass.txt’);
Rewrite(F);
WriteLn(F, EdtVpnUser.Text);
WriteLn(F, EdtVpnPass.Text);
CloseFile(F);
Load.Enabled:=false;
EdtVpnUser.Enabled:=false;
EdtVpnPass.Enabled:=false;
stopvpn.Visible:=true;
startvpn.Visible:=false;
end;
if openCfgDlg.Execute then
begin
config:=openCfgDlg.FileName;
cfgovpn.Caption:=config;
am;
end;
KillTask(‘openvpn.exe’);
stopvpn.Visible:=false;
startvpn.Visible:=true;
Load.Enabled:=true;
EdtVpnUser.Enabled:=true;
EdtVpnPass.Enabled:=true;
Mvpn.Clear;
SendMessage(Mvpn.Handle, EM_LINESCROLL, 0,Mvpn.Lines.Count);
SendMessage(Mvpn.Handle, EM_LINESCROLL, 0,Mvpn.Lines.Count);if pos(‘TCP/UDP: Closing socket’,Mvpn.Text) >0 then begin
Mvpn.clear;
end; //if pos(‘Enter Auth Username:’,Mvpn.Text) >0 then begin
startvpn.Caption:=’Start’;
load.Enabled:= True;
bsSkinMessage1.MessageDlg(‘config Ovpn meminta Anda untuk mengisi Username dan password..!’,mtInformation,[mbok],0);
end;if pos(‘process exiting’,Mvpn.Text) >0 then begin
startvpn.Caption:=’Start’;
load.Enabled:= True;
end;if pos(‘process exiting’,Mvpn.Text) >0 then beginstartvpn.ButtonClick;
startvpn.Caption:=’Stop’;
load.Enabled:= False;
end;// if pos(‘Initialization Sequence Completed’,Mvpn.Text) >0 then begin
// AddSysTrayIcon;
// ShowBalloonTips;
// end;
end;
if useproji.Checked = true then begin
EdtVpnProxy.Enabled:=True;
EdtVpnPort.Enabled:=true;
useproji2.Checked:=false;
noproji.Checked:=false;
end;
if useproji.Checked = False then begin
end;
if useproji2.Checked = true then begin
useproji.Checked:=false;
noproji.Checked:=false;
EdtVpnProxy.Enabled:=true;
EdtVpnPort.Enabled:=true;
end;
if useproji2.Checked = False then beginend;
if noproji.Checked = true then begin
useproji.Checked:=false;
useproji2.Checked:=false;
EdtVpnProxy.Enabled:=false;
EdtVpnPort.Enabled:=false;
end;
var
F: TextFile;
begin
Simpanconfig( ExtractFilePath(Application.ExeName) + ‘dataUser.cfg’ );
//KillTask(‘openvpn.exe’);
AssignFile(F, ‘datapass.txt’);
Rewrite(F);
WriteLn(F, EdtVpnUser.Text);
WriteLn(F, EdtVpnPass.Text);
CloseFile(F);
Simpanconfig( ExtractFilePath(Application.ExeName) + ‘dataUser.cfg’ );
KillTask(‘openvpn.exe’);
OpenAsTextFile(load.Hint);
Tag : Source Code Tunnel Openvpn di Delphi 7, download Code Program Openvpn delphi.


