PageRenderTime 39ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/resources/netgeek.js/master/osdetect.js

https://github.com/lian/javascript-bundle
JavaScript | 164 lines | 129 code | 9 blank | 26 comment | 81 complexity | 2a150e06d42ab93ec70db818ab69f2e2 MD5 | raw file
  1. /**
  2. * This can reliably detect browser versions for IE and Firefox even in the
  3. * presence of a spoofed User-Agent. OS detection is more fragile and
  4. * requires truthful navigator.appVersion and navigator.userAgent strings in
  5. * order to be accurate for more than just IE on Windows.
  6. * SOURCE: metasploit.com => msf3/lib/rex/exploitation/javascriptosdetect.rb
  7. **/
  8. if (!netgeek) { var netgeek = {} }
  9. netgeek.osdetect = function() {
  10. //Default values:
  11. var arch;
  12. var os_name;
  13. var os_flavor;
  14. var os_sp;
  15. var os_lang;
  16. var browser_name;
  17. var browser_version;
  18. var useragent = navigator.userAgent;
  19. var version = "";
  20. version = useragent;
  21. // Firefox's appVersion on windows doesn't tell us the flavor, so use
  22. // userAgent all the time. If userAgent is spoofed, appVersion will lie
  23. // also, so we don't lose anything by doing it this way.
  24. if (version.indexOf("Windows 95") != -1) { os_name = "Windows"; os_flavor = "95"; }
  25. else if (version.indexOf("Windows NT 4") != -1) { os_name = "Windows"; os_flavor = "NT"; }
  26. else if (version.indexOf("Win 9x 4.9") != -1) { os_name = "Windows"; os_flavor = "ME"; }
  27. else if (version.indexOf("Windows 98") != -1) { os_name = "Windows"; os_flavor = "98"; }
  28. else if (version.indexOf("Windows NT 5.0") != -1) { os_name = "Windows"; os_flavor = "2000"; }
  29. else if (version.indexOf("Windows NT 5.1") != -1) { os_name = "Windows"; os_flavor = "XP"; }
  30. else if (version.indexOf("Windows NT 5.2") != -1) { os_name = "Windows"; os_flavor = "2003"; }
  31. else if (version.indexOf("Windows NT 6.0") != -1) { os_name = "Windows"; os_flavor = "Vista"; }
  32. else if (version.indexOf("Windows") != -1) { os_name = "Windows"; }
  33. else if (version.indexOf("Mac") != -1) { os_name = "Mac OSX"; }
  34. else if (version.indexOf("Linux") != -1) { os_name = "Linux"; }
  35. if (os_name == "Linux") {
  36. if (useragent.indexOf("Gentoo") != -1) { os_flavor = "Gentoo"; }
  37. else if (useragent.indexOf("Ubuntu") != -1) { os_flavor = "Ubuntu"; }
  38. else if (useragent.indexOf("Debian") != -1) { os_flavor = "Debian"; }
  39. else if (useragent.indexOf("RHEL") != -1) { os_flavor = "RHEL"; }
  40. else if (useragent.indexOf("CentOS") != -1) { os_flavor = "CentOS"; }
  41. }
  42. if (window.getComputedStyle) {
  43. // Then this is a gecko derivative, assume firefox since that's the
  44. // only one we have sploits for. We may need to revisit this in the
  45. // future.
  46. browser_name = "Firefox";
  47. if (document.getElementsByClassName) {
  48. browser_version = "3.0";
  49. } else if (window.Iterator) {
  50. browser_version = "2.0";
  51. } else if (Array.every) {
  52. browser_version = "1.5";
  53. } else {
  54. browser_version = "1.0";
  55. }
  56. }
  57. if (typeof ScriptEngineMajorVersion == "function") {
  58. // then this is IE and we can detect the OS
  59. // TODO: add detection for IE on Mac. low priority, since we don't have
  60. // any sploits for it yet and it's a very low market share
  61. os_name = "Windows";
  62. browser_name = "MSIE";
  63. version = ScriptEngineMajorVersion().toString();
  64. version += ScriptEngineMinorVersion().toString();
  65. version += ScriptEngineBuildVersion().toString();
  66. switch (version){
  67. case "514615":
  68. os_flavor = "2000";
  69. os_sp = "SP0";
  70. break;
  71. case "515907":
  72. os_flavor = "2000";
  73. os_sp = "SP3"; //or SP2: oCC.getComponentVersion('{22d6f312-b0f6-11d0-94ab-0080c74c7e95}', 'componentid') => 6,4,9,1109
  74. break;
  75. case "518513":
  76. os_flavor = "2000";
  77. os_sp = "SP4";
  78. break;
  79. case "566626":
  80. // IE 6.0.2600.0000, XP SP0 English
  81. os_flaver = "XP";
  82. os_sp = "SP0";
  83. break;
  84. case "568515":
  85. // IE 6.0.3790.0, 2003 Standard SP0 English
  86. os_flavor = "2003";
  87. os_sp = "SP0";
  88. break;
  89. case "568827":
  90. os_flavor = "2003";
  91. os_sp = "SP1";
  92. break;
  93. case "568831": //XP SP2 -OR- 2K SP4
  94. if (os_flavor == "2000"){
  95. os_sp = "SP4";
  96. }
  97. else{
  98. os_flavor = "XP";
  99. os_sp = "SP2";
  100. }
  101. break;
  102. case "568832":
  103. os_flavor = "2003";
  104. os_sp = "SP2";
  105. break;
  106. case "575730":
  107. // IE 7.0.5730.13, Server 2003 Standard SP2 English
  108. // IE 7.0.5730.13, XP Professional SP2 English
  109. // rely on the user agent matching above to determine the OS,
  110. // but we know it's SP2 either way
  111. os_sp = "SP2";
  112. break;
  113. }
  114. if (!browser_version) {
  115. if (document.documentElement && typeof document.documentElement.style.maxHeight!="undefined") {
  116. browser_version = "7.0";
  117. } else if (document.compatMode) {
  118. browser_version = "6.0";
  119. } else if (window.createPopup) {
  120. browser_version = "5.5";
  121. } else if (window.attachEvent) {
  122. browser_version = "5.0";
  123. } else {
  124. browser_version = "4.0";
  125. }
  126. switch (navigator.appMinorVersion){
  127. case ";SP2;":
  128. browser_version += ";SP2";
  129. break;
  130. }
  131. }
  132. }
  133. if (navigator.systemLanguage) {
  134. // ie
  135. os_lang = navigator.systemLanguage;
  136. } else if (navigator.language) {
  137. // gecko derivatives
  138. os_lang = navigator.language;
  139. } else {
  140. // some other browser and we don't know how to get the language, so just guess english
  141. os_lang = "en";
  142. }
  143. version = navigator.platform;
  144. if ( ("Win32" == version) || (version.match(/i.86/)) ) { arch = "x86"; }
  145. if (-1 != version.indexOf('PPC')) { arch = "ppc"; }
  146. return {
  147. os_name:os_name,
  148. os_flavor:os_flavor,
  149. os_sp:os_sp,
  150. os_lang:os_lang,
  151. arch:arch,
  152. browser_name:browser_name,
  153. browser_version:browser_version
  154. };
  155. } // function osdetect