The classic approach is to use useragent to define the browser and OS
It looks like the site will display it for you.
As for plugins, there are various javascript testing methods for the plugins you are looking for.
You should test them on the client side, as far as I know, they were not detected on the server side.
The following rough example shows how to test the acrobat scanner in IE and Mozilla and returns if it was installed, and if so, which version is in the object.
function TestAcro() { var acrobat=new Object(); acrobat.installed=false; acrobat.version='0.0'; if (navigator.plugins && navigator.plugins.length) { for ( var x = 0, l = navigator.plugins.length; x < l; ++x ) { //Note: Adobe changed the name of Acrobat to Adobe Reader if ((navigator.plugins[x].name.indexOf('Acrobat') != -1) | (navigator.plugins[x].description.indexOf('Acrobat') != -1) | (navigator.plugins[x].name.indexOf('Adobe Reader') != -1) |(navigator.plugins[x].description.indexOf('Adobe Reader') != -1)) { acrobat.version=parseFloat(navigator.plugins[x].description.split('Version ')[1]); if (acrobat.version.toString().length == 1) acrobat.version+='.0'; acrobat.installed=true; break; } } } else if (window.ActiveXObject) { for (x=2; x<10; x++) { try { oAcro=eval("new ActiveXObject('PDF.pdfCtrl."+x+"');"); if (oAcro) { acrobat.installed=true; acrobat.version=x+'.0'; } } catch(e) {} } try { oAcro4=new ActiveXObject('PDF.pdfCtrl.1'); if (oAcro4) { acrobat.installed=true; acrobat.version='4.0'; } } catch(e) {} try { oAcro7=new ActiveXObject('AcroPDF.PDF.1'); if (oAcro7) { acrobat.installed=true; acrobat.version='7.0'; } } catch(e){} } return acrobat; }
source share