コード例 #1
0
        /// <summary>
        /// Parses the <see cref="NetworkProtocol"/>.
        /// </summary>
        /// <param name="text">Unparsed text.</param>
        /// <returns>The parsed <see cref="NetworkProtocol"/>.</returns>
        private static NetworkProtocol ParseNetworkProtocol(string text)
        {
            string trimmed = text.Trim();

            if ("Any" == trimmed)
            {
                return(new NetworkProtocol
                {
                    Any = true
                });
            }

            int protocolNumber;

            if (!NetworkProtocol.TryGetProtocolNumber(trimmed, out protocolNumber))
            {
                protocolNumber = int.Parse(trimmed);
            }

            return(new NetworkProtocol
            {
                Any = false,
                ProtocolNumber = protocolNumber
            });
        }
コード例 #2
0
        /// <summary>
        /// Creates a boolean expression expressing the conditions under which the given packet
        /// variables match this specific packet.
        /// </summary>
        /// <param name="ctx">The Z3 context.</param>
        /// <param name="packet">The packet variables over which to form an expression.</param>
        /// <returns>A boolean expression.</returns>
        public BoolExpr Matches(Context ctx, WindowsFirewallPacketVariables packet)
        {
            var conjuncts = new List <BoolExpr>();

            if (this.SourceAddress != null)
            {
                conjuncts.Add(ctx.MkEq(packet.SourceAddress, AddressRange.AddressToBitVecExpr(ctx, this.SourceAddress)));
            }

            if (this.SourcePort != null)
            {
                conjuncts.Add(ctx.MkEq(packet.SourcePort, PortRange.PortToBitVecExpr(ctx, (int)this.SourcePort)));
            }

            if (this.DestinationPort != null)
            {
                conjuncts.Add(ctx.MkEq(packet.DestinationPort, PortRange.PortToBitVecExpr(ctx, (int)this.DestinationPort)));
            }

            if (this.Protocol != null)
            {
                conjuncts.Add(ctx.MkEq(packet.Protocol, NetworkProtocol.ProtocolToBitVecExpr(ctx, (int)this.Protocol)));
            }

            return(ctx.MkAnd(conjuncts.ToArray()));
        }
コード例 #3
0
        /// <summary>
        /// Builds a boolean expression over the port variable which is true only if
        /// the protocol variable value, once bound, matches this protocol.
        /// </summary>
        /// <param name="ctx">The Z3 context.</param>
        /// <param name="protocol">The protocol variable to check for match.</param>
        /// <returns>A Z3 boolean expression.</returns>
        public BoolExpr Matches(Context ctx, BitVecExpr protocol)
        {
            if (this.Any)
            {
                return(ctx.MkTrue());
            }

            return(ctx.MkEq(protocol, NetworkProtocol.ProtocolToBitVecExpr(ctx, this.ProtocolNumber)));
        }