Perbedaan yang sangat jelas mungkin pada funcion nya atau penerapan nya, untuk fungsinya sih sama :D.
Sebelumnya download & install dulu Delphi XE saya rekomendasikan versi 5 atau 6 (buat pemula) atau kalau mau yang baru Delphi XE / Embarcadero Delphi XE sudah sampai versi yang ke 10.
Cara menerapkan TCP Payload Indy10 di Delphi XE
Buka Delphi XE kemudian buat form/tampilan yang sederhana, tambahkan 1 button 1 Edit 1 Label & 1 TCPMappedPort, kemudian atur posisi nya sesuai selera.
Captions button = 'Start'
Text di Edit = '2016'
Captions Label = 'Listen Port'
kemudian masukkan cooding ini di button.
if Button1.Caption = 'Start' then begin
IdMappedPortTCP1.Bindings.Add.IP := '127.0.0.1';
IdMappedPortTCP1.Bindings.Add.Port := StrToInt(Edit1.Text);
IdMappedPortTCP1.MappedHost := 'Proxy ISP';
IdMappedPortTCP1.MappedPort := 8080;
Button1.Caption := 'Stop';
end else begin
IdMappedPortTCP1.Active := False;
IdMappedPortTCP1.Bindings.Clear;
Button1.Caption := 'Start';
end;
kemudian kamu tambahkan uses ini, biar sedikit rapi letakkan tepat di bawah implementation uses IdCoder, IdCoder3to4, IdCoderMIME, IdGlobal;
setelah itu tambahkan 2 funcion ini tepat di bawah {$R *.dfm}
function netstring(B: TIdContext): string;
var S: String;
begin
S := TIdEncoderMIME.EncodeBytes(TIdMappedPortContext(B).NetData); // Base64
S := TIdDecoderMIME.DecodeString(S); // String
Result := S;
end;
function netbyte(S: string): TIdBytes;
var B: TIdBytes;
begin
S := TIdEncoderMIME.EncodeString(S); // Base64
B := TIdDecoderMIME.DecodeBytes(S); // TIdBytes
Result := B;
end;
NOTE: Sampai sini coba RUN Project kamu tekan F9 di Delphi. Jika tidak ada error lanjut ke tahap di bawah ini, jika masih error perhatikan lebih teliti lagi.
Cara Menjalankan TCP Payload Indy10
masuk ke OnExecute di events TCPMappedPort. kemudian buat String Payload, dan masukkan payload nya, sebagai contoh seperti ini
if (pos('CONNECT',netstring(AContext))<>0) or (pos('HTTP',netstring(AContext))<>0) then
begin
payload := 'HEAD http://Bug.com/ HTTP/1.1'#13#10+
'Host: Bug.com'#13#10+
'Connection: Keep-Alive'+#13#10#13#10;
TIdMappedPortContext(AContext).NetData := netbyte(netstring(AContext) + payload);
end;
Kemudian untuk onOutbondData seperti ini:
TIdMappedPortContext(AContext).NetData := netbyte(StringReplace(NetString(AContext),'502 Bad Gateway','200 OK',[rfReplaceAll]));
TIdMappedPortContext(AContext).NetData := netbyte(StringReplace(NetString(AContext),'408 Request Time-out','200 OK',[rfReplaceAll]));
TIdMappedPortContext(AContext).NetData := netbyte(StringReplace(NetString(AContext),'404 Not Found','200 OK',[rfReplaceAll]));
TIdMappedPortContext(AContext).NetData := netbyte(StringReplace(NetString(AContext),'403 Forbidden','200 OK',[rfReplaceAll]));
TIdMappedPortContext(AContext).NetData := netbyte(StringReplace(NetString(AContext),'400 Bad Request','200 OK',[rfReplaceAll]));
TIdMappedPortContext(AContext).NetData := netbyte(StringReplace(NetString(AContext),'408 Request Time-out','200 OK',[rfReplaceAll]));
TIdMappedPortContext(AContext).NetData := netbyte(StringReplace(NetString(AContext),'307 Temporary Redirect','200 OK',[rfReplaceAll]));
TIdMappedPortContext(AContext).NetData := netbyte(StringReplace(NetString(AContext),'302 Found','200 OK',[rfReplaceAll]));
TIdMappedPortContext(AContext).NetData := netbyte(StringReplace(NetString(AContext),'302 Moved Temporarily','200 OK',[rfReplaceAll]));
TIdMappedPortContext(AContext).NetData := netbyte(StringReplace(NetString(AContext),'301 Moved Permanently','200 OK',[rfReplaceAll]));
Untuk kamu yang mau simple simple aja bisa pakai tool SPG. karna tool SPG sudah mendukung kasil Generate TCP Payload Indy9 dan Indy10 :)
Source code jadinya juga sudah saya siapkan, Silahkan di comot.