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 service 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 services identified by reading, decoding, and
analyzing packets. Network configuration policy is enforced on operating
systems and services identified by reading, decoding, and analyzing
packets.