Пример #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();
        }
Пример #2
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();
        }
Пример #3
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();
     }
 }
Пример #4
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());
            }
        }
Пример #5
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);
        }
Пример #6
0
 public void SetServer(TunnelServer tunnelServer)
 {
     this.tunnelServer = tunnelServer;
 }