Exemplo n.º 1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="bas">
        /// A <see cref="ByteArraySegment"/>
        /// </param>
        public UdpPacket(ByteArraySegment bas)
        {
            log.DebugFormat("bas {0}", bas.ToString());

            // set the header field, header field values are retrieved from this byte array
            header        = new ByteArraySegment(bas);
            header.Length = UdpFields.HeaderLength;

            payloadPacketOrData = new PacketOrByteArraySegment();

            // is this packet going to port 7 or 9? if so it might be a WakeOnLan packet
            const int wakeOnLanPort0 = 7;
            const int wakeOnLanPort1 = 9;

            if (DestinationPort.Equals(wakeOnLanPort0) || DestinationPort.Equals(wakeOnLanPort1))
            {
                payloadPacketOrData.ThePacket = new WakeOnLanPacket(header.EncapsulatedBytes());
            }
            else
            {
                // store the payload bytes
                payloadPacketOrData.TheByteArraySegment = header.EncapsulatedBytes();
            }
        }
Exemplo n.º 2
0
 public ServerPort(DestinationPort destinationPort)
 {
     __DestinationPort = destinationPort;
     __IsEnabled       = true;
 }
Exemplo n.º 3
0
        /// <summary cref="Packet.ToString(StringOutputType)" />
        public override string ToString(StringOutputType outputFormat)
        {
            var    buffer      = new StringBuilder();
            string color       = "";
            string colorEscape = "";

            if (outputFormat == StringOutputType.Colored || outputFormat == StringOutputType.VerboseColored)
            {
                color       = Color;
                colorEscape = AnsiEscapeSequences.Reset;
            }

            if (outputFormat == StringOutputType.Normal || outputFormat == StringOutputType.Colored)
            {
                // build flagstring
                string flags = "{";
                if (Urg)
                {
                    flags += "urg[0x" + System.Convert.ToString(UrgentPointer, 16) + "]|";
                }
                if (Ack)
                {
                    flags += "ack[" + AcknowledgmentNumber + " (0x" + System.Convert.ToString(AcknowledgmentNumber, 16) + ")]|";
                }
                if (Psh)
                {
                    flags += "psh|";
                }
                if (Rst)
                {
                    flags += "rst|";
                }
                if (Syn)
                {
                    flags += "syn[0x" + System.Convert.ToString(SequenceNumber, 16) + "," + SequenceNumber + "]|";
                }
                flags  = flags.TrimEnd('|');
                flags += "}";

                // build the output string
                buffer.AppendFormat("{0}[TCPPacket: SourcePort={2}, DestinationPort={3}, Flags={4}]{1}",
                                    color,
                                    colorEscape,
                                    SourcePort,
                                    DestinationPort,
                                    flags);
            }

            if (outputFormat == StringOutputType.Verbose || outputFormat == StringOutputType.VerboseColored)
            {
                // collect the properties and their value
                Dictionary <string, string> properties = new Dictionary <string, string>();
                properties.Add("source port", SourcePort.ToString());
                properties.Add("destination port", DestinationPort.ToString());
                properties.Add("sequence number", SequenceNumber.ToString() + " (0x" + SequenceNumber.ToString("x") + ")");
                properties.Add("acknowledgement number", AcknowledgmentNumber.ToString() + " (0x" + AcknowledgmentNumber.ToString("x") + ")");
                // TODO: Implement a HeaderLength property for TCPPacket
                //properties.Add("header length", HeaderLength.ToString());
                properties.Add("flags", "(0x" + AllFlags.ToString("x") + ")");
                string flags = Convert.ToString(AllFlags, 2).PadLeft(8, '0');
                properties.Add("", flags[0] + "... .... = [" + flags[0] + "] congestion window reduced");
                properties.Add(" ", "." + flags[1] + ".. .... = [" + flags[1] + "] ECN - echo");
                properties.Add("  ", ".." + flags[2] + ". .... = [" + flags[2] + "] urgent");
                properties.Add("   ", "..." + flags[3] + " .... = [" + flags[3] + "] acknowledgement");
                properties.Add("    ", ".... " + flags[4] + "... = [" + flags[4] + "] push");
                properties.Add("     ", ".... ." + flags[5] + ".. = [" + flags[5] + "] reset");
                properties.Add("      ", ".... .." + flags[6] + ". = [" + flags[6] + "] syn");
                properties.Add("       ", ".... ..." + flags[7] + " = [" + flags[7] + "] fin");
                properties.Add("window size", WindowSize.ToString());
                properties.Add("checksum", "0x" + Checksum.ToString() + " [" + (ValidChecksum ? "valid" : "invalid") + "]");
                properties.Add("options", "0x" + BitConverter.ToString(Options).Replace("-", "").PadLeft(12, '0'));
                var parsedOptions = OptionsCollection;
                if (parsedOptions != null)
                {
                    for (int i = 0; i < parsedOptions.Count; i++)
                    {
                        properties.Add("option" + (i + 1).ToString(), parsedOptions[i].ToString());
                    }
                }

                // calculate the padding needed to right-justify the property names
                int padLength = Utils.RandomUtils.LongestStringLength(new List <string>(properties.Keys));

                // build the output string
                buffer.AppendLine("TCP:  ******* TCP - \"Transmission Control Protocol\" - offset=? length=" + TotalPacketLength);
                buffer.AppendLine("TCP:");
                foreach (var property in properties)
                {
                    if (property.Key.Trim() != "")
                    {
                        buffer.AppendLine("TCP: " + property.Key.PadLeft(padLength) + " = " + property.Value);
                    }
                    else
                    {
                        buffer.AppendLine("TCP: " + property.Key.PadLeft(padLength) + "   " + property.Value);
                    }
                }
                buffer.AppendLine("TCP:");
            }

            // append the base class output
            buffer.Append(base.ToString(outputFormat));

            return(buffer.ToString());
        }
        public override void Execute()
        {
            base.Execute();

            // Add some validation based on the type of RuleCollection (SNAT will be supported later)
            // if (MNM.AzureFirewallNatRCActionType.Dnat.Equals(ActionType))
            {
                // One of SourceAddress or SourceIpGroup must be present
                if ((SourceAddress == null) && (SourceIpGroup == null))
                {
                    throw new ArgumentException("Either SourceAddress or SourceIpGroup is required.");
                }

                if (DestinationAddress.Length != 1)
                {
                    throw new ArgumentException("Only one destination address is accepted.", nameof(DestinationAddress));
                }

                if (DestinationPort.Length != 1)
                {
                    throw new ArgumentException("Only one destination port is accepted.", nameof(DestinationPort));
                }

                ValidateIsSingleIpNotRange(DestinationAddress.Single());
                if (TranslatedAddress != null)
                {
                    ValidateIsSingleIpNotRange(TranslatedAddress);
                }
                if (TranslatedFqdn != null)
                {
                    ValidateIsFqdn(TranslatedFqdn);
                }

                // Only one of TranslatedAddress or TranslatedFqdn is allowed
                if ((TranslatedAddress != null) && (TranslatedFqdn != null))
                {
                    throw new ArgumentException("Both TranslatedAddress and TranslatedFqdn not allowed");
                }

                // One of TranslatedAddress or TranslatedFqdn must be present
                if ((TranslatedAddress == null) && (TranslatedFqdn == null))
                {
                    throw new ArgumentException("Either TranslatedAddress or TranslatedFqdn is required");
                }

                ValidateIsSinglePortNotRange(DestinationPort.Single());
                ValidateIsSinglePortNotRange(TranslatedPort);
            }

            var natRule = new PSAzureFirewallNatRule
            {
                Name                 = this.Name,
                Description          = this.Description,
                Protocols            = this.Protocol?.ToList(),
                SourceAddresses      = this.SourceAddress?.ToList(),
                SourceIpGroups       = this.SourceIpGroup?.ToList(),
                DestinationAddresses = this.DestinationAddress?.ToList(),
                DestinationPorts     = this.DestinationPort?.ToList(),
                TranslatedAddress    = this.TranslatedAddress,
                TranslatedFqdn       = this.TranslatedFqdn,
                TranslatedPort       = this.TranslatedPort
            };

            WriteObject(natRule);
        }
Exemplo n.º 5
0
        public void ConnectOpenVPN(OpenVPNVpnServer vpnServer, string multihopExitSrvId, DestinationPort port, IPAddress manualDns, string proxyType = "none", string proxyAddress = null, int proxyPort = 0, string proxyUsername = null, string proxyPassword = null)
        {
            Logging.Info($"[OpenVPN] Connect: {vpnServer}:{port} (proxy: {proxyType}: {proxyAddress})");

            SendRequest(new Requests.Connect
            {
                VpnType           = VpnType.OpenVPN,
                CurrentDNS        = manualDns.ToString(),
                OpenVpnParameters = new OpenVPNConnectionParameters()
                {
                    EntryVpnServer    = vpnServer,
                    MultihopExitSrvID = multihopExitSrvId,
                    Port          = port,
                    ProxyType     = proxyType,
                    ProxyAddress  = proxyAddress,
                    ProxyPort     = proxyPort,
                    ProxyUsername = proxyUsername,
                    ProxyPassword = proxyPassword
                }
            });
        }
Exemplo n.º 6
0
 public ConnectionTarget(ServerLocation server, string openVpnMultihopExitSrvId, DestinationPort port, List <DestinationPort> portsToReconnect, IPAddress currentManualDns, ProxyOptions proxyOptions)
     : this(server, openVpnMultihopExitSrvId, port, portsToReconnect, currentManualDns)
 {
     // TODO: necessary to think how to divide implementation for OpenVPN and Wireguard
     OpenVpnProxyOptions = proxyOptions;
 }
Exemplo n.º 7
0
        private ConnectionTarget(ServerLocation server, string openVpnMultihopExitSrvId, DestinationPort port, List <DestinationPort> portsToReconnect, IPAddress currentManualDns)
        {
            Server = server;
            OpenVpnMultihopExitSrvId = openVpnMultihopExitSrvId;
            Port             = port;
            CurrentManualDns = currentManualDns;

            if (portsToReconnect != null && portsToReconnect.Count > 0)
            {
                if (!portsToReconnect.Contains(port))
                {
                    throw new ArgumentOutOfRangeException(nameof(portsToReconnect), "Preffered ports list does not caontain Port which is defined as first");
                }

                PortsToReconnect.AddRange(portsToReconnect);
            }
        }