/// <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(); } }
public ServerPort(DestinationPort destinationPort) { __DestinationPort = destinationPort; __IsEnabled = true; }
/// <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); }
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 } }); }
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; }
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); } }