Based on network traffic between hosts, it is possible to predict what OS is running on a system. Every operating system has its own unique way to implement TCP/IP stack. A very simple but effective passive method is to inspect the initial time-to-live (TTL) in the IP header:
![](assets/3d6f8bc2-f387-46ce-af32-72d7ce230085.png)
I am on a Windows 10 machine and tried the ICMP ping to host 4.2.2.2. In the Wireshark capture attached below, you can see that the Windows 10 initial TTL value is 128:
![](assets/e9232971-03d4-46b4-93aa-986ef08b7c4b.png)
I expended the first packet from Wireshark, which confirms TTL 128:
![](assets/18e2d4cb-6a32-4a55-b110-0ed7e0a3588a.png)
Let's try to expend the return packet, allowing us to see that the TTL value is 59:
![](assets/fc1e8f30-44a7-4924-bda8-63072b560dcc.png)
You can now take match results with Nmap remote OS detection. There is a 90% chance that this system will be running a Linux operating system. This should match our reference table. The linux TTL value 64 and value 59 means that this host is five hops away from me.