public void Connect(VpnChannel channel)
        {
            try
            {
                var b = goTestFunction(1);

                //var vpnCustomPromptTextInput = new VpnCustomPromptTextInput() { DisplayName = "Give me some input" };
                ////this call is NOT asynchronous. awaiting the result will halt the program
                //channel.RequestCustomPromptAsync(new IVpnCustomPromptElement[]
                //{
                //    new VpnCustomPromptText() {DisplayName = "This is a test", Text = "Message"},
                //    vpnCustomPromptTextInput
                //});
                //var inputWas = vpnCustomPromptTextInput.Text;


                var transport = new DatagramSocket();
                transport.MessageReceived += Transport_MessageReceived;
                //var streamSocket = new StreamSocket();
                channel.AssociateTransport(transport, null);
                //channel.LogDiagnosticMessage("this is from the wireguard plugin");// supposedly under Event Viewer, under Application and Services Logs\Microsoft\Windows\Vpn Plugin Platform. but can't find
                //transport.BindServiceNameAsync("50000").AsTask().Wait();
                //transport.BindEndpointAsync(new HostName("192.168.1.100"), "50000").AsTask().Wait();
                transport.ConnectAsync(new HostName(channel.Configuration.ServerUris[0].Scheme),
                                       channel.Configuration.ServerUris[0].LocalPath).AsTask().Wait();

                var vpnRouteAssignment = new VpnRouteAssignment {
                    ExcludeLocalSubnets = false
                };
                vpnRouteAssignment.Ipv4InclusionRoutes.Add(new VpnRoute(new HostName("10.189.129.1"), 32));

                channel.StartExistingTransports(
                    new[] { new HostName("10.189.129.2"), //this is our network interface address
                    },
                    null,
                    null,
                    vpnRouteAssignment,
                    null,
                    VPN_MTU,
                    VPN_MAX_FRAME,
                    false
                    );
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
示例#2
0
        internal void ConfigureAndConnect(VpnChannel vpnChannel, string parameters)
        {
            parameters = parameters.TrimEnd();
            uint mtuSize = 68;
            var  assignedClientIPv4list                = new List <HostName>();
            var  dnsServerList                         = new List <HostName>();
            VpnRouteAssignment      assignedRoutes     = new VpnRouteAssignment();
            VpnDomainNameAssignment assignedDomainName = new VpnDomainNameAssignment();
            var ipv4InclusionRoutes                    = assignedRoutes.Ipv4InclusionRoutes;

            foreach (var parameter in parameters.Split(null))
            {
                var fields = parameter.Split(",");
                switch (fields[0])
                {
                case "m":
                    mtuSize = uint.Parse(fields[1]);
                    break;

                case "a":
                    assignedClientIPv4list.Add(new HostName(fields[1]));
                    break;

                case "r":
                    ipv4InclusionRoutes.Add(new VpnRoute(new HostName(fields[1]), (byte)(int.Parse(fields[2]))));
                    break;

                case "d":
                    dnsServerList.Add(new HostName(fields[1]));
                    break;

                default:
                    break;
                }
            }

            assignedRoutes.Ipv4InclusionRoutes = ipv4InclusionRoutes;
            assignedDomainName.DomainNameList.Add(new VpnDomainNameInfo(".", VpnDomainNameType.Suffix, dnsServerList, null));

            try
            {
                vpnChannel.StartExistingTransports(assignedClientIPv4list, null, null, assignedRoutes, assignedDomainName, mtuSize, ushort.MaxValue, false);
            }
            catch (Exception e)
            {
                vpnChannel.TerminateConnection(e.Message);
            }
        }
示例#3
0
        private string user         = "******";      // expected username for the VPN credentials

        public void Connect(VpnChannel channel)
        {
            Debug.WriteLine("VPNDEMO: Entering plugin Connect");

            try
            {
                var prompt = new VpnCustomPromptTextInput
                {
                    Compulsory   = true,
                    DisplayName  = "Username",
                    Emphasized   = false,
                    IsTextHidden = false,
                };

                var promptList = new[] { prompt };

                // Prompt user for credential info
                _ = channel.RequestCustomPromptAsync(promptList);

                if (prompt.Text.Equals(user))
                {
                    Debug.WriteLine("VPNDEMO: user verified with success");

                    socket?.Dispose();
                    socket = new StreamSocket();

                    channel.AssociateTransport(this.socket, null);

                    Debug.WriteLine("VPNDEMO: calling ConnectAsync");
                    this.socket.ConnectAsync(new HostName("www.microsoft.com"), "443", SocketProtectionLevel.Tls12).AsTask().GetAwaiter().GetResult();

                    Debug.WriteLine("VPNDEMO: ConnectAsync returned");

                    var myRoute = new VpnRouteAssignment();
                    myRoute.Ipv4InclusionRoutes.Add(new VpnRoute(new HostName("192.168.80.0"), 24));

                    var myAddress = new List <HostName>
                    {
                        new HostName("192.168.80.100")
                    };

                    Debug.WriteLine("VPNDEMO: Calling channel.StartExistingTransports()");

                    channel.StartExistingTransports(myAddress,
                                                    null,
                                                    null,
                                                    myRoute,
                                                    new VpnDomainNameAssignment(),
                                                    1472,
                                                    1500,
                                                    false);

                    Debug.WriteLine("VPNDEMO: Connected");
                }
                else
                {
                    Debug.WriteLine("VPNDEMO: user verification failed");
                    channel.TerminateConnection("Failed credentials");
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine("VPNDEMO: EXCEPTION in plugin connect: " + e.ToString());

                //throw;
            }
        }