Esempio n. 1
0
        static void Main(string[] args)
        {
            byte clientId = 0;
            var  serv     = new TunnelServer(clientId, new IPEndPoint(IPAddress.Loopback, 8899));
            var  client   = new TunnelClient(clientId, Utils.DetectHost(), new IPEndPoint(IPAddress.Loopback, 8888));

            GlobalEventLoop.Instance().EventLoop();
        }
Esempio n. 2
0
        private ConnectionInfo Virtualize(string connectionString, string sshTunnelInfo)
        {
            lock (LockObject)
            {
                if (Clients.ContainsKey(connectionString))
                {
                    return(Clients[connectionString]);
                }

                var url = new MySqlConnectionStringBuilder(connectionString);


                string finalConnectionString = null;
                if (!TunnelClient.GetInstance().ForwardedPortInfoExists(url.Server, Convert.ToUInt32(url.Port)))
                {
                    if (Ping(connectionString))
                    {
                        finalConnectionString = connectionString;
                    }
                }
                if (finalConnectionString == null)
                {
                    var portInfo = TunnelClient.GetInstance()
                                   .GetForwardedPortInfo(
                        new TunnelRequest
                    {
                        RemoteHost    = url.Server,
                        RemotePort    = Convert.ToUInt32(url.Port),
                        SshTunnelInfo = sshTunnelInfo
                    });
                    var alternateBuilder =
                        new MySqlConnectionStringBuilder(connectionString)
                    {
                        Port   = portInfo.BoundPort,
                        Server = portInfo.BoundHost
                    };


                    var newConnectionString = alternateBuilder.ToString();
                    if (Ping(newConnectionString))
                    {
                        finalConnectionString = newConnectionString;
                    }
                    else

                    {
                        throw new Exception("Can't connect to MySQL");
                    }
                }
                var connectionInfo =
                    new ConnectionInfo
                {
                    VirtualizedConnectionString = finalConnectionString
                };
                Clients[connectionString] = connectionInfo;
                return(connectionInfo);
            }
        }
Esempio n. 3
0
        private ConnectionInfo Virtualize(string connectionString, string sshTunnelInfo)
        {
            lock (Mutex)
            {
                if (Clients.ContainsKey(connectionString))
                {
                    return(Clients[connectionString]);
                }

                var          virtualizedConnectionString = connectionString;
                var          url    = MongoUrl.Create(connectionString);
                IMongoClient client = null;
                if (!TunnelClient.GetInstance()
                    .ForwardedPortInfoExists(url.Server.Host, Convert.ToUInt32(url.Server.Port)))
                {
                    client = new MongoClient(connectionString);
                    if (!Ping(client))
                    {
                        client = null;
                    }
                }
                if (client == null)
                {
                    var tunnelRequest = new TunnelRequest
                    {
                        RemoteHost = url.Server.Host,
                        RemotePort = Convert.ToUInt32(url.Server.Port), SshTunnelInfo = sshTunnelInfo
                    };
                    var portInfo            = TunnelClient.GetInstance().GetForwardedPortInfo(tunnelRequest);
                    var newConnectionString = string.Format("mongodb://{2}{3}:{0}/{1}", portInfo.BoundPort,
                                                            url.DatabaseName,
                                                            string.IsNullOrWhiteSpace(url.Username)
                            ? string.Empty
                            : string.Concat(url.Username, ":", url.Password, "@"), portInfo.BoundHost);
                    virtualizedConnectionString = newConnectionString;
                    client = new MongoClient(newConnectionString);
                    if (!Ping(client))
                    {
                        throw new Exception("Can't connect to MongoDb");
                    }
                }
                var connectionInfo =
                    new ConnectionInfo
                {
                    VirtualizedConnectionString = virtualizedConnectionString,
                    Client = client
                };

                Clients[connectionString] = connectionInfo;
                return(connectionInfo);
            }
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            IPAddress remoteAddr = IPAddress.Parse(args[0]);

            byte thisClientId = 1;
            byte thisServerId = 2;

            if (args[1] == "1")
            {
                var temp = thisClientId;
                thisClientId = thisServerId;
                thisServerId = temp;
            }
            var serv   = new TunnelServer(thisServerId, new IPEndPoint(IPAddress.Loopback, 8899));
            var client = new TunnelClient(thisClientId, remoteAddr, new IPEndPoint(IPAddress.Loopback, 8888));

            GlobalEventLoop.Instance().EventLoop();
        }
Esempio n. 5
0
 public void SetState(bool state)
 {
     if (state == currentState)
     {
         return;
     }
     if (state)
     {
         clientConnected = -1;
         tunnelSettings  = new TunnelSettings();
         tunnelSettings.Load("TunnelSettings.txt");
         guiData.statistics = new Statistics();
         udpServer          = new UDPServer(tunnelSettings, guiData.statistics);
         if (tunnelSettings.tunnelServer == "")
         {
             tunnelServer = new TunnelServer(tunnelSettings, udpServer);
         }
         else
         {
             tunnelClient = new TunnelClient(tunnelSettings, udpServer);
         }
         currentState = state;
     }
     else
     {
         currentState = state;
         if (tunnelClient != null)
         {
             tunnelClient.Stop();
             tunnelClient = null;
         }
         tunnelServer = null;
         udpServer.Stop();
         udpServer         = null;
         tunnelSettings    = null;
         guiData.labelText = "Disconnected";
         guiData.iconName  = "gtk-no";
         UpdateGUI();
     }
 }
Esempio n. 6
0
        public new void WritePacket(G2Protocol protocol, G2Frame root, byte name)
        {
            byte[] payload = new byte[PAYLOAD_SIZE];

            BitConverter.GetBytes(UserID).CopyTo(payload, 0);
            BitConverter.GetBytes(ClientID).CopyTo(payload, 8);
            BitConverter.GetBytes(UdpPort).CopyTo(payload, 10);
            BitConverter.GetBytes(TcpPort).CopyTo(payload, 12);

            G2Frame address = protocol.WritePacket(root, name, payload);

            protocol.WritePacket(address, Packet_IP, IP.GetAddressBytes());

            if (TunnelServer != null)
            {
                TunnelServer.WritePacket(protocol, address, Packet_Server);
            }

            if (TunnelClient != null)
            {
                protocol.WritePacket(address, Packet_Client, TunnelClient.ToBytes());
            }
        }
Esempio n. 7
0
        static int Main(string[] args)
        {
            Settings settings = new Settings();

            settings.isServer      = false;
            settings.ipEndpointStr = "minecraft1.52k.de:25560";
            settings.listenPort    = 0;

            int serverCount = 0;

            foreach (string arg in args)
            {
                if (serverCount == 2)
                {
                    settings.ipEndpointStr = arg;
                }
                if (serverCount == 1)
                {
                    settings.listenPort = Int32.Parse(arg);
                }
                if (serverCount > 0)
                {
                    serverCount--;
                    continue;
                }
                if (arg == "--server")
                {
                    settings.isServer = true;
                    serverCount       = 2;
                }
                if (arg == "--ipv6")
                {
                    settings.ipv4only = false;
                    settings.ipv6only = true;
                }
                if (arg == "--ipv4")
                {
                    settings.ipv4only = true;
                    settings.ipv6only = false;
                }
            }

            //ParseIPEndpoint
            string addPart = settings.ipEndpointStr.Substring(0, settings.ipEndpointStr.LastIndexOf(":"));

            //Trim [] parts;
            if (addPart.Contains("["))
            {
                addPart.Substring(1, addPart.Length - 2);
            }
            if (!IPAddress.TryParse(addPart, out IPAddress ipAddr))
            {
                IPAddress[] addrs = null;
                try
                {
                    addrs = Dns.GetHostAddresses(addPart);
                }
                catch (Exception e)
                {
                    Console.WriteLine("DNS error: " + e.Message);
                    return(-1);
                }
                foreach (IPAddress testIP in addrs)
                {
                    if (!settings.ipv4only && !settings.ipv6only)
                    {
                        ipAddr = testIP;
                        break;
                    }
                    if (settings.ipv4only && testIP.AddressFamily == AddressFamily.InterNetwork)
                    {
                        ipAddr = testIP;
                        break;
                    }
                    if (settings.ipv6only && testIP.AddressFamily == AddressFamily.InterNetworkV6)
                    {
                        ipAddr = testIP;
                        break;
                    }
                }
            }

            if (ipAddr == null)
            {
                Console.WriteLine("DNS returned no usable results");
                return(-2);
            }

            string portPart = settings.ipEndpointStr.Substring(settings.ipEndpointStr.LastIndexOf(":") + 1);

            settings.ipEndpoint = new IPEndPoint(ipAddr, Int32.Parse(portPart));

            if (settings.listenPort == 0)
            {
                settings.listenPort = Int32.Parse(portPart);
            }

            //Init
            running = true;
            NetworkHandler networkHandler = new NetworkHandler();
            UDPTunnel      udpt           = new UDPTunnel(networkHandler, settings);

            if (settings.isServer)
            {
                TunnelServer ts = new TunnelServer(networkHandler, settings);
                Console.WriteLine("Press Ctrl+C key to quit");
                Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) =>
                {
                    running = false;
                    ts.Shutdown();
                    udpt.Shutdown();
                };
                DisplayMain(networkHandler);
            }
            else
            {
                TunnelClient tc = new TunnelClient(networkHandler, settings);
                Console.WriteLine("Press Ctrl+C to quit");
                Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) =>
                {
                    running = false;
                    tc.Shutdown();
                    udpt.Shutdown();
                };
                DisplayMain(networkHandler);
            }
            return(0);
        }
Esempio n. 8
0
 public void SetClient(TunnelClient tunnelClient)
 {
     this.tunnelClient = tunnelClient;
 }
Esempio n. 9
0
 public void Start()
 {
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetHeightRequest(new Empty());
             var resp    = ServerClient.GetHeight(request);
             TunnelClient.TunnelGetHeightResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSetHeightRequest(new Empty());
             var resp    = ServerClient.SetHeight(request);
             TunnelClient.TunnelSetHeightResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetLeftRequest(new Empty());
             var resp    = ServerClient.GetLeft(request);
             TunnelClient.TunnelGetLeftResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSetLeftRequest(new Empty());
             var resp    = ServerClient.SetLeft(request);
             TunnelClient.TunnelSetLeftResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetLocationRequest(new Empty());
             var resp    = ServerClient.GetLocation(request);
             TunnelClient.TunnelGetLocationResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSetLocationRequest(new Empty());
             var resp    = ServerClient.SetLocation(request);
             TunnelClient.TunnelSetLocationResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetMonitorsRequest(new Empty());
             var resp    = ServerClient.GetMonitors(request);
             TunnelClient.TunnelGetMonitorsResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetResizableRequest(new Empty());
             var resp    = ServerClient.GetResizable(request);
             TunnelClient.TunnelGetResizableResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSetResizableRequest(new Empty());
             var resp    = ServerClient.SetResizable(request);
             TunnelClient.TunnelSetResizableResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetScreenDpiRequest(new Empty());
             var resp    = ServerClient.GetScreenDpi(request);
             TunnelClient.TunnelGetScreenDpiResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSendMessageRequest(new Empty());
             var resp    = ServerClient.SendMessage(request);
             TunnelClient.TunnelSendMessageResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSetIconFileRequest(new Empty());
             var resp    = ServerClient.SetIconFile(request);
             TunnelClient.TunnelSetIconFileResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelShowRequest(new Empty());
             var resp    = ServerClient.Show(request);
             TunnelClient.TunnelShowResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelShowMessageRequest(new Empty());
             var resp    = ServerClient.ShowMessage(request);
             TunnelClient.TunnelShowMessageResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetSizeRequest(new Empty());
             var resp    = ServerClient.GetSize(request);
             TunnelClient.TunnelGetSizeResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSetSizeRequest(new Empty());
             var resp    = ServerClient.SetSize(request);
             TunnelClient.TunnelSetSizeResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetTitleRequest(new Empty());
             var resp    = ServerClient.GetTitle(request);
             TunnelClient.TunnelGetTitleResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSetTitleRequest(new Empty());
             var resp    = ServerClient.SetTitle(request);
             TunnelClient.TunnelSetTitleResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetTopRequest(new Empty());
             var resp    = ServerClient.GetTop(request);
             TunnelClient.TunnelGetTopResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSetTopRequest(new Empty());
             var resp    = ServerClient.SetTop(request);
             TunnelClient.TunnelSetTopResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetTopmostRequest(new Empty());
             var resp    = ServerClient.GetTopmost(request);
             TunnelClient.TunnelGetTopmostResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSetTopmostRequest(new Empty());
             var resp    = ServerClient.SetTopmost(request);
             TunnelClient.TunnelSetTopmostResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelNavigateToLocalFileRequest(new Empty());
             var resp    = ServerClient.NavigateToLocalFile(request);
             TunnelClient.TunnelNavigateToLocalFileResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelNavigateToStringRequest(new Empty());
             var resp    = ServerClient.NavigateToString(request);
             TunnelClient.TunnelNavigateToStringResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelNavigateToUrlRequest(new Empty());
             var resp    = ServerClient.NavigateToUrl(request);
             TunnelClient.TunnelNavigateToUrlResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelWaitForExitRequest(new Empty());
             var resp    = ServerClient.WaitForExit(request);
             TunnelClient.TunnelWaitForExitResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelGetWidthRequest(new Empty());
             var resp    = ServerClient.GetWidth(request);
             TunnelClient.TunnelGetWidthResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request = TunnelClient.TunnelSetWidthRequest(new Empty());
             var resp    = ServerClient.SetWidth(request);
             TunnelClient.TunnelSetWidthResponse(resp);
         }
     });
     Task.Run(() =>
     {
         while (true)
         {
             var request    = TunnelClient.TunnelCreateWebWindowRequest(new Empty());
             var respStream = ServerClient.CreateWebWindow(request);
             Task.Run(async() =>
             {
                 await foreach (var resp in respStream.ResponseStream.ReadAllAsync())
                 {
                     TunnelClient.TunnelCreateWebWindowResponse(resp);
                 }
             });
         }
     });
     Task.Run(async() =>
     {
         while (true)
         {
             var respStream = ServerClient.FileReader();
             var task       = Task.Run(() =>
             {
                 while (true)
                 {
                     var request = TunnelClient.TunnelFileReaderRequest(new Empty());
                     respStream.RequestStream.WriteAsync(request);
                 }
             });
             await foreach (var resp in respStream.ResponseStream.ReadAllAsync())
             {
                 TunnelClient.TunnelFileReaderResponse(resp);
             }
         }
     });
 }