На стороне клиента вы можете использовать Javascript, чтобы попытаться обнаружить его:
// This script sets OSName variable as follows:
// "Windows" for all versions of Windows
// "MacOS" for all versions of Macintosh OS
// "Linux" for all versions of Linux
// "UNIX" for all other UNIX flavors
// "Unknown OS" indicates failure to detect the OS
var OSName="Unknown OS";
if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";
document.write('Your OS: '+OSName);
Источник отсюда . Однако методы Javascript ненадежны по своей природе. На стороне сервера вы можете просмотреть некоторые заголовки HTTP на выбранном вами языке, однако они также могут быть созданы и ненадежны.
Короче говоря, нет 100% надежного метода.