1. A method for filtering packets, wherein a flow corresponds to a stream of packets for a particular communication session, comprising: identifying a protocol used to transmit a packet; identifying the flow to which the packet belongs; determining that a rules table exists for the protocol; determining that a state table includes a matching flow entry corresponding to the flow; determining whether a skip count is reached, wherein the skip count indicates a flow to examine after skipping a number of flows; examining the flow when the skip count has been reached; resetting the skip count when the flow is examined; skipping and not examining the flow when the skip count has not been reached; and incrementing the skip count when the flow is skipped; determining whether the flow will transition from a current state indicated in the matching flow entry to a valid destination state indicated in a state-transition rule in the rules table; and discarding the packet if the state of the flow will not transition to the valid destination state.