An attacker engages in fingerprinting activity to determine the type or version of the operating system of the remote target. Any platform, device, or server that communicates over the network will conform to one or more protocols, commonly TCP/IP and related protocols. Fingerprinting remote operating systems involves taking an "active" or a "passive" approach. Active approaches to fingerprinting involve sending data packets that break the logical or semantic rules of a protocol and observing operating system response to artificial inputs. Passive approaches involve listening to the communication of one or more nodes and identifying the operating system or firmware of the devices involved based on the structure of their messages.