Is it possible to add a P2P model?
It can take up very little of the server's network. Will the development team join this model in the future?
Point to point! Isn't UltraVNC P2P, we don't use a third connection server viewer and server connect direct.
Open source libp2p library lets two apps connect securely using publicly hosted bootstrap servers. Instead of using a server IP, a client can just use the server’s peer certificate ID to connect. I was thinking of porting the UltraVNC viewer/server to support this—basically, letting it use a secure peer ID instead of an IP to connect to the server. I’ve already done something similar with a fork of RustDesk, so I know it works. Here is the MR: https://gitlab.com/d.vasant/hoptodesk/-/merge_requests/1 The same thing could be done for UltraVNC using the C++ libp2p library. It can make the UVNC reachable over internet without maintaining any servers.
What do you think?
Are the connect servers public available ? I guess the internal it's converted to udp for hole punching, does it have it's own encryption, stream compression.
I made something simular using reliable udp but the biggest issue's was to keep the servers online (2) and the internal converts from tcp to udp that had some performace penanty.
Looks i nice addon
https://docs.ipfs.tech/how-to/modify-bootstrap-list/ These are the publicly available bootstrap servers used to build decentralized apps. Even though the libp2p transport uses UDP, it builds a reliable stream over it using QUIC protocol. These servers going to stay for long as they are backbone for Ethereum, IPFS, Filecoin and others. I will work on the port using C++ libp2p and update.
@dvasanth: Can you look to add in UltraVNC?
Yes working on it.. Libp2p C++ doesn't have the full spec implementation with hole punching. So trying to use the rust version of libp2p.
@RudiDeVos I tried to integrate the C++ version of libp2p but it doesn't have the latest Libp2p relay and DCUtR(UDP hole punching) protocol support. So built a libp2p rust library with Stream channel between two peers and consumed it in winvnc server/client. Here is the change to consume the libp2p connection in winvnc: https://github.com/dvasanth/UltraVNC/commit/6cfb64e57fa8172d9028ffda270f20153b3bb686 This change requires the port forwarding library(kadugu_net.dll) built using libp2p stream channel here: https://github.com/dvasanth/kadugu-net/releases/download/v0.1.0/kadugu-net-windows-latest.zip You can evaluate the performance. At start it might be slower since it uses the relay, once the connection is upgraded to QUIC channel with UDP hole punching it should be faster. Use the peer id logged in the server to connect from the client. Each time the peer id is uniquely generated to be secure.
Looks interesting, gonna test it
@dvasanth: Nice!
Maybe good to replace "127.0.0.1" by "localhost"?
Note: About "hoptodesk", it is possible to add a mirror on GitHub?
127.0.0.1 is ok, this avoid a dns lookup and the risk that some lmhost file overwrite it If ipv6 is required localhost should be used so it reffer to ::1 or 127.0.0.1
Ah yes, good catch @RudiDeVos! @dvasanth please do not forget IPv6 support too.
@RudiDeVos I believe there is plugin interface to extend encryption in the vnc data path. If there is interface to override the connection mechanism, then this can added as a supported plugin. Are you able to test it? any plans to integrate it?
@dvasanth: Have you looked for IPv6?
Tunnel can be established over ipv6 if available, can support UDP hole punching if needed. Here is the associated code for it: https://github.com/dvasanth/kadugu-net/blob/e472395f8240f589a26a94e1f0e6155a050a0594/src/port_forwarding_server.rs#L137
@dvasanth: Here there is only 127.0.0.1 (IPv4):
- https://github.com/ultravnc/UltraVNC/compare/main...dvasanth:UltraVNC:main
"c:..." can be changed to have not?
Had a week off, back now. I tried to install it 2 weeks ago, but the exe was removed by MS defender. (kadugu-net-windows-latest.zip) So i wanted to compile the .net part myself
I wanted to compile the lib on Visual studio c++, doesn't seems to work out of the box. Current testing with https://github.com/DEgITx/librats who seems to build out of the box on VS2019, anybody experience with that library.
@dvasanth: Have you looked @RudiDeVos comments?
You can also use the librats. Looks straightforward for compilation and they have precompiled library to test it. For librats, you can use the lib in server side for publishing the peer in dht and in client side discover the id to send/receive message to the server directly.
-Done: seperated bridge exe for testing as proof of concept Listen to viewer and connect to server using loopback based on passing a connection number (123 1234 123 12) -Work in progress: Making a transportFactory that can switch between TCP and something else. Then a natlib could be integrated or loaded via a plugin. Current TCP need to work first after creating the transportFactory and refactor the current rcv/send etc ...
P2P added to test version
Finalizing..... link fllow
download available for testing https://uvnc.eu.download/1700