Italian community of Lazarus and Free Pascal

Programmazione => Componenti Aggiuntivi => Topic aperto da: xinyiman - Dicembre 11, 2021, 01:36:53 pm

Titolo: Indy e TIdMappedPortTCP
Inserito da: xinyiman - Dicembre 11, 2021, 01:36:53 pm
Ciao a tutti, volevo manipolare i dati in transito su una connessione basata su TIdMappedPortTCP.

Client <-> TIdMappedPortTCP <--> TIdMappedPortTCP <-> server

Alla fine lo scopo č cifrare la connessione tra i due componenti TIdMappedPortTCP.

Non voglio usare OpenSSL, voglio usare i componenti crittografici dell'utente Xor-El, in modo da non dipendere da dll esterne.

Qualcuno mi spiega come posso manipolare i dati di passaggio tra i due componenti?

Ho provato nell'evento IdMappedPortTCP1Execute

a leggere i dati con

msg := BytesToString(TIdMappedPortContext(AContext).NetData);

a manipolarli e a ritrasmetterli con

                msg := ReverseString(msg);
                TIdMappedPortContext(AContext).NetData := ToBytes(msg);

Ma non funzionano, i messaggi vengono ritardati di un'invio. Qualcuno mi sa aiutare?
Titolo: Re:Indy e TIdMappedPortTCP
Inserito da: DragoRosso - Dicembre 11, 2021, 02:07:56 pm
Ciao, non conosco il componente TIdMappedPortTCP, ma da quello che dici dovrebbe essere solo un layer di intercettazione dei dati.

Quindi tecnicamente un componente (lato client ad esempio) dovrebbe avere genericamente due "ingressi" (porta TCP Server -> Client e porta TCP Client -> Server). Devo capire a livello di catena come funziona. E' probabile che il ritardo si legato alla gestione del dato, ossia tu catturi il "pacchetto" ma la "rimessa" nella catena di elaborazione avviene in ritardo, come se il componente fosse "passante" e non bloccante (ritornando a piombo con un topic precedente).....

Faccio una prova veloce e ti riporto la mia esperienza (sperando di replicare il problema e di risolverlo).

Ciao :)
Titolo: Re:Indy e TIdMappedPortTCP
Inserito da: DragoRosso - Dicembre 12, 2021, 12:20:46 pm
In allegato due semplici progetti con Client / Server e MappedPort.

Aprite il Project6.LPI e "costruitelo", ossia fatte il build.

Aprite il Project5.LPI e idem come sopra.

Lanciate prima il Project6.exe e poi il Project5.exe.

Inserite qualcosa nelle edit box e premete send, vedrete che il messaggio arriva con la prima lettera cambiata sia dal Client al Server che all'opposto.

Questa tecnica puņ essere usata per costruire dei semplici proxy, come ad esempio vuole fare @xinyiman, per criptare / decriptare le comunicazioni.

I due programmi sono abbastanza semplici, sono derivati da progetti in Delphi (non fate caso alle estensioni non classiche Lazarus delle unit ....  ;D ). I due sorgenti sono un "scheletro" da cui eventualmente partire.

Ciao

PS: necessita del pacchetto indylaz installabile dal repository online.