Lucene search

K
nessusThis script is Copyright (C) 2007-2024 and is owned by Tenable, Inc. or an Affiliate thereof.OS_FINGERPRINT_SNMP.NASL
HistoryMay 19, 2007 - 12:00 a.m.

OS Identification : SNMP

2007-05-1900:00:00
This script is Copyright (C) 2007-2024 and is owned by Tenable, Inc. or an Affiliate thereof.
www.tenable.com
259

7.4 High

AI Score

Confidence

Low

Nessus was able to identify the operating system type and version by examining the SNMP data returned by the remote server.

##
# (C) Tenable, Inc.
#
# Nessus was able to identify the operating system type and version by
# examining the SNMP data returned by the remote server.
##

include("compat.inc");

if (description)
{
  script_id(25246);
  script_version("1.191");
  script_set_attribute(attribute:"plugin_modification_date", value:"2024/01/19");

  script_name(english:"OS Identification : SNMP");
  script_summary(english:"Determines the remote operating system.");

  script_set_attribute(attribute:"synopsis", value:
"It was possible to identify the remote operating system based on the
SNMP data returned.");
  script_set_attribute(attribute:"description", value:
"Nessus was able to identify the operating system type and version by
examining the SNMP data returned by the remote server.");
  script_set_attribute(attribute:"solution", value:"n/a");
  script_set_attribute(attribute:"risk_factor", value:"None");

  script_set_attribute(attribute:"plugin_publication_date", value:"2007/05/19");

  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"asset_inventory", value:"True");
  script_set_attribute(attribute:"os_identification", value:"True");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"General");

  script_copyright(english:"This script is Copyright (C) 2007-2024 and is owned by Tenable, Inc. or an Affiliate thereof.");

  script_dependencies("snmp_sysDesc.nasl");
  script_require_keys("SNMP/sysDesc");

  exit(0);
}

include("global_settings.inc");

name = get_kb_item("SNMP/sysName");

os = get_kb_item("SNMP/sysDesc");
if ( os )
{
 set_kb_item(name:"Host/OS/SNMP/Fingerprint", value:os);

 # Fedora 23, 24, 25, ...
  if (os =~ "^Linux [^ ]+ (\d+\.\d+).*\.fc(2[0-9])\.(i686|x86_64).*(i686|x86_64)$")
  {
    matches = pregmatch(
      pattern:"^Linux [^ ]+ (\d+\.\d+).*\.fc(2[0-9])\.(i686|x86_64).*(i686|x86_64)$",
      string:os
    );

    if (!matches)
      exit(1, "Version could not be parsed from SNMP/sysDesc '"+os+"'.");
    else
      fedora_version = 'Linux Kernel ' + matches[1] + ' on Fedora release ' + matches[2];

    set_kb_item(name:"Host/OS/SNMP", value:fedora_version);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
    exit(0);
  }

  # Virtuozzo x.x, ...
  # 7.3 :
  # Linux localhost.localdomain 3.10.0-327.36.1.vz7.20.18 #1 SMP Tue Dec 20 13:52:43 MSK 2016 x86_64
  # 7.2 :
  # Linux localhost.localdomain 3.10.0-327.18.2.vz7.15.2 #1 SMP Fri Jul 22 14:48:06 MSK 2016 x86_64
  if (os =~ "^Linux [^ ]+ (\d+\.\d+).*\.vz(\d+)\.([0-9.]+) .*(i686|x86_64)$")
  {
    matches = pregmatch(
      pattern:"^Linux [^ ]+ (\d+\.\d+).*\.vz(\d+)\.([0-9.]+) .*(i686|x86_64)$",
      string:os
    );

    if (!matches)
      exit(1, "Version could not be parsed from SNMP/sysDesc '"+os+"'.");
    else
    {
      conf = 98;
      # Virtuozzo 7.3
      if (matches[3] == "20.18")
        virtuozzo_version = 'Linux Kernel ' + matches[1] + ' on Virtuozzo release 7.3';
      # Virtuozzo 7.2
      else if (matches[3] == "15.2")
        virtuozzo_version = 'Linux Kernel ' + matches[1] + ' on Virtuozzo release 7.2';
      else
      {
        virtuozzo_version = 'Linux Kernel ' + matches[1] + ' on Virtuozzo release ' + matches[2];
        conf = 70;
      }
    }

    set_kb_item(name:"Host/OS/SNMP", value:virtuozzo_version);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:conf);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
    exit(0);
  }

 # ADSL2+ Modem Version 3.08.02.IB.02.01_1701_02270
 if (os =~ "^ADSL2\+ Modem Version [0-9A-Z_.+] *$" &&
     name == "DNA-A211-I")
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Semindia DNA-A211-I Wireless DSL Router");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"wireless-access-point");
  exit(0);
 }
 if ( "Siemens" >< os )
 {
  value = "Siemens Device";
  type = "embedded";
  conf = 80;
  if (os =~ "^Siemens Subscriber Networks [0-9]*-Series")
  {
    value = "Siemens SpeedStream Router";
    type = "router";
    conf = 100;
  }
  else
  {
    match = pregmatch(string:os, pattern:"AG SIMOTION ([A-Z])([^a-zA-Z]| |$)");
    if (!isnull(match))
    {
      if (match[1] == "D") value = "Siemens Drive Controller";
      else if (match[1] == "C") value = "Siemens Card Controller";
      else if (match[1] == "P") value = "Siemens Motion Controller";
      conf = 95;
    }
  }
  set_kb_item(name:"Host/OS/SNMP", value:value);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:conf);
  set_kb_item(name:"Host/OS/SNMP/Type", value:type);
  exit(0);
 }
 if ( os =~ "^eCos " )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"eCos Embedded Operating System");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ("ISW" >< os && "Switch Rev" >< os)
 {
  set_kb_item(name:"Host/OS/SNMP", value:"eCos Embedded Operating System");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ( os =~ "Alpine380[48]" )
 {
 if ( "3804" >< os )
   set_kb_item(name:"Host/OS/SNMP", value:"Extreme Networks Alpine 3804 Switch");
 else
   set_kb_item(name:"Host/OS/SNMP", value:"Extreme Networks Alpine 3808 Switch");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if (  "HUAWEI-3COM WBR-204g" >< os  )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Huawei-3com WBR-204g");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"wireless-access-point");
  exit(0);
 }
 if ("Huawei" >< os && os =~ "VRP(?: \(R\))? [sS]oftware,\s*Version (\d(?:\.\d+)*)")
 {
  match = pregmatch(pattern:"VRP(?: \(R\))? [sS]oftware,\s*Version (\d(?:\.\d+)*)", string:os);
  os = "Huawei Versatile Routing Platform";
  if (!isnull(match)) os += ' ' + match[1];

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ("wePresent-WiPG" >< os)
 {
  os = "Barco WePresent";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ("Wireless ADSL WLAN" >< os)
 {
  set_kb_item(name:"Host/OS/SNMP", value:"arcadyan wireless ADSL router");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value: 20);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"wireless-access-point");
  exit(0);
 }

 if ( os =~ "^MAP-330 - Hardware revision" )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Colubris MAP-330 AP");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value: 90);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"wireless-access-point");
  exit(0);
 }

# Netgear Wireless Cable Voice Gateway <<HW_REV: V1.0; VENDOR: Netgear; BOOTR: 2.1.7i; SW_REV: 3.9.21.5.RHE00157; MODEL: CBVG834G>>
 if ("Netgear Wireless Cable Voice Gateway" >< os)
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Netgear Cable Router");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value: 100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
  exit(0);
 }

 match = pregmatch(pattern:"^(GSM?[0-9]+T[A-Z]*)v[0-9]+$", string:os);
 if (!isnull(match))
 {
  os = "Netgear " + match[1] + " Switch";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value: 100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }

 if ( os =~ "^Prestige ([0-9A-Za-z]*|[-/ ]*)*$" ||
      os =~ "^P-[0-9A-Z]*-[0-9A-Z]*( V[0-9]+)?$" )
 {
  if ( os =~ "^P-" )
	  os = ereg_replace(pattern:"^P-", replace:"Prestige ", string:os);
	  os = "ZyXEL " + chomp(os) + " ADSL Router";
	  set_kb_item(name:"Host/OS/SNMP", value:os);
	  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
	  set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
	  exit(0);
 }
 if ( "Redback Networks SmartEdge OS Version SEOS-" >< os )
 {
  os = pgrep(pattern:"^Redback Networks SmartEdge OS Version", string:os);
  os = ereg_replace(pattern:".*SmartEdge OS Version SEOS-(.*)\.Built.*", replace:"SmartEdge OS \1", string:os);
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
  exit(0);
 }

 if ( "Raritan Computer; CommandCenter Secure Gateway" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Raritan CommandCenter Secure Gateway KVM");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if ( "Raritan Dominion PX" >< os )
 {
  match = pregmatch(pattern:"Raritan Dominion PX - Firmware Version ([0-9]+-[0-9])", string:os);
  os = "Raritan Dominion PX";
  if (match) os += " with Firmware Version " + match[1];

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if ( os =~"FreeBSD.* FreeBSD " || os =~ "Software: FreeBSD")
 {
  os = chomp(ereg_replace(pattern:".*(FreeBSD [0-9.]+[^ ]*).*",string:os, replace:"\1"));
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
  exit(0);
 }

 if ( os =~ "VerAg:[0-9._]*;VerSw:[0-9._]*;VerHw:MXe;VerPl:" )
 {
  os = "Mitel Networks PBX Server";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"pbx");
  exit(0);
 }
 if ( os =~ "Foundry Networks.*IronWare Version [^ ]*.*" )
 {
  os = "Foundry Networks IronWare " + ereg_replace(pattern:".*IronWare Version ([^ ]*) .*", string:os, replace:"\1");
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if ( "ZyWALL" >< os )
 {
  os = "ZyXEL ZyWALL Security Appliance";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"firewall");
  exit(0);
 }
 if ( "Lexmark" >< os )
 {
  os = "Lexmark Printer";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( "Integrated PrintNet Enterprise Version" >< os )
 {
  os = "Printronix Printer";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if (os =~ "Samsung (CL[PX]|ML|SCX)-[0-9][0-9_]+( Series|; OS )")
 {
  os = ereg_replace(pattern:".*(Samsung (CL[PX]|ML|SCX)-[0-9][0-9_]+)( Series|; OS ).*", replace:"\1 Series Printer", string:os);
  os = chomp(os);
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ("Dell Force10 Real Time Operating System" >< os)
 {
  os = "Dell Force10 Operating System";
  match = pregmatch(pattern:"Dell Force10 Operating System Version: ([0-9][0-9.]+)", string:os);
  if (!isnull(match)) os += " " + match[1];

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if ( "This system component provides a complete set of remote management functions for a Server" >< os )
 {
  os = "Dell Remote Access Controller";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ( "Fiery " >< os )
 {
  os = "Minolta Fiery Copier";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( "TOSHIBA e-STUDIO" >< os )
 {
  ver = ereg_replace(pattern:".*TOSHIBA e-STUDIO([0-9]+).*", string:os, replace:"\1");
  if ( ver == os ) ver = NULL;
  os = "Toshiba e-Studio " + ver + " printer";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( "Dell Out-of-band SNMP" >< os )
 {
  os = "Dell Remote Access Controller";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if (os =~ "^Dell [0-9]+(cn?|cdn|cnw|dn?|)[; ].+Engine")
 {
  match = pregmatch(pattern:"^Dell ([0-9]+)(cn?|cdn|cnw|dn?)[; ]", string:os);
  if (isnull(match))
  {
    os = "Dell Printer";
  }
  else
  {
    if (match[2] =~ "^c")
    {
      os = ("Dell " + match[1] + match[2] + " Color Laser Printer");
    }
    else
    {
      os = ("Dell " + match[1] + match[2] + " Laser Printer");
    }
  }

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( "Dell Color Laser " >< os || "Dell 3130cn Color Laser" >< os)
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Dell Color Laser Printer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( os =~ "^2161DS-[0-9] [0-9.]+$" )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Dell KVM 2161DS");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ( "Dell Laser " >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Dell Laser Printer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if ( "3Com Switch" >< os )
 {
  match = pregmatch(pattern:"^3Com Switch ([0-9][^ ]+ [0-9]+-Port) Software Version 3Com OS (V[0-9][0-9.a-z]+)", string:os);
  if (isnull(match)) os = "3Com Switch";
  else os = "3Com " + match[1] + " Switch with firmware " + match[2];

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if ( "3Com SuperStack " >< os )
 {
  os = "3Com SuperStack Switch";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if ( "3Com SuperStackII " >< os )
 {
  os = "3Com SuperStack II switch";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if ( "3Com Baseline " >< os)
 {
   os = "3Com Baseline Switch";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
   exit(0);
 }

 if ("TigerStack" >< os )
 {
  os = "SMC TigerStack Switch";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if ( os =~ "Bay Stack.*hub" )
 {
  os = "Nortel Bay Stack Switch";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if (
  os =~ "Ethernet (Routing )?Switch.*Nortel Network" ||
  os =~ "^BayStack "
 )
 {
  os = "Nortel Ethernet Routing Switch";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if (os =~ "CS [0-9]+.*Call Server.*Nortel" )
 {
  item = pregmatch(pattern:'(CS [0-9][^"]+)" SW', string:os);
  if (isnull(item)) os_name = "Nortel Call Server";
  else os_name = "Nortel " + item[1] + " Call Server";

  set_kb_item(name:"Host/OS/SNMP", value:os_name);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ( os =~ "^Nortel, CS [0-9]+ Signaling Server" ||
      os =~ "CS [0-9]+.*Signaling Server.*Nortel" )
 {
  os = "Nortel CS Signaling Server";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if (os =~ "^Nortel SR ")
 {
  os_name = "Nortel Secure Router";

  item = pregmatch(pattern:"^Nortel SR ([0-9][^ ,]+),", string:os);
  if (!isnull(item)) os_name += " " + item[1];

  item = pregmatch(pattern:"Software Version = r([0-9][^ ,]+)", string:os);
  if (!isnull(item)) os_name += " with software release " + item[1];

  set_kb_item(name:"Host/OS/SNMP", value:os_name);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
  exit(0);
 }
 if (os =~ "CS [0-9]+.*VGMC.*Nortel" )
 {
  # Nortel IP Line and Voice Gateway Media Card
  item = pregmatch(pattern:'MC Firmware Rls ([0-9][0-9.]+)', string:os);
  if (isnull(item)) os_name = "Nortel VGMC";
  else os_name = "Nortel VGMC with firmware " + item[1];

  set_kb_item(name:"Host/OS/SNMP", value:os_name);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if ("Dell Laser Printer " >< os )
 {
  os = "Dell Laser Printer";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( "Prisma Digital Transport" >< os )
 {
   os = "Prisma Digital Transport System";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }
 if ( "RICOH Network Printer C model" >< os )
 {
   os = "Ricoh Printer";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
   exit(0);
 }
 if ( "CMTS" >< os && "Juniper Networks Inc." >< os )
 {
   os = "Juniper CMTS";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }
 if ("Chkpoint/LTX" >< os )
 {
   os = "Check Point/Lantronix Network Adaptor";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }
 if ("Konica IP Controller" >< os )
  {
   os = "Konica IP Controller";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
   exit(0);
  }
 if ("Marconi ASX" >< os )
  {
   os = "Marconi ASX Switch";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
   exit(0);
  }
 if ("CoreBuilder 3500" >< os )
  {
   os = "3Com CoreBuilder 3500 Switch";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
   exit(0);
  }
 if ("Ascend Max-HP" >< os )
  {
   version = ereg_replace(pattern:"Software \+([0-9.]*)\+.*", string:os, replace:"\1");
   os = "Ascend Max-HP Modem Hub " + version;
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
  }
 if ( "HP StorageWorks " >< os )
  {
   set_kb_item(name:"Host/OS/SNMP", value:"HP StorageWorks");
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
  }
 if ("LVisual UpTime Multiprotocol T1 CSU DROP & INSERT ASE Ver" >< os )
 {
   version = ereg_replace(pattern:".* ASE Ver ([0-9.]*) .*", string:os, replace:"\1");
   os = "Visual Networks ASE " + version;
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }
 if ("ELSA LANCOM" >< os )
 {
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
   exit(0);
 }
 if ("IP Console Switch " >< os )
 {
   set_kb_item(name:"Host/OS/SNMP", value:"HP " + os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }
 if (preg(pattern:"^HP [^ ]+ Switch", string:os))
 {
   os = ereg_replace(pattern:"^(HP [^ ]+ Switch).*", string:os, replace:"\1");
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
   exit(0);
 }
 if ("SCO UnixWare" >< os )
 {
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
 }
 if ( "SCO TCP/IP Runtime Release " >< os )
 {
   set_kb_item(name:"Host/OS/SNMP", value:"SCO OpenServer");
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:75);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
 }

 if ("Apple Base Station" >< os )
 {
   version = ereg_replace(pattern:".*Apple Base Station V(.*) Compatible",
        replace:"\1",
        string:os);

   os = "Apple Airport " + version;
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"wireless-access-point");
   exit(0);
 }

 if ( "Apple AirPort" >< os )
 {
  os = "Apple AirPort Extreme Base Station";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"wireless-access-point");
  exit(0);
 }

 if ("OpenVMS" >< os )
 {
  version = ereg_replace(pattern:".*OpenVMS V([0-9]*\.[0-9]*).*",
       string:pgrep(pattern:"OpenVMS", string:os),
       replace:"\1");
  if ( version != os )
  {
   os = "OpenVMS " + version;
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
  }


 }
 if ("IBM Gigabit Ethernet Switch Module" >< os )
 {
   os = "IBM Gigabit Ethernet Switch Module";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
   exit(0);
 }

 if (os =~ "^Panasonic DP-[A-Z0-9]+")
 {
  os = ereg_replace(pattern:"Panasonic (DP-[A-Z0-9]+)", replace:"\1 Digital Imaging System", string:os);
  os = chomp(os);
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if (os =~ "^WJ-HD300 SWVer[0-9]\.[0-9]+")
 {
   os = ("Panasonic Digital " + os);
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value: 100);
   set_kb_item(name:"Host/OS/SNMP/Type", value: "embedded");
   exit(0);
 }

 if (os == "Ultrium Tape Library Specialist")
 {
   os = "IBM Ultrium Table Library";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value: 99);
   set_kb_item(name:"Host/OS/SNMP/Type", value: "embedded");
   exit(0);
 }

 if ( os =~ "^Cisco Identity Services Engine")
 {
   os = "Cisco Identity Services Engine";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value: 99);
   set_kb_item(name:"Host/OS/SNMP/Type", value: "general-purpose");
   exit(0);
 }

 if ( os =~ "^Cisco Adaptive Security Appliance Version" )
 {
   v = ereg_replace(pattern:"^Cisco Adaptive Security Appliance Version ([0-9().]+)$", string:os, replace:"\1");
   if ( v && v != os )
   {
    set_kb_item(name:"Host/OS/SNMP", value:"CISCO ASA Version " + chomp(v));
    set_kb_item(name:"Host/OS/SNMP/Confidence", value: 99);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   }
   else
   {
    set_kb_item(name:"Host/OS/SNMP", value:"CISCO ASA");
    set_kb_item(name:"Host/OS/SNMP/Confidence", value: 98);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   }
   exit(0);
 }
 if ( os =~ "^Cisco Controller" )
 {
   set_kb_item(name:"Host/OS/SNMP", value:"Cisco Wireless Controller");
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"wireless-access-point");
   exit(0);
 }
 if ( "IOS (tm)" >< os  || "Cisco IOS Software" >< os )
 {
  version = ereg_replace(pattern:".*IOS.*Version ([0-9]*\.[0-9]*\([0-9a-zA-Z]+\)[A-Z0-9.]*),.*",
       string:pgrep(pattern:"IOS", string:os),
       replace:"\1");

  if ( version != os )
  {
   if ('IOS-XE' >< os)
     os = "Cisco IOS XE " + version;
   else
     os = "CISCO IOS " + version;
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
   exit(0);
  }
 }
 # eg, Cisco Cisco PIX Security Appliance Version 8.0(4)28
 if ("Cisco PIX" >< os)
 {
   v = pregmatch(pattern:"Cisco PIX Security Appliance Version ([0-9]*\.[0-9]*\([0-9a-zA-Z]+\)[A-Z0-9.]*)", string:os);
   os = "CISCO PIX";
   if (!isnull(v)) os += (" " + v[1]);

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"firewall");
   exit(0);
 }

 if ("Cisco Systems, Inc./VPN 3000 Concentrator " >< os)
 {
   v = pregmatch(string: os, pattern: "^Cisco Systems, Inc./VPN 3000 Concentrator Version ([0-9]\.[0-9A-Z.]+)");
   if (isnull(v))
     os = "CISCO VPN Concentrator";
   else
     os = ("CISCO VPN Concentrator Version " + v[1]);
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"VPN");
   exit(0);
 }

 if ("Cisco Telepresence Multipoint Switch" >< os)
 {
   v = pregmatch(string:os, pattern: "Product:Cisco Telepresence Multipoint Switch:([0-9.-]+)");
   if (isnull(v))
     os = "Cisco Telepresence Multipoint Switch";
   else
     os = "Cisco Telepresence Multipoint Switch " + v[1];
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
   exit(0);
 }

 if ("Cisco TelePresence MCU " >< os)
 {
   v = pregmatch(string:os, pattern: "Cisco TelePresence MCU ([0-9]+)");
   if (isnull(v))
     os = "Cisco Telepresence MCU ";
   else
     os = "Cisco Telepresence MCU " + v[1];
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
 }

 if ("Cisco IMC" >< os)
 {
   os_value = "Cisco IMC";
   items = pregmatch(string:os, pattern:"\(Cisco IMC\)\s+\[(.+)(\n(.*))?\]");
   if (!isnull(items))
   {
     model = items[1];
     if (max_index(items) == 4)
     {
       model += " " + items[3];
     }
     model = ereg_replace(pattern:"\s+", replace:" ", string:model);
     os_value = "Cisco IMC " + model;
   }

   version = pregmatch(string:os, pattern:"Firmware Version (\d(\.\d)+\(\w+\))");
   if (!isnull(version))
   {
     os_value += " - " + version[1];
   }
   set_kb_item(name:"Host/OS/SNMP", value:os_value);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }

 if ("Digital UNIX" >< os )
 {
  version = ereg_replace(pattern:".*Digital UNIX V([0-9]\.[0-9]).*",
       string:pgrep(pattern:"Digital UNIX", string:os),
       replace:"\1");
  if ( version != os )
  {
   os = "Digital Unix " + version;
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
  }
 }

 if ("ULTRIX" >< os )
 {
  version = ereg_replace(pattern:".*ULTRIX V([^ ]*).*",
       string:pgrep(pattern:"ULTRIX", string:os),
       replace:"\1");
  if ( version != os )
  {
   os = "ULTRIX " + version;
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
  }
 }
 if ("HP-UX" >< os )
 {
   version = ereg_replace(pattern:".*HP-UX [^ ]* ([^ ]*) .*",
        replace:"\1",
        string:pgrep(pattern:"HP-UX", string:os)
       );
   if ( version != os )
   {
   set_kb_item(name:"Host/OS/SNMP", value:"HP-UX " + version);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
   }
 }

 # HP3000 SERIES e3000/A500-100-14, MPE XL version C.70.02 NS Transport version B.07.00
 if ("HP3000 " >< os && " MPE " >< os)
 {
   v = pregmatch(string: os, pattern: "HP3000 .* MPE (iX|XL version [^ ]+) ");
   if (! isnull(v))
   {
     set_kb_item(name:"Host/OS/SNMP", value:"HP 3000 - MPE/" + v[1]);
     set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
     set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   }
   else
   {
     set_kb_item(name:"Host/OS/SNMP", value:"HP 3000 - MPE/XL\nHP 3000 - MPE/iX\n");
     set_kb_item(name:"Host/OS/SNMP/Confidence", value: 75);
     set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   }
   exit(0);
 }

 if ( preg(pattern:"^Brocade [0-9]+Gb SAN Switch Module for IBM eServer BladeCenter", string:os) )
 {
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
   exit(0);
 }

 if ( "IBM Infoprint " >< os )
 {
   os = "IBM Infoprint server " + ereg_replace(pattern:".*IBM Infoprint ([0-9]+).* [Vv]ersion ([0-9A-Z.]+).*", replace:"\1 Version \2", string:os);

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
   exit(0);
 }

 if ("TGNet PSIO" >< os )
 {
  version = "TGNet Printer";
  set_kb_item(name:"Host/OS/SNMP", value:version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ("JETDIRECT" >< os || "HP ETHERNET MULTI-ENVIRONMENT" >< os )
 {
  version = "HP JetDirect Printer";
  set_kb_item(name:"Host/OS/SNMP", value:version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( "Lantronix UDS" >< os )
 {
  version = "Lantronix Universal Device Server";
  set_kb_item(name:"Host/OS/SNMP", value:version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ( "Lantronix EPS1" >< os )
 {
  version = "Lantronix Ethernet Print Server";
  set_kb_item(name:"Host/OS/SNMP", value:version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if (preg(pattern:"(^HP .*Switch|^PROCURVE |ProCurve .*Switch)", string:os))
 {
  version = "HP Switch";
  set_kb_item(name:"Host/OS/SNMP", value:version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if (os =~ "^IC109-FAST-KYO-TX" )
 {
  version = "KYOCERA Print Server";
  set_kb_item(name:"Host/OS/SNMP", value:version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if (os =~ "^KYOCERA.*Print" )
 {
  version = "KYOCERA Printer";
  set_kb_item(name:"Host/OS/SNMP", value:version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( os =~ "^OKI OkiLAN 8100e" )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"EthernetBoard OkiLAN 8100e");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if (os =~ "XEROX.*Printer" || os =~ "XEROX DocuPrint" || "Xerox" >< os)
 {
  match = pregmatch(pattern:"((XEROX|Xerox|xerox)( DocuPrint( [A-Z0-9]+( |$|;))?|.*Printer))", string:os);
  if (!isnull(match))
    version = match[1];
  else
    version = "Xerox Printer";
  set_kb_item(name:"Host/OS/SNMP", value:version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if ("NetQue" >< os )
 {
  report = "The remote host is running NetQue Printer Server";
  set_kb_item(name:"Host/OS/SNMP", value:"NetQue Printer Server");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 # http://www.dealtime.co.uk/xPF-Equinox_MDS_10_990410
 if ("EQUINOX MDS" >< os )
 {
  os = "Equinox MDS Transceiver";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 # Match 'Zebra Wired' and 'Zebra Wireless'
 if ("Zebra Wire" >< os)
 {
  os = "Zebra Printer";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if ("Novell NetWare" >< os )
 {
  version = ereg_replace(pattern:".* NetWare ([^ ]*).*", string:os, replace:"\1");
  if (version != os)
  {
    # http://wiki.novell.com/index.php/Version_Decoder_Ring
    version = split(version, sep:'.', keep:0);
    for (i = 0; i < max_index(version); i++)
      version[i] = int(version[i]);
    for (i = max_index(version); i < 3; i++)
      version[i] = 0;

    os = "Novell NetWare";
    if (version[0] == 5)
    {
      if (version[1] == 70)
      {
        if (version[2] == 0) os += " 6.5 SP1";
        else os += " 6.5 SP" + version[2];
      }
      else if (version[1] == 60)
      {
        os += " 6.0 SP" + version[2];
      }
      else if (version[1] == 0)
      {
        if (version[2] == 11) os = 'Novell NetWare 5.1 SP8';
        else if (version[2] == 10) os = 'Novell NetWare 5.1 SP5\nNovell NetWare 5.1 SP7';
        else os = 'Novell NetWare 5.1';
      }
      else os = 'Novell NetWare';
    }
    else os = 'Novell NetWare';
  }
  else os = 'Novell NetWare';

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
  exit(0);
 }


 if ("WorkCentre Pro Multifunction System" >< os )
 {
  os = "Xerox WorkCentre Pro";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if ( os =~ "SunOS .* 5\." )
 {
  snmp = os;

  ver = ereg_replace(pattern:"^SunOS .* 5\.([0-9]+) .*", string:os, replace:"\1");
  if (int(ver) >= 7) os = "Solaris " + ver;
  else os = "Solaris 2." + ver;

  if ( "i86pc" >< snmp ) os += " (i386)";
  else os += " (sparc)";


  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:99);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
  exit(0);
 }

 if ( "Sun SNMP Agent" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Solaris");
  # Set the confidence to 5 because we can't distinguish the version of Solaris
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:5);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
  exit(0);
 }

 if ( os =~ "^Microsoft Windows CE Version" )
 {
  version = ereg_replace(pattern:"^Microsoft Windows CE Version ([^ ]*).*", replace:"\1", string:os);
  set_kb_item(name:"Host/OS/SNMP", value:"Microsoft Windows CE Version " + version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);

 }
 if ( os == "Microsoft Corp. Windows 98.")
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Microsoft Windows 98");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
  exit(0);
 }
 if ( os =~  "Hardware:.*Software: Windows " )
 {
  os2 = ereg_replace(pattern:".*Software: Windows .*Version ([0-9.]+).*", string:os, replace:"\1");
  if ( os2 != os )
  {
   confidence = 75;
   if ( os2 == "4.0" )
    os = "Microsoft Windows NT 4.0";
   else if ( os2 == "5.0" )
    os = "Microsoft Windows 2000";
   else if ( os2 == "5.1" )
    os = "Microsoft Windows XP";
   else if (os2 == "5.2" )
    os = "Microsoft Windows Server 2003";
   else if (os2 == "6.0" )
   {
    os = 'Microsoft Windows Vista\nMicrosoft Windows Server 2008';
    confidence = 69;
   }
   else if (os2 == "6.1" )
   {
    os = 'Microsoft Windows 7\nMicrosoft Windows Server 2008 R2';
    confidence = 69;
   }
   else exit(0);

   #
   # Confidence level is 75 : pretty confident, but we do not have the Service Pack ID
   #
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:75);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
  }
 }

 if ("AIX" >< os )
 {
  line = pgrep(pattern:"AIX version", string:os);
  version = ereg_replace(pattern:".*AIX version ?: (.*)$", string:line, replace:"\1");
  if ( version != line )
  {
  version = split(version, sep:'.', keep:0);
  os = "AIX " + int(version[0]) + "." + int(version[1]);
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
  exit(0);
  }
 }

 if (
  os == '"Videoconferencing Device"' ||
  os == "Videoconferencing Device" ||
  # nb: should contain embedded quotes???
  os == "Video Conferencing Device" ||
  os == "Videoconf Device"
 )
 {
   os = "Polycom Teleconferencing Device";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:85);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }

 if (os == "NetPort Software 1.1")
 {
   os = "Polycom Teleconferencing Device";
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value: 71);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }

 if (os =~ "^Juniper Networks.*E320 Edge Routing Switch" )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Juniper E320 Edge Routing Switch");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }

 if ( "Juniper SR-" >< os || "Peribit SR-" >< os )
 {
  ver = ereg_replace(pattern:".*SR-([0-9]*).*", replace:"\1", string:os);
  os = "Juniper Peribit SR-" + ver;
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"packet-shaper");
  exit(0);
 }

 # NetEnforcerSGBS - Application Bandwidth Manager
 # AC - Application Bandwidth Manager
 if ( " - Application Bandwidth Manager" >< os  )
 {
   set_kb_item(name:"Host/OS/SNMP", value:"NetEnforcer Application Bandwidth Manager");
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"packet-shaper");
   exit(0);
 }

 if ( os =~ "Tru64 UNIX V[0-9.]+" )
 {
  version = ereg_replace(pattern:".*Tru64 UNIX V([0-9][0-9.]+([A-Z](-[0-9]+)?)?).*", replace:"\1", string:os);
  if ( version != os )
  {
   os = "Tru64 UNIX " + version;
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
  }
 }

 if ("Enterasys Networks, Inc. Matrix" >< os)
 {
   v = pregmatch(string:os, pattern:" Matrix ([EN])[0-9]+ Platinum");
   os = "Enterasys Networks Matrix";
   if (!isnull(v)) os += (" " + v[1] + "-Series Platinum");

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
   exit(0);
 }

 if ( "NetApp Release " >< os )
 {
  v = pregmatch(string: os, pattern: " Release ([0-9][^ ]+)");
  if (! isnull(v))
  {
    os = "NetApp Release " + v[1];
    set_kb_item(name:"Host/OS/SNMP", value:os);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  }
  else
  {
    os = "NetApp";
    set_kb_item(name:"Host/OS/SNMP", value:os);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:75);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  }
  exit(0);
 }

 if ( "DSR2035 " >< os )
 {
  os = "DSR2035 KVM Switch";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ( "Darwin Kernel Release" >< os )
 {
   os = ereg_replace(string:os, pattern:".*Darwin Kernel Release Version ([0-9.]+).*", replace:"\1");
   num = split(os, sep:".", keep:FALSE);
   version = "Mac OS X 10." + string(int(num[0]) - 4) + "." + num[1];
   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
 }

 if ( "Darwin Kernel Version" >< os )
 {
   os = ereg_replace(string:os, pattern:".*Darwin Kernel Version ([0-9.]+).*", replace:"\1");
   num = split(os, sep:".", keep:FALSE);
   version = "Mac OS X 10." + string(int(num[0]) - 4) + "." + num[1];
   set_kb_item(name:"Host/OS/SNMP", value:version);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
 }

 if ( os =~ "^Linux " )
 {
  version = ereg_replace(pattern:"Linux [^ ]* (([2-9]|[1-9][0-9]+)\.[^ ]*).*", replace:"\1", string:os);
  if ( version != os )
  {
  version = "Linux Kernel " + version;
  set_kb_item(name:"Host/OS/SNMP", value:version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
  exit(0);
  }
 }
 if ( "kernel 2." >< os )
 {
  version = ereg_replace(pattern:".* kernel (2\.[0-9])\..*", replace:"\1", string:os);
  if ( version != os )
  {
  version = "Linux Kernel " + version;
  set_kb_item(name:"Host/OS/SNMP", value:version);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
  exit(0);
  }
 }

 if ("Modbus/TCP to RTU Bridge" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Modbus/TCP to RTU Bridge");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"scada");
  exit(0);
 }
 if ("NetBotz RackBotz 400 Appliance" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"NetBotz RackBotz 400 Appliance");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if (
   os =~ "Fibre Channel Switch" ||
   os =~ "^Brocade Communications Systems, Inc. FE"
 )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Brocade Switch");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }

 if (preg(pattern:"^V-M200 - Hardware revision", string:os))
 {
  match = pregmatch(pattern:"^V-([^ ]+) - Hardware revision .+ Firmware version ([0-9][^ ]+)", string:os);
  if (isnull(match)) os_name = "HP Access Point";
  else os_name = "HP " +match[1] + " Access Point with Firmware version " + match[2];

  set_kb_item(name:"Host/OS/SNMP", value:os_name);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"wireless-access-point");
  exit(0);
 }

 if  ("ProCurve Access Point" >< os )
 {
  os = ereg_replace(pattern:"ProCurve Access Point ([^ ]*).*", string:os, replace:"\1");
  set_kb_item(name:"Host/OS/SNMP", value:"HP Access Point " + os );
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"wireless-access-point");
  exit(0);
 }

 if ("NCD ThinSTAR " >< os )
 {
  os = ereg_replace(pattern:"NCD ThinSTAR [^ ]*.*", string:os, replace:"\1");
  set_kb_item(name:"Host/OS/SNMP", value:"NCD ThinSTAR " + os );
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose"); # embedded?
  exit(0);
 }
 if ( "Fluke Networks OptiView (tm) Integrated Network Analyzer" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Fluke Optiview Network Analyzer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if (os =~ "Canon iR ?[A-Z0-9]+" )
 {
  model = ereg_replace(pattern:".*Canon iR ?([^ ]*).*$", string:os, replace:"\1");
  if ( model != os )
   set_kb_item(name:"Host/OS/SNMP", value:"Canon imageRUNNER " + chomp(model) + " Printer");
  else
   set_kb_item(name:"Host/OS/SNMP", value:"Canon imageRUNNER Printer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if ("Canon LBP" >< os )
 {
   num = ereg_replace(string:os, pattern:"^Canon LBP([0-9]+) .*", replace:"\1");
   if ( num == os ) num = "";
  set_kb_item(name:"Host/OS/SNMP", value:"Canon LBP" + num + " Printer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if ("Canon Network Multi-PDL Printer Board" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Canon Network Multi-PDL Printer Board");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if (os =~ "^MF series printer" || os =~ "^Canon MF[0-9][^ ]+ Series")
 {
   match = pregmatch(pattern:"^Canon (MF[0-9][^ ]+) Series", string:os);
   if (isnull(match)) os_name = "Canon MF Series Printer";
   else os_name = "Canon " + match[1] + " Series Printer";

  set_kb_item(name:"Host/OS/SNMP", value:os_name);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if ( "Alcatel SPEEDTOUCH" >< os || os =~ "^SpeedTouch" )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Alcatel SpeedTouch DSL Modem");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if (os =~ "Digi International PortServer" )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Digi International PortServer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if (os =~ "^BEFSX" )
 {
  os = "Linksys BEFSX Router";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
  exit(0);
 }
 if ( os =~ "^Passport-[0-9]"  )
 {
  os = "Nortel Passport Switch";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if ( os =~ "^Netopia [0-9]*.* v[0-9.]*[A-Z0-9.]*")
 {
  os = ereg_replace(pattern:"^Netopia ([^ ]*).*", replace:"Netopia \1 Router", string:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
  exit(0);
 }
 if ( os =~ "^KONICA MINOLTA" )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Konica Minolta Digital Copier/Printer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if (os =~ "^Minolta Di[0-9]+$")
 {
  set_kb_item(name:"Host/OS/SNMP", value: os + " Digital Copier/Printer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
  set_kb_item(name:"Host/OS/SNMP/Type", value: "printer");
  exit(0);
 }

 if ( os =~ "^EPSON.*Print Server" )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"EPSON Printer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( os =~ "Brother NC-.*Firmware")
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Brother Printer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if (os =~ "SHARP (AR|MX)-[^ ]+$")
 {
  match = pregmatch(pattern:"SHARP ((AR|MX)-[^ ]+)$", string:os);
  if (isnull(match)) os = "Sharp Printer";
  else os = "Sharp " + match[1] + " Printer";

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:80);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( "ALCATEL VoIP terminal" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Alcatel VoIP terminal");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ( os =~ "^Cayman-DSL" )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Cayman DSL Router");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
  exit(0);
 }

 if ("ADSL Router, VxWorks SNMPv1/v2c Agent, Conexant System, Inc. " >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Conexant ADSL Modem");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ( "3COM VCX Server" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"3com VCX VoIP Server");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ( "Packeteer PacketShaper " >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Packeteer PacketShaper");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"packet-shaper");
  exit(0);
 }

 if ( "Lucent Technologies Cajun Switch Agent " >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Lucent Switch");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }

 if ( "APC Environmental Monitoring Unit" >< os )
 {
  #http://www.apc.com/products/family/index.cfm?id=47
  set_kb_item(name:"Host/OS/SNMP", value:"APC Environmental Monitoring Unit");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if ("VMware ESX" >< os && "VMware, Inc." >< os)
 {
  match = pregmatch(pattern:"VMware ESX ([0-9.]+ build-[0-9]+)", string:os);
  os = "VMware ESX";
  if (match) os += " " + match[1];

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"hypervisor");
  exit(0);
 }

 if ( "DynaStar 500" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"DynaStar 500");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ( "Muratec F-" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Muratec Printer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( "ZebraNet PrintServer" >< os ||
      "ZebraNet Wired PS" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"ZebraNet Printer");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( "Xserve RAID" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Xserve RAID");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ("Cisco Systems Catalyst 1900" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"CatalystOS 1900");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }
 if ( os =~ '^"?m0n0wall' )
 {
  v = ereg_replace(pattern:'^"?m0n0wall [^ ]* ([0-9.]+) .*', replace:"\1", string:os);
  set_kb_item(name:"Host/OS/SNMP", value:"m0n0wall " + v + " Firewall");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"firewall");
  exit(0);
 }
 if ( os =~ "^Blue Coat SG.*Version:" )
 {
   v = ereg_replace(pattern:"^Blue Coat (SG[^ ]*) Series,.*", replace:"\1", string:os);
   set_kb_item(name:"Host/OS/SNMP", value:"Blue Coat " + v);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }

 if ("Generic 28C-1" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:70);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }

 if ("Cyber Switching ePower(tm) PDU" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Cyber Switching ePower PDU");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if ( "Dell 1815dn Series" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Dell Laser Printer 1815dn Series");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ("SonicWALL " >< os && "(SonicOS" >< os && preg(pattern:"^SonicWALL (.+) \(SonicOSX? ([^)]+)\)", string:os))
 {
   match = pregmatch(pattern:"^SonicWALL (.+) \(SonicOSX? ((Enhanced |Standard )?[0-9.]+(?:-[a-zA-Z0-9]+)?)", string:os);

   if ('SonicOSX' >< os) os = 'SonicOSX';
   else os = 'SonicOS';

   if (!empty_or_null(match))
     os += ' ' + match[2] + " on a SonicWALL " + match[1];

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"firewall");
   exit(0);
 }
 if ( "vSphere Management Assistant " >< os )
 {
  v = ereg_replace(pattern:'^["]*vSphere Management Assistant ([0-9.]+).*', replace:"\1", string:os);
  set_kb_item(name:"Host/OS/SNMP", value:"VMware vSphere Management Assistant " + v);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
  exit(0);
 }
 if ( "SR-140. H/W: SHDSL" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"AirTies SR-140 SHDSL Router");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
  exit(0);
 }
 if ( os =~ "^Juniper Networks" && "internet router" >< os)
 {
  match = pregmatch(string:os, pattern:"JUNOS ([0-9]+\.[0-9]+[A-Z][0-9.]+)");
  if (match)
  {
    set_kb_item(name:"Host/OS/SNMP", value:"Juniper Router Junos Version " + match[1]);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
    exit(0);
  }
 }
 if ( "Barracuda SSL VPN" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Barracuda SSL VPN");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"VPN");
  exit(0);
 }

 if ( "Barracuda Web Application Firewall" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Barracuda Web Application Firewall");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if ( "SONY Network Camera SNC-" >< os)
 {
  match = pregmatch(string:os, pattern:"SONY Network Camera SNC-([A-Z0-9]+)");
  if (match)
  {
    set_kb_item(name:"Host/OS/SNMP", value:"SONY Network Camera SNC-" + match[1]);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"camera");
    exit(0);
  }
 }

 if ( os =~ "^ExtremeXOS " )
 {
  match = pregmatch(string:os, pattern:"ExtremeXOS version ([0-9].+)");

  if (match)
  {
    os = "ExtremeXOS Network Operating System " + match[1];
    set_kb_item(name:"Host/OS/SNMP", value:os);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
    exit(0);
  }
 }
 # eg, "IPSO hostname 3.8.1-BUILD028 releng 1518  12.02.2004-222502 i386"
 if ( os =~ "^IPSO [^ ]+ " && "-BUILD" >< os)
 {
  match = pregmatch(string:os, pattern:"IPSO [^ ]+ ([0-9][0-9.]+-BUILD.+)");
  if (match)
  {
    os = "Nokia IPSO Firewall " + match[1];
    set_kb_item(name:"Host/OS/SNMP", value:os);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"firewall");
    exit(0);
  }
 }
 if ( os =~ "^D-Link DP" && " Print Server" >< os )
 {
  match = pregmatch(string:os, pattern:"^D-Link (DP[^ ]+) Print Server");
  if (match)
  {
    os = "D-Link Print Server - " + match[1];
    set_kb_item(name:"Host/OS/SNMP", value:os);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"printserver");
    exit(0);
  }
 }
 if ( preg(pattern:"^AX[0-9]+SCi? - Flare", string:os) )
 {
  match = pregmatch(pattern:"^(AX[0-9]+SCi?) - Flare ([0-9][0-9.]+)", string:os);
  if (match)
  {
    os = "EMC CLARiiON " + match[1] + " SAN Disk Array with Flare " + match[2];
    set_kb_item(name:"Host/OS/SNMP", value:os);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
    exit(0);
  }
 }
 # APC Web/SNMP Management Card
 if ( os =~ "^APC Web/SNMP Management Card" )
 {
  match = pregmatch(pattern:"^APC Web/SNMP Management Card .+ MN:(AP[0-9]{4}[A-Z]*)", string:os);
  if (match)
  {
    os = "APC " + match[1] + " UPS Network Management Card";
    set_kb_item(name:"Host/OS/SNMP", value:os);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
    exit(0);
  }
 }
 if ("SecureOS " >< os)
 {
  match = pregmatch(string:os, pattern:"SecureOS [^ ]+ ([0-9][0-9.]+) SW_OPS");
  if (match)
  {
    os = "SecureOS " + match[1];
    set_kb_item(name:"Host/OS/SNMP", value:os);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"firewall");
    exit(0);
  }
 }

 if (
   "TANDBERG Video Communication Server" >< os ||
   "TANDBERG Codec" >< os ||
   "Cisco Codec" >< os
 )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Cisco Video Communication Server");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:85);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if (os == "Avaya Phone")
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Avaya IP Phone");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:85);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if ("TTN_CORP Version: " >< os)
 {
  # nb: this is a customized version of GuardianOS from Total Training Networks.
  match = pregmatch(pattern:"^TTN_CORP Version: ([0-9.]+)", string:os);
  os = "GuardianOS";
  if (match) os += " " + match[1];

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:85);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if ("Product: EMC Celerra File Server " >< os)
 {
  match = pregmatch(pattern:"Version: +T([0-9.]+)", string:os);
  os = "EMC Celerra File Server";
  if (match) os += " with DART T" + match[1];

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:85);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if ("Janitza electronics" >< os)
 {
  os = "Janitza electronics";
  match = pregmatch(pattern:"Janitza electronics UMG([0-9.]+)", string:os);
  if ( !isnull(match) )
  {
    os += " " + match[1];
  }

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:85);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

 if (
   "Cisco Nexus Operating System (NX-OS) Software" >< os ||
   "Cisco NX-OS" >< os
 )
 {
  ver = pregmatch(string:os, pattern:", Version ([^,]+),");
  if (ver)
    os_name = "Cisco NX-OS Version " + ver[1];
  else
    os_name = "Cisco NX-OS";

  set_kb_item(name:"Host/OS/SNMP", value:os_name);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }

 if ("Cisco ONS" >< os)
 {
   set_kb_item(name:"Host/OS/SNMP", value:"Cisco ONS");
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
 }

 if ("AirCam" >< os)
 {
   set_kb_item(name:"Host/OS/SNMP", value:"Ubiquiti airCam");
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
 }

 if (";VerPl:3300 ICP" >< os && "VerAg:" >< os)
 {
   set_kb_item(name:"Host/OS/SNMP", value:"Mitel IP Communications Platform");
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"pbx");
 }

 if (preg(pattern:"Product: MG ([0-9]+);SW Version: ([0-9][0-9A-Z.]+)", string:os))
 {
   match = pregmatch(pattern:"Product: MG ([0-9]+);SW Version: ([0-9][0-9A-Z.]+)", string:os);
   if ( isnull(match) )
   {
     os = "Mediant Media Gateway with firmware ";
   }
   else
   {
     os = "Mediant " + match[1] + " Media Gateway with firmware " + match[2];
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
 }

 if (preg(pattern:"AXIS ([0-9][^ ]+) Network Document Server", string:os))
 {
   match = pregmatch(pattern:"AXIS ([0-9][^ ]+) Network Document Server(,Version: ([0-9][^ ]+))?", string:os);
   if ( isnull(match) )
   {
     os = "AXIS Network Document Server";
   }
   else
   {
     os = "AXIS " + match[1] + " Network Document Server";
     if (match[3]) os += " with firmware " + match[3];
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");  # 'scanner'?
 }

 if (preg(pattern:"AXIS ([0-9][^ ]+) Network Print Server", string:os))
 {
   match = pregmatch(pattern:"AXIS ([0-9][^ ]+) Network Print Server( V([0-9][^ ]+))?", string:os);
   if ( isnull(match) )
   {
     os = "AXIS Network Print Server";
   }
   else
   {
     os = "AXIS " + match[1] + " Network Print Server";
     if (match[3]) os += " with firmware " + match[3];
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");  # 'scanner'?
 }

 if (preg(pattern:"^Palo Alto Networks ([^ ]+) series firewall", string:os))
 {
   match = pregmatch(pattern:"^Palo Alto Networks ([^ ]+) series firewall", string:os);
   if ( isnull(match) )
   {
     os = "Palo Alto Networks PAN-OS on a series firewall";
   }
   else
   {
     os = "Palo Alto Networks PAN-OS on a " + match[1] + " series firewall";
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"firewall");
 }

 if (preg(pattern:"^MPU([0-9]+E?) ([0-9]+(\.[0-9]+)+)$", string:os))
 {
   match = pregmatch(pattern:"^MPU([0-9]+E?) ([0-9]+(\.[0-9]+)+)$", string:os);
   if ( isnull(match) )
   {
     os = "Avocent MergePoint Unity KVM switch";
   }
   else
   {
     os = "Avocent MergePoint Unity " + match[1] + " KVM switch with firmware version " + match[2];
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
 }

 if (preg(pattern:"^Mediatrix ([0-9][0-9-]+)( plus)? v?([0-9]+(\.[0-9]+)+) ", string:os))
 {
   match = pregmatch(pattern:"^Mediatrix ([0-9][0-9-]+)( plus)? v?([0-9]+(\.[0-9]+)+) ", string:os);
   if (isnull(match))
   {
     os = "Mediatrix VoIP";
   }
   else
   {
     if (match[1] =~ "^41")
     {
       os = "Mediatrix " + match[1] + " VoIP Adapter with firmware version " + match[3];
     }
     else
     {
       os = "Mediatrix " + match[1] + " VoIP Gateway with firmware version " + match[3];
     }
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
 }

 if (preg(pattern:"NetScaler NS([0-9.]+):[ \t]+Build ([0-9][^ \t,]+), Date", string:os))
 {
   match = pregmatch(pattern:"NetScaler NS([0-9.]+):[ \t]+Build ([0-9][^ \t,]+), Date", string:os);
   if (isnull(match))
   {
     os = "Citrix NetScaler Build";
   }
   else
   {
     os = "Citrix NetScaler " + match[1] + " Build " + match[2];
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
 }

 if (preg(pattern:"VBrick Systems Inc\., Model (.+) Serial ", string:os))
 {
   match = pregmatch(pattern:"VBrick Systems Inc\., Model (.+) Serial ", string:os);
   if (isnull(match))
   {
     os = "VBrick";
   }
   else
   {
     os = "VBrick " + match[1];
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
 }
 if ("IBM Networking Operating System RackSwitch" >< os )
 {
   match = pregmatch(pattern:"IBM Networking Operating System RackSwitch ([A-Z][0-9]+)$", string:os);
   if (isnull(match))
   {
     os = "IBM BNT";
   }
   else
   {
     os = "IBM BNT" + match[1];
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
   exit(0);
 }
 if (os =~ "Hardware:.* Software: FBLOS")
 {
   match = pregmatch(pattern:"Hardware: (Forti[^ ]+ [0-9][^ ]+) .+Software: FBLOS Rel\.FBL\.([0-9]+(\.[0-9]+)+)", string:os);
   if (isnull(match))
   {
     os = "FBLOS";
   }
   else
   {
     os = "FBLOS" + match[2] + " on a Fortinet " + match[1];
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"load-balancer");
   exit(0);
 }

  if (preg(pattern:"(Forti\w+([-\d\w]*))\s+v?((?:\d+\.)*\d+[, -]build\d+((\w+))?[, ]\d+(?:\s+([\d\w]+ ))?)", string:os))
  {
    ## If the values are empty we need to stop here as it's probably not a forti we support and that we know are a firewall variant,
    ## If the values have already been set by SSH, we shouldn't be overriding those.
    match = pregmatch(string:os, pattern: "(Forti\w+([-\d\w]*))\s+v?((?:\d+\.)*\d+[, -]build\d+((\w+))?[, ]\d+(?:\s+([\d\w]+ ))?)");
    if (!empty_or_null(match) && empty_or_null(get_kb_item("Host/Fortigate/get_system_performance_status")))
    {
      # Populate model/platform.
      if (match[1]) model = match[1];
      else model = "Unknown Fortinet Device";
  
      set_kb_item(name:"Host/Fortigate/get_system_status", value: os);
      set_kb_item(name:"Host/Fortigate/system_status_source", value: 'SNMP');
      set_kb_item(name:"Host/Fortigate/model", value: model);
  
      set_kb_item(name:"Host/OS/showver", value:os);
      set_kb_item(name:"Host/OS/showver/Confidence", value:90);
      set_kb_item(name:"Host/OS/showver/Type", value:'firewall');
    }
    exit(0);
  }

  if (preg(pattern:"^AX Series .*[ (]ACOS[ )]", string:os))
  {
    match= pregmatch(pattern:"^AX Series .*[ (]ACOS[ )](.* )?([\-0-9.pPgGrR]+),[ \t\n]*$", string:os);
    if (isnull(match))
    {
      os = "A10 Networks Advanced Core OS";
    }
    else
    {
      os = "A10 Networks Advanced Core OS" + match[2];
    }

    set_kb_item(name:"Host/OS/SNMP", value:os);
    set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
    set_kb_item(name:"Host/OS/SNMP/Type", value:"load-balancer");
    exit(0);
  }

 if ("Compaq Windows-based Terminal" >< os )
 {
   match = pregmatch(pattern:"^Compaq Windows-based Terminal Version ([0-9.]+) SP ([0-9]+)", string:os);

   os = "Compaq Windows-based Terminal";
   if (!isnull(match)) os += " Version "+ match[1] +" SP "+ match[2];

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }

 if ("ConnectUPS Web/SNMP Card" >< os )
 {
   # nb: these devices are commonly but not exclusively
   #     associated with Eaton Powerware UPSes.
   match = pregmatch(pattern:"^ConnectUPS Web/SNMP Card V([0-9.]+)", string:os);

   os = "ConnectUPS Web/SNMP Card";
   if (!isnull(match)) os += " "+ match[1];

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }

 if ("running IRIX " >< os )
 {
   # nb: these devices are commonly but not exclusively
   #     associated with Eaton Powerware UPSes.
   match = pregmatch(pattern:"^Silicon Graphics .+ running IRIX ([0-9]+(\.[0-9]+)+[a-z]?)", string:os);

   os = "IRIX";
   if (!isnull(match)) os += " "+ match[1];

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:90);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"general-purpose");
   exit(0);
 }

 match = pregmatch(pattern:"^GCM(16|32) ([0-9]+(\.[0-9]+)+)$", string:os);
 if (!isnull(match))
 {
  os = "IBM Global Console Manager GCM"+ match[1] + " KVM with firmware " + match[2];
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");  # 'kvm'?
  exit(0);
 }

 if ("VxWorks" >< os ) # Must be last
 {
  set_kb_item(name:"Host/OS/SNMP", value:"VxWorks");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:75);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }
 if ("Silver Peak Systems" >< os)
 {
  #Silver Peak Systems, Inc. VXUNLICENSED
  #Linux silverpeak 2.6.38.6-rc1 #1 VXOA 6.2.4.0_49732 SMP Tue
  #Apr 1 22:58:40 PDT 2014 x86_64

   os_value = "Silver Peak Systems";
   match = pregmatch(pattern:"(Linux silverpeak [0-9\.A-Za-z\-]+)", string:os);
   if (!isnull(match))
   {
     os_value = os_value + " " + match[1];
   }
   set_kb_item(name:"Host/OS/SNMP", value:os_value);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }
 if ( os =~ "^Thermal Label Printer Intermec" )
 {
  os = "Intermec Printer";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"printer");
  exit(0);
 }
 if ( "Meinberg LANTIME" >< os || "lantime" >< os )
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Meinberg LANTIME");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"scada");
  exit(0);
 }
 if ( "Troy XJet" >< os )
 {
   match = pregmatch(pattern:"(Troy XJet ?[0-9]+)", string:os);
   if (!isnull(match))
     os_value = match[1];
   else os_value = os;
   set_kb_item(name:"Host/OS/SNMP", value:os_value);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:80);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }
 if ("Arista Networks EOS version" >< os && "running on an Arista Networks" >< os)
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Arista EOS");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value: 99);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"switch");
  exit(0);
 }

 if (os =~ "^pfSense ")
 {
  match = pregmatch(string:os, pattern:"^pfSense \S+ ([0-9]\.[0-9.]+\S+)? (pfSense|nanobsd) FreeBSD");
  if (isnull(match))
  {
    os_value = "pfSense";
  }
  else
  {
    os_value = "pfSense " + match[1];
  }
  set_kb_item(name:"Host/OS/SNMP", value:os_value);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"firewall");
  exit(0);
 }

 # ftp://ftp.cisco.com/pub/mibs/v2/CISCO-PRODUCTS-MIB.my
 # ciscoACE04G          OBJECT IDENTIFIER ::= { ciscoProducts  729 } -- Application Control Engine 4 G Module in Cat6500  http://oid-info.com/cgi-bin/display?nb=729&f=1.3.6.1.4.1.9.1&a=display
 # ciscoACE10K9         OBJECT IDENTIFIER ::= { ciscoProducts  730 } -- Application Control Engine Module in Cat6500      http://oid-info.com/cgi-bin/display?nb=730&f=1.3.6.1.4.1.9.1&a=display
 # ciscoACE4710K9       OBJECT IDENTIFIER ::= { ciscoProducts  824 } -- ACE 4710 Application Control Engine Appliance     http://oid-info.com/cgi-bin/display?nb=824&f=1.3.6.1.4.1.9.1&a=display
 # ciscoACE30K9         OBJECT IDENTIFIER ::= { ciscoProducts 1231 } -- Application Control Engine Module in Cat6500      http://oid-info.com/cgi-bin/display?nb=1231&f=1.3.6.1.4.1.9.1&a=display
 # ciscoACE20K9         OBJECT IDENTIFIER ::= { ciscoProducts 1291 } -- Application Control Engine Module in Cat6500      http://oid-info.com/cgi-bin/display?nb=1291&f=1.3.6.1.4.1.9.1&a=display
 if (os =~ "Application Control Engine" )
 {
   set_kb_item(name:"Host/OS/SNMP", value:"Cisco ACE");
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
   exit(0);
 }

 if ("Palo Alto Networks Panorama" >< os)
 {
  os = "Palo Alto Networks Panorama management server";
  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"firewall");
  exit(0);
 }

 #example: Linux, Cisco Small Business RV130W (RV130W-E), Version 1.0.3.28
 #example: Linux, Cisco RV325, Version 1.3.2.02 Fri Sep 23 15:19:56 CST 2016
 if ("Linux, Cisco" >< os)
 {
   version = pregmatch(pattern:"ersion\s([0-9]+\.[0-9.]+)(?>\s|$)", string:os);
   if (!isnull(version) && !isnull(version[1]))
     version = version[1];   

   device = pregmatch(pattern:"\((RV[0-9][0-9.]+[a-zA-Z\-]+)\)", string:os);
   if (isnull(device))
     device = pregmatch(pattern:"\s(RV[0-9][0-9.]+[a-zA-Z]?)[\s|\,]", string:os);

   if (!isnull(device) && !isnull(device[1]))
     device = device[1];

   # Avoid matching on only "Linux, Cisco"
   # Each example from shodan had both version & device data
   if ( "Cisco Small Business" >< os ||
       ( !isnull(version) && !isnull(device) ) )
   {
      os = "Cisco Small Business";
      if (!isnull(version))
        os += " " + version;

      set_kb_item(name:"Host/OS/SNMP", value:os);
      set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
      set_kb_item(name:"Host/OS/SNMP/Type", value:"router");
      if (!isnull(device))
        set_kb_item(name:"Host/OS/SNMP/Device", value:device);
      exit(0);
   }
 }

 if ("Crestron Electronics AM-" >< os)
 {
  version = pregmatch(pattern:"\(Version\s+([0-9.]+)\)", string:os);
  if (!isnull(version) && !isnull(version[1]))
    version = version[1];

  device = pregmatch(pattern:"Crestron Electronics AM\-([0-9]+)\s+\(", string:os);
  if (!isnull(device) && !isnull(device[1]))
    device = device[1];

  os = "Crestron AirMedia";
  if (!isnull(version))
    os += " " + version;

  set_kb_item(name:"Host/OS/SNMP", value:os);
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:95);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  if (!isnull(device))
    set_kb_item(name:"Host/OS/SNMP/Device", value:device);
  exit(0);
 }

 if ( "Meraki" >< os && "Cloud Managed" >< os)
 {
   #`name` variable contains exact model name
   var dev_type = "unknown";
   if("Meraki MS" >< name) dev_type = "switch";
   else if("Meraki MR" >< name) dev_type = "wireless-access-point";
   else if("Meraki MX" >< name) dev_type = "firewall";

   set_kb_item(name:"Host/OS/SNMP", value:name + " Firmware");
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
   set_kb_item(name:"Host/OS/SNMP/Type", value:dev_type);
   set_kb_item(name:"Host/OS/SNMP/Device", value:name);
   exit(0);
 }

 if (os =~ "Andrew OneBase")
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Andrew OneBase");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:100);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  if (name =~ "Andrew OneBase")
    set_kb_item(name:"Host/OS/SNMP/Device", value:name);
  else
    set_kb_item(name:"Host/OS/SNMP/Device", value:os);
  exit(0);
 }

 if ("Pulse Connect Secure" >< os )
 {
   # Pulse Secure, LLC,Pulse Connect Secure,PSA-5000,9.1R3 (build 3535)
   # Pulse Secure, LLC,Pulse Connect Secure,PSA3000-V,9.1R4 (build 4763)
   # Pulse Secure, LLC,Pulse Connect Secure,PSA-3000,9.1R9.1 (build 9701)
   match = pregmatch(pattern:"Pulse Connect Secure,([\w-.]+),([\w-.]+)(?: \(build ([0-9]+)\))?", string:os);

   os = "Pulse Connect Secure";
   conf = 95;

   if (!empty_or_null(match))
   {
      conf = 98;
      os = strcat(os, ' ', match[1], ' ', match[2]);

      set_kb_item(name:"Host/OS/SNMP/Device", value:match[1]);

      if (!empty_or_null(match[3]))
        os = strcat(os, ' Build ', match[3]);
   }

   set_kb_item(name:"Host/OS/SNMP", value:os);
   set_kb_item(name:"Host/OS/SNMP/Confidence", value:conf);
   set_kb_item(name:"Host/OS/SNMP/Type", value:'VPN');
   exit(0);
 }

 if ('CliqrDepEnvName=' >< os || 'cliqrAppName=' >< os || 'cliqrAppTierName=' >< os)
 {
  set_kb_item(name:"Host/OS/SNMP", value:"Cisco Cloudcenter (CliQr)");
  set_kb_item(name:"Host/OS/SNMP/Confidence", value:98);
  set_kb_item(name:"Host/OS/SNMP/Type", value:"embedded");
  exit(0);
 }

}

7.4 High

AI Score

Confidence

Low