A packet transmitted on a network is read and decoded. A network device
and its operating system are identified by analyzing the decoded packet.
If more than one operating system is identified from the decoded packet,
the operating system is selecting by comparing confidence values assigned
to the operating systems identified. A client application running on the
network device is identified from the decoded packet or subsequent
packets that are read, decoded and analyzed. The network topology of a
network is determined by reading, decoding, and analyzing a plurality of
packets. A flow between two network devices is determined by reading,
decoding, and analyzing a plurality of packets. Vulnerabilities are
assigned to operating systems and client applications identified by
reading, decoding, and analyzing packets. Network configuration policy is
enforced on operating systems and client applications identified by
reading, decoding, and analyzing packets.