Hay varios lugares donde el navegador puede enviar información:
User-AgentEncabezado HTTP Es parte de la especificación HTTP y cada solicitud tiene un https://en.wikipedia.org/wiki/User_agent . Como puede ver, hay un nombre del motor de representación, la versión del navegador y el nombre del sistema operativo. Use la "barra de herramientas del desarrollador" o "firebug" para encontrar la lista de encabezados que envía su navegador: /programming/4423061/view-http-headers-in-google-chrome
JavaScript: hay una Navigatorclase en JavaScript, proporciona el nombre del sistema operativo y el nombre del navegador: http://www.w3schools.com/js/js_window_navigator.asp . Algunos sitios pueden usar JS para detectar esta información y enviarla de vuelta al servidor. Puede usar JS simple para verificaralert(navigator.appName); alert(navigator.platform);
Huellas digitales de la pila TCP / IP: diferentes implementaciones de TCP / IP (WinSock vs Berkley sockets) y diferentes versiones del sistema operativo tienen opciones predeterminadas ligeramente diferentes. Algunos heurísticos podrían usarse para detectar la familia del sistema operativo. Este es un enfoque estilo hacker y se usa muy raramente: https://en.wikipedia.org/wiki/TCP/IP_stack_fingerprinting
El JavaScript moderno también puede informar su posición (como el GPS) a través de la API de geolocalización, pero siempre le pregunta si desea proporcionar esta información al servidor o no: http://www.w3schools.com/html/html5_geolocation.asp
Por cierto, no siempre es posible que el servidor encuentre su IP real. En el caso del proxy, el proxy puede enviar su IP real al servidor (usando X-Real-IPo X-Forwarded-Forencabezados), pero no es necesario. E incluso puede que no tenga IP pública si NAT está configurado en su enrutador. En este caso, el servidor solo conocerá la IP pública de su enrutador y podría haber toda la oficina (varios cientos de personas) bajo una sola IP.