Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: xinyiman - Febbraio 19, 2019, 10:59:09 am

Titolo: Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 19, 2019, 10:59:09 am
Ciao ragazzi, è già qualche anno che ho per la testa di organizzare qualcosa di simile a teamviewer con lazarus. In teoria ho già stabilito il modo di trasferire le immagini del desktop al client remoto il tutto tramite pacchetti UDP (con certificazione di ricezione). La scelta dell'udp è dovuta al fatto che è più facile che non venga bloccato dai firewall. Avevo anche mezzo studiato il modo di comandare mouse e tastiera a distanza, ma non funziona bene sotto mac. Ora per mancanza di tempo devo fermarmi. Qualcuno vuole dare un occhiata al codice e portarlo avanti? Non fatevi illusioni, c'è del lavoro ma è ancora parecchio immaturo. Volontari?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: guest1752 - Febbraio 19, 2019, 12:38:34 pm
Progetto interessante direi.... Sarei curioso di vedere il meccanismo che hai usato per trasferire le immagini
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 19, 2019, 01:43:33 pm
Questa sera se riesco posto qui il codice.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Febbraio 19, 2019, 03:21:37 pm
pare interessante, posta pure  :P
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 19, 2019, 04:30:52 pm
pare interessante, posta pure  :P

Non aspettarti nessuna meraviglia. E' relativamente semplice ed embrionale
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 19, 2019, 11:44:54 pm
Ecco qui il sorgente. Compilate e poi lanciate due isanzte sullo stesso computer su uno premete in successione i pulsanti "Popola dati server locale" e poi "start server". Sull'altro "popola dati client locale" e "start client"
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 19, 2019, 11:45:50 pm
Quando avete dato un occhiata se qualcuno vuole aiutare con il progetto me lo dica che spiego come portare avanti la cosa.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Febbraio 20, 2019, 03:13:06 pm
gli sto dando un'occhiata, come dici tu è embrionale, ma ci sono diverse cosette interessanti
sbaglio o l'invio delle immagini con solo per differenza non è ancora a posto?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 20, 2019, 03:32:31 pm
gli sto dando un'occhiata, come dici tu è embrionale, ma ci sono diverse cosette interessanti
sbaglio o l'invio delle immagini con solo per differenza non è ancora a posto?
In realtà il calcolo della differenza funziona, però mi rimaneva un problema di trasmissione nel momento in cui qualcosa si disallineava. Vado a spiegarmi.

Invio l'immagine intera.
Invio la modifica e la applico (l'immagine risulta formalmente corretta)
Invio la modifica e la applico (l'immagine risulta formalmente corretta)
Invio la modifica e non la applico (a volte capitava e non ho capito perchè)
Invio la modifica e la applico (l'immagine risulta corrotta)

Inoltre se nonn ricordo male, la trasmissione viene cifrata con AES a 256 bit. Ho scritto quel programmino qualche settimana fa e non ricordo a memoria dove sono arrivato.

PS: Fa piacere aver stuzzicato la curiosità di uno sviluppatore diversamente giovane quale sei tu e con il relativo carico di esperienza.  ;D ;D
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Febbraio 20, 2019, 03:36:40 pm
quindi se server e client non hanno la stessa versione dell'ultima immagine, alla scrittura successiva si disallinea il tutto
ci si può lavorare

per tastiera e mouse come sei messo?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 20, 2019, 03:41:08 pm
Pensavo di usare il package http://wiki.freepascal.org/MouseAndKeyInput

In modo che se faccio un keydown sull'immagine del desktop remoto o un mouse click lo invia al server attraverso un thread dedicato (basta duplicare e modificare uno di quelli che uso per l'invio delle immagini) e il server remoto lo esegue attraverso il pacchetto MouseAndKeyInput (che sembra non funzionare su cocoa allo stato attuale).

Solo che non ricordo se lo avevo già iniziato. Basta dare un occhiata al server.
Fatto questo poi c'è da scrivere il server per l'interscambio delle informazioni tra il pc che invia le immagini e quello che le riceve. Un po come fa team viewer. Di fatto non è di difficile implementazione, ma da solo non riesco a finirlo per mancanza di tempo.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Febbraio 20, 2019, 03:43:16 pm
Pensavo di usare il package http://wiki.freepascal.org/MouseAndKeyInput
...
(che sembra non funzionare su cocoa allo stato attuale)

questo può essere un problema, tu puoi controllare se funziona o no?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 20, 2019, 03:44:54 pm
Pensavo di usare il package http://wiki.freepascal.org/MouseAndKeyInput
...
(che sembra non funzionare su cocoa allo stato attuale)

questo può essere un problema, tu puoi controllare se funziona o no?
Sono io che ho verificato la cosa. Appena possibile scriverò sul forum principale e chiederò lumi. Però al momento si può pensare di portarlo avanti per windows e linux (che comunque non fa schifo). Al massimo su mac si usa parallel per far funzionare la versione windows del programma.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Febbraio 20, 2019, 03:48:03 pm
un'ultima cosa il server spedisce con2 thread: (1) TSendPingThread e (2) TSendDesktopThread

a che serve il TSendPingThread?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 20, 2019, 03:49:06 pm
Quando si dedice di fare il server per l'interscambio delle informazioni di connessione bisognerà usare una connessione cifrata aes 256 con scambio di chiavi dovuto ad una cifratura asimmetrica. Per fare ciò basta guardare l'esempio a questo url nel primo messaggio:

http://www.lazaruspascal.it/index.php?topic=2099.0
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Febbraio 20, 2019, 04:27:31 pm
quindi per ora il TSendPingThread non servirebbe ma è in previsione di "sentire" se c'è il server per l'interscambio delle informazioni di connessione?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 20, 2019, 10:20:48 pm
No il TSendPingThread  serve per creare l'UDP hole punching ovvero il modo con cui non farsi fermare dal firewall.

Inoltre è quello che serve al client per capire se la connessione è attualmente su oppure no.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 26, 2019, 08:38:47 am
Allora qualcuno ha avuto modo di pensare alla mia proposta di portare avanti tale progetto?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: guest1752 - Febbraio 26, 2019, 09:54:55 am
ciao, a me piace molto l'idea, ma ho poco poco tempo questo periodo e ho visionato il codice molto velocemente.
Lo scambio di immagini potrebbe essere una parte interessante per me:
stavo ragionando ieri su un progetto di tanti anni fa in delphi dove in pratica giocavo con le GDI+ e il device context di windows ecc... ec.. .comunque alla fine l'idea che ho è che per minimizzare lo scambio dei dati si potrebbe dividere lo schermo in n quadrati e far passare solo le zone dello schermo diverse, come dicevi te. Interesssante pero.....
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Febbraio 26, 2019, 02:49:41 pm
il progetto è interessante
si potrebbe dare una mano ma non posso fare di sicuro il manutentore del progetto :)
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 26, 2019, 02:56:19 pm
Si accettano anche aiuti, posso anche mantenerlo io ma avere una mano da voi. Ovviamente non in questo momento, ma quando saremo tutti un po meno pressati dal lavoro.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Febbraio 26, 2019, 03:09:48 pm
si, direi che aspettare tempi meno pressanti è un bene per tutti :)
intanto potresti provare a dividerlo in sottoprogetti
esempio:
- struttura principale (es: gestione thread per video, chat, scambio file, ...)
- gestione hole punching
- gestione astratta invio/ricezione dati come stringa
- gestione invio/ricezione video
- gestione invio/ricezione chat
- gestione invio/ricezione file

in questo modo sarà più facile dare una mano per chi potrà
:)
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: guest1752 - Febbraio 26, 2019, 04:08:56 pm
si, direi che aspettare tempi meno pressanti è un bene per tutti :)
intanto potresti provare a dividerlo in sottoprogetti
esempio:
- struttura principale (es: gestione thread per video, chat, scambio file, ...)
- gestione hole punching
- gestione astratta invio/ricezione dati come stringa
- gestione invio/ricezione video
- gestione invio/ricezione chat
- gestione invio/ricezione file

in questo modo sarà più facile dare una mano per chi potrà
:)

in effetti è un'ottima idea dividerlo in sottoprogetti.
Mi stavo chiedendo, visto che ci sono già programmi famosi che fanno egregiamente il loro lavoro, bisognerebbe pensare a delle features che gli altri non hanno ( non mi viene in mente niente per ora ) e  definire quale sia sistema il sistema operativo target.

Nel caso di un sistema operativo come Windows si potrebbero usare delle api dirette per renderlo veloce, ma se il progetto deve girare anche su linux o altro bisogna ragionare bene sulla struttura del progetto.
Cosa ne pensate?



Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 26, 2019, 04:40:19 pm
Il codice deve essere mantenibile e multipiattaforma, quindi escludo a priori api del singolo sistema operativo se proprio non sono costretto, tipo il controllo del mouse per cocoa.

Per il discorso cosa fare per renderlo appetibile il gioco è molto semplice: gratuito + social.

Il renderlo social lo spiegherò quando sarà il momento, non vorrei che qualcuno mi rubasse l'idea solo leggendola sul forum.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Febbraio 27, 2019, 08:25:29 am
Il codice deve essere mantenibile e multipiattaforma, quindi escludo a priori api del singolo sistema operativo se proprio non sono costretto, tipo il controllo del mouse per cocoa.

che sia multipiattaforma è un bene, forse oggi le app che non sono tali non hanno più tanto senso
per il mouse per cocoa, se non ci sono alternative valide, nulla ti vieta di usare le api dedicate: basta che incapsuli il codice dedicato con delle direttive

Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Febbraio 27, 2019, 08:58:48 am
Si anche io penso che le app singolo OS non hanno più molto senso. Detto questo sono riuscito ad ottenere qualcosa con il mouse di cocoa solo con il c. Ma se non ricordo male si possono inglobare delle librerie c in lazarus. Nella peggiore delle ipotesi faccio eseguire i comandi come un eseguibile esterno. Però diciamo che prima è importante che funzioni su win e linux con il pacchetto standard di lazarus. Poi quando abbiamo sistemato quello io simulo le stesse cose anche per cocoa. Magari la gestione del mouse e della tastiera l'astraiamo così da poterlo gestire meglio.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: mbisax - Ottobre 28, 2020, 12:02:41 pm
Salve,
nessun avanzamento di questo interessante progetto ?
Anche io, come xinyiman, penso da anni a un progetto simile per poter controllare la buona esecuzione dei prg installati presso i nostri clienti ma ho sempre desistito per mancanza di tempo.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Ottobre 28, 2020, 04:07:56 pm
Ciao, il progetto al momento è fermo, avevo settimane fa ripreso il tutto riscrivendolo da zero. Per il momento ho solo riscritto la parte per la condivisione dello schermo.

1. Ho suddiviso lo schermo in 4 parti
2. Trasmetto le singole 4 parti in rete con il protocollo UDP
3. Quando ricevo l'immagine parziale lo ricompongo nel mio programma

Funziona su mac e su windows, ma non su ubuntu. Non ha alcun tipo di crittografia al momento e ho fatto test solo in rete locale. Magari in futuro lo riprendo, ora sono davvero oberato di lavoro.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: mbisax - Ottobre 28, 2020, 04:42:27 pm
Grazie per aver risposto così rapidamente.
Ho provato la versione che avevi postato e funziona. Una buona base di partenza sulla quale si può lavorare per aggiungere ciò che manca. Se hai riscritto buona o tutta parte del programma conviene aspettare che tu renda disponibile la nuova versione prima di metterci mano.
Avendo affrontato il problema già tempo fa per una necessità molto più ridotta rispetto a quella che hai in animo di produrre, occorre trasmettere su un layer HTTP per passare attraverso il firewall che, normalmente non chiude la porta 80 dedicata al web: a quello che so, Teamviewer e altri prodotti simili sfruttano questa tecnica.

Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Ottobre 28, 2020, 06:17:14 pm
Guarda penso proprio che TeamViewer funziona con la tecnica dell' Udp Hole Pouching. Comunque non ho nessun problema a condividere l'ultima versione.

Attenzione solo ad una cosa, le custom options

-dUseCThreads
-dNoWriteDebug
-dGetScreenInMainThread

La prima non va toccata, la seconda mi serviva per dare del debug usando la console, basta cambiarla in -dWriteDebug.
La terza invece se rimossa fa si che il desktop venga preso nei singoli thread (funziona su mac os e windows) mentre con -dGetScreenInMainThread dovrebbe funzionare con ubuntu (cosa che al momento non avviene).

Inoltre in uMain ci sono queste due costanti


const
     COUNT_ROW_ZONE_SCREEN = 1;
     COUNT_COL_ZONE_SCREEN = 1;

che servono a cambiare il numero di parti con cui suddivido il monitor e quindi il numero di thread secondari. Provate ad impostarlo su


const
     COUNT_ROW_ZONE_SCREEN = 2;
     COUNT_COL_ZONE_SCREEN = 2;
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Ottobre 29, 2020, 06:01:02 pm
Ho aggiornato il sorgente, ora è impostato per funzionare su Windows. Basta compilarlo, aprirne due istanze, su una premere il tasto invert e poi premere start su entrambi.

Avevo dimenticato anche di parlarvi della custom option: MyVersion. Per funzionare su windows c'è bisogno della MyVersion impostata.

Spero di essere stato d'aiuto.

PS: il sorgente ha due requisiti LCL e Laz_Synapse
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Ottobre 29, 2020, 07:29:38 pm
stranamente quando apro il progetto (lazarus 2) i sorgenti non sono visibile
che versione di lazarus usi?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Ottobre 29, 2020, 09:35:56 pm
Ho salvato e compilato con Lazarus 2.1.0 r61484 FPC 3.3.1 i386-win32-win32/win64
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: mbisax - Ottobre 30, 2020, 09:39:07 am
nomorelogic, capita anche a me.
Ho ricreato il progetto con Lazarus 2.0.8.
Ti allego il progetto di xinyiman dove ho sostituito i files .lpr e .lpi.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Ottobre 30, 2020, 10:38:12 am
ok grazie :)


Edit:
forse sbaglio qualcosa...
lo sto provando in Win10

lancio 2 istanze
sulla 1, clicco invert e poi start e l'applicazione si chiude immediatamente
sulla 2, clicco start ma mi viene mostrato solo un rettangolo nero (evidentemente la 1 non c'è...)

sbaglio io o c'è un errore?


Edit 2:
in effetti la 1 non si chiude ma si minimizza e rimane in esecuzione
la 2 comunque mostra sempre un rettangolo nero
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: mbisax - Ottobre 30, 2020, 10:59:43 am
Succede anche a me e anche io uso W10.
Sto dando una occhiata al programma per vedere se riesco a isolare il problema e trovarne una possibile soluzione condivisibile con xinyiman.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Ottobre 30, 2020, 12:08:57 pm
ok grazie :)


Edit:
forse sbaglio qualcosa...
lo sto provando in Win10

lancio 2 istanze
sulla 1, clicco invert e poi start e l'applicazione si chiude immediatamente
sulla 2, clicco start ma mi viene mostrato solo un rettangolo nero (evidentemente la 1 non c'è...)

sbaglio io o c'è un errore?


Edit 2:
in effetti la 1 non si chiude ma si minimizza e rimane in esecuzione
la 2 comunque mostra sempre un rettangolo nero

Per curiosità cosa succede se prima dai start all'istanza 2 e poi dai start all'istanza 1 (quella con l'invert)?
State usando la seconda versione che ho allegato?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Ottobre 30, 2020, 01:18:19 pm
sto usando quella rifatta da mbisax

ora non riesco a fare le prove, nel pomeriggio ti faccio sapere
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: mbisax - Ottobre 30, 2020, 02:21:48 pm
Per curiosità cosa succede se prima dai start all'istanza 2 e poi dai start all'istanza 1 (quella con l'invert)?
State usando la seconda versione che ho allegato?


Si, sto usando la seconda versione.
Ho provato il tuo suggerimento ma si comporta ugualmente. Lato server, form nera.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: mbisax - Ottobre 30, 2020, 04:58:15 pm
sulla 1, clicco invert e poi start e l'applicazione si chiude immediatamente

In realtà non si chiude ma passa nella try icon, minimizzata.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Ottobre 30, 2020, 05:09:57 pm
Per curiosità cosa succede se prima dai start all'istanza 2 e poi dai start all'istanza 1 (quella con l'invert)?

stesso comportamento
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Ottobre 30, 2020, 06:32:48 pm
Sono riuscito a ritagliarmi mezz'oretta ed ora gira anche su ubuntu. Da qui potete scaricare il sorgente che ho compilato (che non le dovute modifiche sulle custom options) per

Mac Os
Ubuntu
Windows

www.lazaruspascal.it/download_personali/korg_remote_desktop.zip

Contiene anche gli eseguibili così potete provarlo senza dover compilare nulla. Guardate nella cartella bin.

Fatemi sapere se funziona (occhio solo a non avere nessun firewall attivo che blocca i pacchetti UDP).

Sicuramente non è un fulmine di guerra, diciamo che è un esperimento per capire come funzionano certi meccanismi.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 02, 2020, 10:28:13 am
ho provato con i binari inclusi nel tuo file ed ha funzionato

ho provato tra win e linux ed ha funzionato
in effetti è un po' lentino ma è un'ottima partenza ;)
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: mbisax - Novembre 02, 2020, 11:36:13 am
Invio i progetti con i .lpi modificati e corretti per compilare su Windows e Linux un eseguibile funzionante.
Grazie XinYiMan!
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 03, 2020, 06:36:32 pm
Se scaricate il file al link: www.lazaruspascal.it/download_personali/korg_remote_desktop.zip

potrete provare la nuova versione. Praticamente ho implementato la compressione e la cifratura dei dati.

Ora è decisamente più veloce. Tenete presente una cosa.

In base al vostro tipo di connessione potete incrementare il valore del "packet char dimension". Io a casa per esempio lo porto a 59000. Mentre in un'altro posto dove condivido la connessione con un'altro apparecchio (che probabilmente mi fa da collo di bottiglia) devo tenerla a 8000.

Le custom options sono come seguono per windows.

-dUseCThreads
-dWriteDebug
-dMyVersion

//usato per inviare i dati come tmemory e non come tstring
-dSendWithMemory

//usato per comprimere i tmemory
-dSendWithCompression

//usato per windows e mac
-dNoGetScreenInMainThread

//usato per ubuntu
//-dGetScreenInMainThread

Le dipendenze sono rimaste invariate:
LCL
Laz_synapse

Ovviamente sono ancora lontano dal vedere in modo fluido un video, ma questo è anche dovuto al fatto che manda i dati splittando il monitor in più parti.
Per favore, provatelo e fatemi sapere.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 04, 2020, 09:47:52 am
una domanda, quando usi la compressione, prima comprimi e poi converti in base64 o viceversa?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 04, 2020, 12:00:21 pm
Fondamentalmente la compressione e successivamente la crittografia vengono effettuate un attimo prima di mandare i dati sulla rete. Quindi dopo la conversione a B64. Anche perchè l'immagine che manda è un jpeg quindi già compresso di suo.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 04, 2020, 12:28:25 pm
comprimere una stringa base64 sembra che non dia risultati eccezionali

ho fatto un po' di calcoli sulle stringhe inviate
dopo Len1 c'è la lunghezza dei dati da inviare (quindi dovrebbe essere la lunghezza B64)
dopo Len2 c'è la lunghezza dopo la compressione

come vedi quando la stringa è piccola (32 byte), addirittura non conviene comprimere (diventano 43 byte)
quando la stringa B64 è più grande, a volte conviene, a volte no

se non ho fatto errori, alla fine, dopo 100 invii la compressione ha ridotto i dati del 9.11%

sotto ci sono i miei calcoli
se vuoi ti mando le modifiche con cui ho fatto questi conteggi così che puoi verificare anche tu


Codice: [Seleziona]
Nr. 1 - Len1 32- Len2 43
Nr. 2 - Len1 32- Len2 43
Nr. 3 - Len1 32- Len2 43
Nr. 4 - Len1 32- Len2 43
Nr. 5 - Len1 16- Len2 24
Nr. 6 - Len1 16- Len2 24
Nr. 7 - Len1 16- Len2 24
Nr. 8 - Len1 16- Len2 24
Nr. 9 - Len1 16- Len2 24
Nr. 10 - Len1 16- Len2 24
Nr. 11 - Len1 16- Len2 24
Nr. 12 - Len1 16- Len2 24
Nr. 13 - Len1 856- Len2 844
Nr. 14 - Len1 856- Len2 844
Nr. 15 - Len1 856- Len2 844
Nr. 16 - Len1 856- Len2 844
Nr. 17 - Len1 16- Len2 24
Nr. 18 - Len1 16- Len2 24
Nr. 19 - Len1 8016- Len2 7599
Nr. 20 - Len1 8016- Len2 7996
Nr. 21 - Len1 8016- Len2 5317
Nr. 22 - Len1 8016- Len2 6930
Nr. 23 - Len1 8016- Len2 3259
Nr. 24 - Len1 8016- Len2 8027
Nr. 25 - Len1 1104- Len2 1115
Nr. 26 - Len1 16- Len2 24
Nr. 27 - Len1 16- Len2 24
Nr. 28 - Len1 8016- Len2 7190
Nr. 29 - Len1 8016- Len2 6128
Nr. 30 - Len1 8016- Len2 4553
Nr. 31 - Len1 8016- Len2 6085
Nr. 32 - Len1 3664- Len2 3675
Nr. 33 - Len1 16- Len2 24
Nr. 34 - Len1 16- Len2 24
Nr. 35 - Len1 8016- Len2 7995
Nr. 36 - Len1 8016- Len2 8027
Nr. 37 - Len1 8016- Len2 7290
Nr. 38 - Len1 8016- Len2 5972
Nr. 39 - Len1 8016- Len2 7485
Nr. 40 - Len1 8016- Len2 8008
Nr. 41 - Len1 8016- Len2 7936
Nr. 42 - Len1 8016- Len2 7900
Nr. 43 - Len1 8016- Len2 7812
Nr. 44 - Len1 8016- Len2 7818
Nr. 45 - Len1 8016- Len2 7764
Nr. 46 - Len1 8016- Len2 7763
Nr. 47 - Len1 584- Len2 595
Nr. 48 - Len1 16- Len2 24
Nr. 49 - Len1 16- Len2 24
Nr. 50 - Len1 8016- Len2 7954
Nr. 51 - Len1 8016- Len2 8027
Nr. 52 - Len1 8016- Len2 7851
Nr. 53 - Len1 8016- Len2 7832
Nr. 54 - Len1 8016- Len2 7888
Nr. 55 - Len1 8016- Len2 8027
Nr. 56 - Len1 8016- Len2 7094
Nr. 57 - Len1 8016- Len2 7958
Nr. 58 - Len1 8016- Len2 7974
Nr. 59 - Len1 8016- Len2 7750
Nr. 60 - Len1 8016- Len2 7126
Nr. 61 - Len1 8016- Len2 7750
Nr. 62 - Len1 8016- Len2 8027
Nr. 63 - Len1 8016- Len2 8027
Nr. 64 - Len1 8016- Len2 7813
Nr. 65 - Len1 5608- Len2 5277
Nr. 66 - Len1 16- Len2 24
Nr. 67 - Len1 16- Len2 25
Nr. 68 - Len1 8016- Len2 7465
Nr. 69 - Len1 8016- Len2 7547
Nr. 70 - Len1 8016- Len2 6396
Nr. 71 - Len1 8016- Len2 7495
Nr. 72 - Len1 8016- Len2 7520
Nr. 73 - Len1 8016- Len2 7518
Nr. 74 - Len1 8016- Len2 7524
Nr. 75 - Len1 8016- Len2 7505
Nr. 76 - Len1 8016- Len2 7523
Nr. 77 - Len1 8016- Len2 7153
Nr. 78 - Len1 6520- Len2 6531
Nr. 79 - Len1 16- Len2 24
Nr. 80 - Len1 16- Len2 25
Nr. 81 - Len1 8016- Len2 6571
Nr. 82 - Len1 8016- Len2 5114
Nr. 83 - Len1 8016- Len2 4607
Nr. 84 - Len1 8016- Len2 6976
Nr. 85 - Len1 392- Len2 403
Nr. 86 - Len1 16- Len2 24
Nr. 87 - Len1 16- Len2 25
Nr. 88 - Len1 8016- Len2 8002
Nr. 89 - Len1 8016- Len2 8027
Nr. 90 - Len1 8016- Len2 7251
Nr. 91 - Len1 8016- Len2 5430
Nr. 92 - Len1 8016- Len2 7252
Nr. 93 - Len1 8016- Len2 7997
Nr. 94 - Len1 8016- Len2 7874
Nr. 95 - Len1 8016- Len2 7821
Nr. 96 - Len1 8016- Len2 7664
Nr. 97 - Len1 8016- Len2 7772
Nr. 98 - Len1 8016- Len2 7101
Nr. 99 - Len1 6904- Len2 6609
Nr. 100 - Len1 16- Len2 24
Tot Send = 100 - base64 bytes = 525688 - sended bytes = 479365 - ratio =  9.1188119188568129E-001


Edit:
forse bisognerebbe comprimere +crittare prima e convertire in B64 poi
però il JPEG in effetti è già compresso
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 04, 2020, 01:53:11 pm
Grazie mille della prova, verificherò nei prossimi giorni e vi farò sapere.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: Stilgar - Novembre 04, 2020, 02:37:54 pm
Ciao.Perchè invii una stringa?Non puoi mandare un array di byte?(Forse è una domanda alla quale hai già risposto ma me la sono persa)In base 64 raddoppi la dimensione del blocco da inviare.



Stilgar
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 04, 2020, 03:08:55 pm
Ciao Stilgar, la risposta è semplice quanto banale. Non ho trovato degli esempi per farlo fare ad ararat synapse. Se sai darmi qualche imbeccata è ben accetta.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 04, 2020, 03:23:02 pm
forse sto prendendo un abbaglio ma tu spedisci con SendStream che accetta un parametro di tipo TStream
per me va già bene

Codice: [Seleziona]
unit blcksock;

...

{:Send content of stream to socket. It using @link(SendBlock) method}
    procedure SendStream(const Stream: TStream); virtual;   

...

Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 04, 2020, 03:33:07 pm
Bhe allora il problema è a monte. Se avete guardato il codice vedrete che io converto in base64 per creare N blocchi di stringhe lunghe massimo un TOT di caratteri. Questo perchè il pacchetto udp deve essere lungo al massimo N byte. Siccome per mandarlo devo scomporlo devo essere altrettanto in grado di ricomporlo quando le parti arrivano a destinazione. Sicuramente esiste un modo più furbo di quello che ho usato io.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 04, 2020, 04:46:14 pm
qual è la lunghezza massima che hai usato per un pacchetto udp?
in giro trovo un sacco di notizie diverse
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 04, 2020, 06:27:01 pm
Allora, cercando di trovare la strada migliore ho deciso di provare a risolvere usando indy al posto di synapse. Ho creato un esempio semplice semplice.
Unica dipendenza oltre a LCL è indy.

Compilate il programma. Premete prima su button2 e poi su button1.

Vi dirà "package size too big" quando arriva al punto del sendbuffer.
Ovviamente supera la dimensione di 65507 byte. Qualcuno mi spiega come splittare il tmemorystream in pezzi più piccoli così da fare un for ed inviarli separatamente?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: Stilgar - Novembre 04, 2020, 07:03:07 pm
Puoi creare N memory stream.
Poi usi i puntatori per spostare alla posizione che ti interessa, con il size dello stream.
Così non dovresti spostare nemmeno un bit in memoria.
Altrimenti ti estendi il tuo memory stream per fare quello che ti interessa ;)

Stilgar
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 04, 2020, 07:48:11 pm
Stilgar non ho capito. Puoi modificare l'esempio?
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 04, 2020, 10:21:26 pm
Ho provato a modificare il test come dice Stilgar. Sarà l'ora ma non mi funziona. Chi gli butta un occhio e mi dice quale caxxata ho fatto?
Grazie
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: Stilgar - Novembre 05, 2020, 08:11:58 am
Ci butto un occhio
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: Stilgar - Novembre 05, 2020, 08:24:48 am

Ciao.
Non conosco Indy.
Quindi non capisco cosa ci sia che non va.




Il ragionamento sui thread e il memory stream l'avevo fatto per Synapse.


Forse Indi ha qualche componente "sofisticato" per eseguire invio/lettura dei dati.




Stilgar
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 05, 2020, 08:49:14 am
secondo me il problema non è synapse

qualcosa del genere potrebbe andare
è una classe che splitta un maxi-pacchetto in tanti pacchetti di una dimensione minore
poi l'invio dovrebbe inviarli tutti

come la vedete?

Codice: [Seleziona]

const
  MAXSIZEPACKET = 4096;


type
  TPacketData = array [1..MAXSIZEPACKET] of char;
 
  TSplittedPacket = record
     ID: Int64;           // identifica un unico pacchetto
     PacketNo,            // numero dello split corrente
       TotPackets: Int64; // totale split
     Size: Int64;         // dimensioni dati in Data (per ultimo pacchetto)
     Data: TPacketData;
  end;

  TSplittedPackets = array of TSplittedPacket;


class TSplitedPacket ....
   PacketList: TSplittedPacket;
private
   procedure DoSplitPacket(AStream: TStream);
   
public
   procedure LoadPacket(AStream: TStream);

end;


procedure TSplitedPacket.LoadPacket(AStream: TStream);
var need: Int64;
begin
   SetLength(PacketList, (Astream.Size div MAXSIZEPACKET) + 1);
   DoSplitPacket(AStream);
end;


procedure TSplitedPacket.DoSplitPacket(AStream: TStream);
var scan: Int64;
    SplittedBytes: Int64;
begin
   SplittedBytes:=0;
   for scan := 0 to length(PacketList) - 1 do begin
       PacketList.ID = "numero invio";
       PacketList.PacketNo := scan;
       PacketList.TotPackets := length(PacketList);
       PacketList.Data := ...
   end;
end

Edit:
ho corretto  il codice che presentava qualche errore


Edit2:
l'invio dovrebbe inviare una struttura TSplittedPacket (serializzata in qualche modo)
così da poter ricostruire il pacchetto originale usando PacketNo e TotPackets
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 05, 2020, 01:02:40 pm
Questa mattina mi sono svegliato alle 5 e la testa girava su quel problema. Alla fine mi sono alzato dopo pochi minuti e l'ho risolto con synapse. Questa sera quando torno a casa vi aggiorno, questa mattina non avevo tempo, dovevo andare al lavoro quando ho finito. Questa sera faccio dei test e vi condivido il risultato
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: Stilgar - Novembre 05, 2020, 05:22:04 pm
Ciao.


Avrei una proposta scandalosa.


Al posto di avere un thread per comando da inviare tra le macchine.


Usare il Command Pattern?


Allego un possibile esempio di quello che intendo.
(Compila nn so se funziona).


Stilgar



Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 05, 2020, 06:19:32 pm
Ciao a tutti, ecco un semplice esempio che manda i jpg scomposti e poi li ricompone. Funziona se non cifro la connessione.
Per fare dei test basta che aprite due istanze del programma.
Su una premete il pulsante "Start server jpg" (che dura solo 4/5 secondi) e poi velocemente sull'altra istanza premete "Send Jpg".
Se l'unico campo Edit (all'avvio è autopopolato con il testo "mypwd") è vuoto funziona, altrimenti no.

Non capisco cosa non funziona (in questo momento ho gli occhi che si chiudono che sono cotto). Inoltre il pulsante button6 simula la crittografia senza mandarlo sulla rete (e funziona) quindi non capisco cosa sbaglio.

Testato sia su mac che su ubuntu.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 05, 2020, 06:20:04 pm
Ciao.


Avrei una proposta scandalosa.


Al posto di avere un thread per comando da inviare tra le macchine.


Usare il Command Pattern?


Allego un possibile esempio di quello che intendo.
(Compila nn so se funziona).


Stilgar
Giuro che domani sera lo guardo, questa sera sono una ameba.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 06, 2020, 05:40:37 pm
Ho capito il problema. La crittografia blowfish mi cambia la dimensione dell'output, mentre per me è importante che rimanga uguale. Userò un AES CRT a 128 bit. Vi tengo aggiornati sugli sviluppi
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 07, 2020, 05:42:53 pm
Ecco a voi la nuova versione. Migliorata e più veloce (ora le immagini non sono mandate in base64). Stilgar, ho guardato il tuo esempio ma non ho capito come questo mi permetterebbe di bypassare l'uso dei thread.

www.lazaruspascal.it/download_personali/korg_remote_desktop.zip

Ora c'è una dipendeza in più: dcpcrypt

Ditemi cosa ne pensate. Ci sono anche gli eseguibili per

Ubuntu
Win32
Win64
Mac OS X (cocoa)

Ho già imbastito anche la trasmissione del mouse remoto (ma al momento non influisce, scrive solo le coordinate nella caption della form (che invia il proprio desktop).
Come già detto ora non usa più la crittografia blowfish, ma aes a 128 bit. Se la password è vuota viene mandato il dato in chiaro.

All'avvio ho aggiunto la possibilità di far vedere nella memo iniziale l'indirizzo IP per la rete locale e quello per l'accesso ad internet. (questo per fare test su macchine diverse).

Ho anche tolto la possibilità di dimensionare il pacchetto con la barra. Ora c'è una checkbox (jumbo packet) che se è flaggata manda pacchetti di 65507 byte, altrimenti li manda di 8190.

Fatemi sapere il vostro parere.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: Stilgar - Novembre 08, 2020, 11:45:19 am
Stilgar, ho guardato il tuo esempio ma non ho capito come questo mi permetterebbe di bypassare l'uso dei thread.
I thread possono essere in numero limitato se usi il command pattern.
Adesso, se ho capito il la struttura del progetto, hai un thread che comunica con il peer tra le macchine.
Uno in lettura e uno in scrittura per ogni comando.
Potresti arrivare ad avere 1 solo thread per la gestione della comunicazione, al posto di avere il thread per il ping e per la gestione delle immagini.
Stilgar

Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 08, 2020, 12:35:26 pm
 Allo stato attuale uso 4 thread x inviare e ricevere le immagini, perché suddivido il monitor in 4 parti. Più un thread per tutte le altre comunicazioni.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 11, 2020, 09:43:39 pm
Ciao a tutti. Ho fatto delle aggiunte ed ho aggiornato il programma.

Link: www.lazaruspascal.it/download_personali/korg_remote_desktop.zip

Ora sono queste le dipendenze

LCL
laz_synapse
dcpcrypt
LazMouseAndKeyInput (se usate cocoa, usate la versione che trovate a questo link: www.lazaruspascal.it/download_personali/mouseandkeyinput_cocoa_support.zip)

Ho anche aperto un 3d sul forum internazionale, in modo da trovare qualcuno che vuole contribuire al progetto. Questo il link: https://forum.lazarus.freepascal.org/index.php?topic=52110.msg383428#msg383428
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 12, 2020, 08:35:29 am
penso che dovresti mettere su un repository da qualche parte ;)
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 12, 2020, 08:46:55 am
L'obbiettivo è quello, ma prima voglio risolvere il fatto che in lan lavora bene e in wan non funziona.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 12, 2020, 06:58:21 pm
Ho capito cosa sbaglio. Non ho implementato correttamente UDP Hole Punching.
Manca ancora un software "controller" raggiungibile sempre. Nel week end lo implemento se riesco e poi vi aggiorno. Intanto se qualcuno volesse darmi dei feedback sul lavoro in lan ne sarei davvero felice.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 13, 2020, 08:44:20 am
mi puoi elencare le direttive che devo mettere per linux per favore?

Edit:
alla fine le ho trovate le metto quì per documentazione

-dUseCThreads
-dNoWriteDebug
-dGetScreenInMainThread
-dMyVersion
-dFilterFromIpPort

Edit2:
ora in lan è molto più veloce della vecchia versione
aspettiamo la versione wan :)

Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 15, 2020, 05:00:46 pm
Eccomi qui, volevo solo avvisarvi che non ho aggiornato il software come avevo detto. Ho fatto delle modifiche, ma non sono riuscito ad implementare l'UDP Hole Punching.
Ho creato il server controller (che funziona correttamente) perchè permette ai client colleggati di ottenere gli ip e le porte dei client remoti, ma quando provo ad instaurare la connessione non funziona. Inizio ad essere disperato perchè vi ho passato sopra tutto il week end senza cavarne un ragno dal buco.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 15, 2020, 05:11:08 pm
C'è una cosa che non capisco. Ipotizziamo che ho i due client che si sono già scambiati le informazioni tramite il controller. Ipotizziamo che il client A abbia un indirizzo ip 23.6.141.2 e porta 5000 mentre il client B ha un indirizzo 35.7.121.15 e porta 1926.

Il client A inizia a mandare pacchetti all'indirizzo 35.7.121.15:1926
Il client B inizia a mandare pacchetti all'indirizzo 23.6.141.2:5000

poi ognuno dei client si mette in ascolto e riceve i pacchetti che aveva mandato.
Il client A riceve i pacchetti generati da 35.7.121.15:1926
Il client B riceve i pacchetti generati da 23.6.141.2:5000

Ma non capisco come questo possa accadere.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 16, 2020, 11:21:21 am
non so se ho capito il problema ma ci provo

quando dici "si sono già scambiati le informazioni" intendi in passato ed ora ci riprovano con gli stessi parametri?

perché se è così è chiaro che non funziona, quello che chiami "controlloer" stabilisce una comunicazione sia con A che con B e questo gli permette di avere le autorizzazioni per passare attraverso i vari firewall

quindi il tunnel è valido solo finché non si chiude quella comunicazione: se serve un'altra comunicazione serve un altro intervento del controller

spero di aver interpretato bene la tua domanda :)



Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 16, 2020, 07:30:24 pm
Ciao a tutti. Penso di aver capito il problema. Il mio programma funziona, il problema è che il mio NAT è di tipo bidirezionale.
In un tipo di nat non bidirezionale quando il client A si collega al controller comunica ip e porta che verranno comunicate al client B e tutto funzionerà, perchè il client A userà sempre quell'ip e quella porta.
In un nat bidirezionale la porta comunicata al controller è diversa da quella usata per il P2P con il client B. Ora ci ho ragionato un pochino, e sembrerebbe che ho solo due strade.

1. Il client A fa una scansione completa delle porte del client B fino a quando non riesco ad accoppiare le comunicazioni tra i client.
2. Chiedo al router la tabella NAT per le mie connessioni verso l'esterno (non ho idea di come si faccia)

Chiedo se secondo voi ci sono strade alternative o se mi aiutate a realizzare il punto 2.

Grazie mille
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 16, 2020, 07:56:32 pm
Ovviamente nel caso dovessi "scansionare le porte", partirei da quelle vicine a quelle usate per la comunicazione con il controller. Però non è detto che apra le porte in maniera consecutiva.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 17, 2020, 04:33:46 pm
la scansione delle porte non mi pare onestamente una buona soluzione

intanto la domanda:
perché non è praticabile che B risponda sullo stesso socket da cui riceve i messaggi di A?


cmq per evitare la scansione, così come A comunica al controller IP e porta che poi verranno consegnate a B
allo stesso modo B potrebbe dare i propri IP e porta al controller in modo che li possa girare ad A

qualcosa di simile alle stanza delle chat insomma
A, B e chiunque altro possono entrare in comunicazione grazie all'ID di una stanza che poi è la chiave per scambiarsi IP/Porta
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 17, 2020, 06:56:47 pm
la scansione delle porte non mi pare onestamente una buona soluzione

intanto la domanda:
perché non è praticabile che B risponda sullo stesso socket da cui riceve i messaggi di A?


cmq per evitare la scansione, così come A comunica al controller IP e porta che poi verranno consegnate a B
allo stesso modo B potrebbe dare i propri IP e porta al controller in modo che li possa girare ad A

qualcosa di simile alle stanza delle chat insomma
A, B e chiunque altro possono entrare in comunicazione grazie all'ID di una stanza che poi è la chiave per scambiarsi IP/Porta
Infatti la scansione non è praticabile per lentezza, era solo una ipotetica soluzione concettuale.
Allo stato attuale già faccio quello che dici

Il client A comunica con il controller che si salva il suo indirizzo ip e le sue porte
Il client B comunica con il controller che si salva il suo indirizzo ip e le sue porte
Il client A chiede i dati del client B al controller, che ovvimente le restituisce
Il client B chiede i dati del client A al controller, che ovvimente le restituisce

A prova a mandare dei pacchetti verso B
B prova a mandare dei pacchetti verso A

Sfortunatamente a casa mia non funziona se il controller è su internet, fortunatamente funziona se il controller si trova nella rete locale. Quindi questo porta a pensare due cose

1. Il mio router di casa (vodafone station revolution) adotta un NAT bidirezionale (che fa si che le porte vengono cambiate in funzione dell'endpoint, a prescindere dalla sorgente).

2. Sbaglio qualcosa io

Onestamente non so più dove sbattere la testa. Questa sera sul tardi se riesco, riaggiorno i sorgenti e "chiedo aiuto dal pubblico a casa".
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 18, 2020, 08:52:38 am
Sfortunatamente a casa mia non funziona se il controller è su internet, fortunatamente funziona se il controller si trova nella rete locale.

hai pensato al fatto che se il controller è su internet mentre A e B sono sulla stessa lan, il controller deve:
- passare ad A l'indirizzo di B dove l'IP è interno alla lan
- passare a B l'indirizzo di A dove l'IP è interno alla lan


esempio:
A in una lan ha IP 192.168.1.150 e porta 1234
B stessa lan ha IP 192.168.1.151 e porta 6789

A comunica con il controller e il controller registra l'indirizzo pubblico, esempio 79.124.28.125 porta 456
B comunica con il controller e il controller registra l'indirizzo pubblico, esempio 79.124.28.125 porta 741

se il controller deve mettere in comunicazione A e B, visto che questi 2 sono nella stessa lan deve:
- trasmettere ad A che B lo trova con IP 192.168.1.151 e porta 6789
- trasmettere a B che A lo trova con IP 192.168.1.150 e porta 1234


quindi il controller deve, per ogni client, conoscere sia IP/Porta pubblici che interni alla rispettiva LAN

detto questo potrebbe essere il firewall della vodafone  :P
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 18, 2020, 09:29:56 am
Sfortunatamente a casa mia non funziona se il controller è su internet, fortunatamente funziona se il controller si trova nella rete locale.

hai pensato al fatto che se il controller è su internet mentre A e B sono sulla stessa lan, il controller deve:
- passare ad A l'indirizzo di B dove l'IP è interno alla lan
- passare a B l'indirizzo di A dove l'IP è interno alla lan


esempio:
A in una lan ha IP 192.168.1.150 e porta 1234
B stessa lan ha IP 192.168.1.151 e porta 6789

A comunica con il controller e il controller registra l'indirizzo pubblico, esempio 79.124.28.125 porta 456
B comunica con il controller e il controller registra l'indirizzo pubblico, esempio 79.124.28.125 porta 741

se il controller deve mettere in comunicazione A e B, visto che questi 2 sono nella stessa lan deve:
- trasmettere ad A che B lo trova con IP 192.168.1.151 e porta 6789
- trasmettere a B che A lo trova con IP 192.168.1.150 e porta 1234


quindi il controller deve, per ogni client, conoscere sia IP/Porta pubblici che interni alla rispettiva LAN

detto questo potrebbe essere il firewall della vodafone  :P

Ho pensato anche a questo, ma per il momento voglio evitarlo. Voglio poter uscire e rientrare dalla rete locale. Così da testare il caso peggiore. Ovvero i due client sono dietro una NAT. Ieri sera ho iniziato a creare un test scorporato dal progetto originale. Così da semplificare il debug e capire cosa sbaglio. Questa sera (o in pausa pranzo) lo finisco e poi lo posto. Così magari qualche anima pia mi aiuta a capire cosa sbaglio.
PS: quando ho fatto il test il firewall della vodafone lo avevo disabilitato.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 18, 2020, 09:49:42 am
Ho pensato anche a questo, ma per il momento voglio evitarlo. Voglio poter uscire e rientrare dalla rete locale. Così da testare il caso peggiore. Ovvero i due client sono dietro una NAT.

Sel la lan è la stessa non so se è possibile.
Nel senso che se tu esci dal tuo IP pubblico per rientrare nel tuo IP pubblico, penso sia una cosa che non si possa proprio fare.
Forse mi sbaglio ma ora ho questa convinzione.
Potresti provare installando un apache, pubblichi la porta e poi apri un browser in lan ma cerchi di raggiungere apache con l'IP pubblico.


Secondo me devi proprio lavorare con 2 IP pubblici diversi altrimenti rischi di perdere tempo.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 18, 2020, 11:09:58 am
No perchè un client lo fai uscire su una porta e il secondo su un'altra porta.
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 18, 2020, 01:02:03 pm
infatti nell'esempio che ti ho mandato l'IP pubblico è lo stesso ma le porte sono diverse

però sempre che A esce da un IP pubblico e deve rientrare nello stesso (e lo stesso deve fare B)
per fare una cosa del genere forse serve configurare un loopback ma non è una condizione che trovi normalmente
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: xinyiman - Novembre 18, 2020, 01:11:55 pm
infatti nell'esempio che ti ho mandato l'IP pubblico è lo stesso ma le porte sono diverse

però sempre che A esce da un IP pubblico e deve rientrare nello stesso (e lo stesso deve fare B)
per fare una cosa del genere forse serve configurare un loopback ma non è una condizione che trovi normalmente

Farò delle prove al riguardo. Nel frattempo ho finito il programma di test.

Per capire come funziona il programma seguite questi punti (prima in locale, poi su 3 pc diversi della rete lan e infine spostando il controller fuori dalla lan)

1. Avviare l'eseguibile del controller che risponderà con qualcosa di simile

UDP Hole Punching Controller
MAX_CONNECTIONS: 100
MAX_INACTIVE_MS: 30000
SOURCE_PORT: 1985
PWD:

2. Avviare una istanza del client ed impostare l'indirizzo ip del controller nel campo identificato come "Controller IP:" che di default è 127.0.0.1

3. Avviare una seconda istanza del client ed impostare l'indirizzo ip del controller nel campo identificato come "Controller IP:" che di default è 127.0.0.1 e successivamente cliccare sul check "Invert"

4. Sull'istanza 1 del client cliccare sul pulsante "Start conn" che restituirà un id nel campo memo (Es: 1qhlUQ)

5. Sull'istanza 2 del client cliccare sul pulsante "Start conn" che restituirà un id nel campo memo (Es: NnGLQ8)

6. Inserite nel campo "Remote id session:" dell'istanza 1 l'id dell'istanza 2 (Es: NnGLQ8)

7. Inserite nel campo "Remote id session:" dell'istanza 2 l'id dell'istanza 1 (Es: 1qhlUQ)

8. Su entrambe le istanza cliccate sul pulsante "Start P2P"

Se funziona tutto dovreste trovarvi un lista di messaggi inviati e ricevuti nella memo di entrambe le istanze

Es.

ControllerMyId  :A
ControllerIp    :127.0.0.1
ControllerPort  :4999
ControllerTS    :0
127.0.0.1:4999 --> A msg_1
127.0.0.1:4999 <-- B msg_1
127.0.0.1:4999 --> A msg_2
127.0.0.1:4999 <-- B msg_2
127.0.0.1:4999 --> A msg_3
127.0.0.1:4999 <-- B msg_3
127.0.0.1:4999 --> A msg_4
127.0.0.1:4999 <-- B msg_4
127.0.0.1:4999 --> A msg_5
127.0.0.1:4999 <-- B msg_5
127.0.0.1:4999 --> A msg_6
127.0.0.1:4999 <-- B msg_6
127.0.0.1:4999 --> A msg_7
127.0.0.1:4999 <-- B msg_7
127.0.0.1:4999 --> A msg_8
127.0.0.1:4999 <-- B msg_8
127.0.0.1:4999 --> A msg_9
127.0.0.1:4999 <-- B msg_9
127.0.0.1:4999 --> A msg_10
127.0.0.1:4999 <-- B msg_10

Ovviamente se eseguite tutti e tre i programmi sullo stesso computer non dovete cambiare neanche il Controller IP delle due istanze, lasciatelo a 127.0.0.1
Titolo: Re:Assistenza remota simil Team Viewer
Inserito da: nomorelogic - Novembre 19, 2020, 01:04:57 pm
provato poco fa in locale su win e funziona
in giornata farò altre prove