def discoverSysTableData(client): snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(BASE_SYSTABLE_OID) queryBuilder.addQueryElement(1, 'sysDescr') queryBuilder.addQueryElement(2, 'sysObjectID') queryBuilder.addQueryElement(4, 'sysContact') queryBuilder.addQueryElement(5, 'sysName') queryBuilder.addQueryElement(6, 'sysLocation') queryBuilder.addQueryElement(7, 'sysServices') sysTable = snmpAgent.getSnmpData(queryBuilder) for data in sysTable: classVendorOsAndModel = SnmpQueries.getClassVendorOsAndModelByOid(data.sysObjectID, data.sysDescr) setattr(data, 'sysClass', classVendorOsAndModel[0]) setattr(data, 'sysVendor', classVendorOsAndModel[1]) setattr(data, 'sysOs', classVendorOsAndModel[2]) setattr(data, 'sysModel', classVendorOsAndModel[3]) match = re.search("Nodename:\s*(\w+)", data.sysDescr) setattr(data, 'sysNodeName', None) if match: setattr(data, 'sysNodeName', match.group(1)) if data.sysServices and (int(data.sysServices) & 2) > 0: setattr(data, 'isBridge', 1) else: setattr(data, 'isBridge', 0) if sysTable: return sysTable[0] else: raise ValueError, "Query for System Table returned empty result"
def getILOsControllerBySNMP(client): snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(ILO_CONTROLLER_OID) queryBuilder.addQueryElement(21, 'cpqSm2CntlrModel') return snmpAgent.getSnmpData(queryBuilder)
def getDRACTable(client): logger.debug("Try to detect DRAC...") snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(DRAC_CARD_OID) queryBuilder.addQueryElement(1, 'bmcChassisIndex') queryBuilder.addQueryElement(6, 'bmcDisplayName') queryBuilder.addQueryElement(7, 'bmcDescriptionName') return snmpAgent.getSnmpData(queryBuilder)
def discoverIPv4NetToMediaTable(client): snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(BASE_ARPTABLE_OID) queryBuilder.addQueryElement(2, 'ipNetToMediaPhysAddress','hexa') queryBuilder.addQueryElement(3, 'ipNetToMediaNetAddress') queryBuilder.addQueryElement(4, 'ipNetToMediaType') logger.debug('try to get ARP table for IPv4 by RFC 2465.') return snmpAgent.getSnmpData(queryBuilder)
def discoverCiscoIPNetToMediaTable(client): snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(CISCO_IP_NET_TO_PHYSICAL_TABLE_OID) queryBuilder.addQueryElement(2, 'cInetNetToMediaNetAddress') queryBuilder.addQueryElement(3, 'cInetNetToMediaPhysAddress') queryBuilder.addQueryElement(5, 'cInetNetToMediaType') queryBuilder.addQueryElement(6, 'cInetNetToMediaState') logger.debug('try to get Cisco ARP table by CISCO-IETF-IP-MIB.') return snmpAgent.getSnmpData(queryBuilder)
def discoverRouteData(client): snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(BASE_ROUTE_OID) queryBuilder.addQueryElement(7, 'ipRouteNextHop') queryBuilder.addQueryElement(8, 'ipRouteType') queryBuilder.addQueryElement(2, 'ipRouteIfIndex') queryBuilder.addQueryElement(1, 'ipRouteDest') routeList = snmpAgent.getSnmpData(queryBuilder) return routeList
def getDRACInterfaceTable(client): logger.debug("Try to detect DRAC Interface...") snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(DRAC_INTERFACE_OID) queryBuilder.addQueryElement(1, 'bmcLANInterfaceChassisIndex') queryBuilder.addQueryElement(9, 'bmcLANInterfaceIPAddress') queryBuilder.addQueryElement(10, 'bmcLANInterfaceSubnetMaskAddress') queryBuilder.addQueryElement(11, 'bmcLANInterfaceDefaultGatewayAddress') queryBuilder.addQueryElement(12, 'bmcLANInterfaceMACAddress', 'hexa') return snmpAgent.getSnmpData(queryBuilder)
def getFilterInformation(self): result = [] snmpAgent = snmputils.SnmpAgent(None, self._client) queryBuilder = snmputils.SnmpQueryBuilder('1.3.6.1.4.1.2636.3.5.1.1') queryBuilder.addQueryElement(1, 'Name') queryBuilder.addQueryElement(2, 'Counter') queryBuilder.addQueryElement(4, 'Type') try: result = snmpAgent.getSnmpData(queryBuilder) except: logger.warn('Failed getting Filter information') return result
def discoverBridgeData(ipAddress, client): snmpAgent = snmputils.SnmpAgent(None, client, None) queryBuilder = snmputils.SnmpQueryBuilder(BASE_BRIDGE_OID) queryBuilder.addQueryElement(1, 'baseBridgeMacAddress', 'hexa') bridgeList = snmpAgent.getSnmpData(queryBuilder) for bridge in bridgeList: if str(bridge.baseBridgeMacAddress).startswith('000000000000'): bridge.baseBridgeMacAddress = ipAddress + ':' + bridge.baseBridgeMacAddress return bridgeList
def getNatedNetworks(self): result = [] snmpAgent = snmputils.SnmpAgent(None, self._client) queryBuilder = snmputils.SnmpQueryBuilder('1.3.6.1.4.1.2636.3.38.1.1') queryBuilder.addQueryElement(1, 'Name') try: elems = snmpAgent.getSnmpData(queryBuilder) result = self.parseNatedNetworks(elems) except: logger.debugException('') logger.warn('Failed getting NAT information') return result
def getILOsTableBySNMP(client): snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(ILO_CARD_OID) queryBuilder.addQueryElement(2, 'cpqSm2NicModel') queryBuilder.addQueryElement(3, 'cpqSm2NicType') queryBuilder.addQueryElement(4, 'cpqSm2NicMacAddress', 'hexa') queryBuilder.addQueryElement(5, 'cpqSm2NicIpAddress') queryBuilder.addQueryElement(6, 'cpqSm2NicIpSubnetMask') queryBuilder.addQueryElement(9, 'cpqSm2NicSpeed') queryBuilder.addQueryElement(13, 'cpqSm2NicGatewayIpAddress') return snmpAgent.getSnmpData(queryBuilder)
def isDhcpServer(client): snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(BASE_DHCP_WIN_OID) queryBuilder.addQueryElement(1, 'parDhcpStartTime') isDhcpServer = 0 logger.debug('try to query DHCP attribute.') response = snmpAgent.getSnmpData(queryBuilder) if (len(response) > 0): isDhcpServer = 1 logger.debug('Find the parDhcpStartTime and mark it as DHCP Server.') return isDhcpServer
def getFirewallConfig(self): result = [] snmpAgent = snmputils.SnmpAgent(None, self._client) queryBuilder = snmputils.SnmpQueryBuilder( '1.3.6.1.4.1.12356.101.5.1.2') queryBuilder.addQueryElement(1, 'Pol_Id') #string queryBuilder.addQueryElement(4, 'Pkt_Count') #int queryBuilder.addQueryElement(3, 'Byte_Count') #int try: result = snmpAgent.getSnmpData(queryBuilder) except: logger.warn('Failed getting basic config') return result
def discoverEntityDetails(client): snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(BASE_ENTITY_PHYSICAL_OBJECTS_OID) queryBuilder.addQueryElement(2, 'description') queryBuilder.addQueryElement(3, 'type') queryBuilder.addQueryElement(4, 'containedIn') queryBuilder.addQueryElement(5, 'physClass') queryBuilder.addQueryElement(7, 'name') queryBuilder.addQueryElement(10, 'swRev') queryBuilder.addQueryElement(11, 'serialNumber') queryBuilder.addQueryElement(12, 'vendor') queryBuilder.addQueryElement(13, 'model') try: sysTable = snmpAgent.getSnmpData(queryBuilder) except: return [], ObjectStateHolderVector() aggregated_switches = [] interfaces = [] index_to_data_map = {} for data in sysTable: if data.type in phys_sw_oids and (data.physClass and int(data.physClass) == 3): aggregated_switches.append(data) if data.physClass and int(data.physClass) == 10: interfaces.append(data) index_to_data_map[data.meta_data] = data switches_oshs = [] interfaceVector = ObjectStateHolderVector() if aggregated_switches and aggregated_switches[1:]: logger.debug('Detected Switch aggregation.') logger.debug('Found aggregated devices %s' % ([x.name for x in aggregated_switches[1:]])) lookup_sw = {} for data in aggregated_switches[1:]: sw_osh = buildAggrBackendSwitch(data) switches_oshs.append(sw_osh) lookup_sw[data.meta_data] = sw_osh for interface in interfaces: switch_id = findRelatedSwitch(interface, index_to_data_map, lookup_sw.keys()) sw_osh = lookup_sw.get(switch_id) if sw_osh: interface_osh = buildSwInterface(interface, sw_osh) interfaceVector.add(interface_osh) return switches_oshs, interfaceVector
def discoverNetscaler(Framework): """ @type Framework: com.hp.ucmdb.discovery.probe.services.dynamic.core.DynamicServiceFrameworkImpl """ client = None try: client = Framework.createClient() snmpAgent = snmputils.SnmpAgent(None, client) discoverer = NetScalerDiscover(snmpAgent) return discoverer.getTopology() except: logger.debugException('') logger.reportError('Failed to discover netscaler') finally: if client: client.close()
def getJSPolicy(self): result = [] snmpAgent = snmputils.SnmpAgent(None, self._client) queryBuilder = snmputils.SnmpQueryBuilder( '1.3.6.1.4.1.2636.3.39.1.4.1.1.2.1') queryBuilder.addQueryElement(1, 'Zone_name') queryBuilder.addQueryElement(3, 'Policy_Name') queryBuilder.addQueryElement(5, 'Policy_action') queryBuilder.addQueryElement(7, 'Policy_state') try: result = snmpAgent.getSnmpData(queryBuilder) except: logger.warn('Failed getting JS Policy information') return result
def get_cdp_info(self): ''' Selects data about CDP Layer 2 neighbors @type param: -> [snmputils.ResultItem] ''' snmp_agent = snmputils.SnmpAgent(None, self.client) query_builder = SnmpQueryBuilderWithRowIndex(self.CDP_CASH_TABLE_OID) query_builder.addQueryElement(3, 'cdpCacheAddressType') #integer: #1 network address #20 ip v6 query_builder.addQueryElement(4, 'cdpCacheAddress', 'hexa') query_builder.addQueryElement(5, 'cdpCacheVersion') query_builder.addQueryElement(6, 'cdpCacheDeviceId', 'hexa') query_builder.addQueryElement(7, 'cdpCacheDevicePort') query_builder.addQueryElement(8, 'cdpCachePlatform') connections_list = snmp_agent.getSnmpData(query_builder) return connections_list
def getWebCacheConfig(self): result = [] snmpAgent = snmputils.SnmpAgent(None, self._client) queryBuilder = snmputils.SnmpQueryBuilder( '1.3.6.1.4.1.12356.101.10.113.1') queryBuilder.addQueryElement(1, 'RAM_Limit') queryBuilder.addQueryElement(2, 'RAM_Usage') queryBuilder.addQueryElement(3, 'RAM_Hits') queryBuilder.addQueryElement(4, 'RAM_Misses') queryBuilder.addQueryElement(5, 'Requests') queryBuilder.addQueryElement(6, 'Bypass') try: result = snmpAgent.getSnmpData(queryBuilder) except: logger.warn('Failed getting Cache config') return result
def getVpnSslConfig(self): result = [] snmpAgent = snmputils.SnmpAgent(None, self._client) queryBuilder = snmputils.SnmpQueryBuilder( '1.3.6.1.4.1.12356.101.12.2.4.1') queryBuilder.addQueryElement(1, 'Index') queryBuilder.addQueryElement(2, 'VDom') queryBuilder.addQueryElement(3, 'User') queryBuilder.addQueryElement(4, 'Src_IP') queryBuilder.addQueryElement(5, 'Tunel_IP') try: result = snmpAgent.getSnmpData(queryBuilder) except: logger.warn('Failed getting VPN SSL config') return result
def getNatInformation(self): '''jnxJsSrcNatTable: 1.3.6.1.4.1.2636.3.39.1.7.1.1.2''' result = [] snmpAgent = snmputils.SnmpAgent(None, self._client) queryBuilder = snmputils.SnmpQueryBuilder( '1.3.6.1.4.1.2636.3.39.1.7.1.1.2.1') queryBuilder.addQueryElement(1, 'Name') queryBuilder.addQueryElement(2, 'Global_address') queryBuilder.addQueryElement(4, 'Number_of_used_ports') queryBuilder.addQueryElement(5, 'Number_of_sessions') queryBuilder.addQueryElement(6, 'Assoc_Interface') try: result = snmpAgent.getSnmpData(queryBuilder) except: logger.warn('Failed getting NAT information') return result
def getProxyConfig(self): result = [] snmpAgent = snmputils.SnmpAgent(None, self._client) queryBuilder = snmputils.SnmpQueryBuilder( '1.3.6.1.4.1.12356.101.10.112.5.1') queryBuilder.addQueryElement(1, 'Blocked_DLP') queryBuilder.addQueryElement(2, 'Blocked_Conn_Type') queryBuilder.addQueryElement(3, 'Examined_URLs') queryBuilder.addQueryElement(4, 'Allowed_URLs') queryBuilder.addQueryElement(5, 'Blocked_URLs') queryBuilder.addQueryElement(6, 'Logged_URLs') queryBuilder.addQueryElement(7, 'Overriden_URLs') try: result = snmpAgent.getSnmpData(queryBuilder) except: logger.warn('Failed getting Proxy config') return result
def get_lldp_info(self): ''' Selects data about LLDP Layer 2 neighbors @type param: -> [Str] ''' snmp_agent = snmputils.SnmpAgent(None, self.client) query_builder = SnmpQueryBuilderWithRowIndex( self.LLDP_REMOTE_SYSTEMS_DATA) query_builder.addQueryElement(4, 'lldpRemChassisIdSubtype') #integer:#1. chassiss component #2. interface alias #3. port component #4. mac address #5. network address #6. interface name #7. local query_builder.addQueryElement(5, 'lldpRemChassisId', 'hexa') query_builder.addQueryElement(6, 'lldpRemPortIdSubtype') #integer:#1. interface alias #2. port component #3. mac address #4. network address #5. interface name #6. agentCircuitId #7. local query_builder.addQueryElement(7, 'lldpRemPortId', 'hexa') query_builder.addQueryElement(8, 'lldpRemPortDesc') query_builder.addQueryElement(9, 'lldpRemSysName') query_builder.addQueryElement(10, 'lldpRemSysDesc') connections_list = snmp_agent.getSnmpData(query_builder) return connections_list
def getAntivirusConfig(self): result = [] snmpAgent = snmputils.SnmpAgent(None, self._client) queryBuilder = snmputils.SnmpQueryBuilder( '1.3.6.1.4.1.12356.101.8.2.1.1') queryBuilder.addQueryElement(1, 'AV_Detected') queryBuilder.addQueryElement(2, 'AV_Blocked') queryBuilder.addQueryElement(3, 'HTTP_AV_Detected') queryBuilder.addQueryElement(4, 'HTTP_AV_Blocked') queryBuilder.addQueryElement(5, 'SMTP_AV_Detected') queryBuilder.addQueryElement(6, 'SMTP_AV_Blocked') queryBuilder.addQueryElement(7, 'POP3_AV_Detected') queryBuilder.addQueryElement(8, 'POP3_AV_Blocked') queryBuilder.addQueryElement(9, 'IMAP_AV_Detected') queryBuilder.addQueryElement(10, 'IMAP_AV_Blocked') try: result = snmpAgent.getSnmpData(queryBuilder) except: logger.warn('Failed getting Antivirus config') return result
def getEntPhysicalTable(client): logger.debug("Try to detect entPhysicalTable ...") snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(ENT_PHYSICAL_TABLE_OID) queryBuilder.addQueryElement(1, 'entPhysicalIndex') queryBuilder.addQueryElement(2, 'entPhysicalDescr') queryBuilder.addQueryElement(3, 'entPhysicalVendorType') queryBuilder.addQueryElement(4, 'entPhysicalContainedIn') queryBuilder.addQueryElement(5, 'entPhysicalClassess') queryBuilder.addQueryElement(6, 'entPhysicalParentRelPos') queryBuilder.addQueryElement(7, 'entPhysicalName') queryBuilder.addQueryElement(8, 'entPhysicalHardwareRev') queryBuilder.addQueryElement(9, 'entPhysicalFirmwareRev') queryBuilder.addQueryElement(10, 'entPhysicalSoftwareRev') queryBuilder.addQueryElement(11, 'entPhysicalSerialNum') queryBuilder.addQueryElement(12, 'entPhysicalMfgName') queryBuilder.addQueryElement(13, 'entPhysicalModelName') queryBuilder.addQueryElement(14, 'entPhysicalAlias') queryBuilder.addQueryElement(15, 'entPhysicalAssetID') queryBuilder.addQueryElement(16, 'entPhysicalIsFRU') return snmpAgent.getSnmpData(queryBuilder)
if (len(response) > 0): isDhcpServer = 1 logger.debug('Find the parDhcpStartTime and mark it as DHCP Server.') return isDhcpServer def discoverIPData(client, ip_address): ipList = [] try: discoveredIpDomain = DomainScopeManager.getDomainByIp(ip_address) except Exception, ex: strException = str(ex.getMessage()) logger.debugException('problem with domain search, Wrong ip definition' + strException) return ipList snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(BASE_IP_OID) queryBuilder.addQueryElement(1, 'ipAddr') queryBuilder.addQueryElement(2, 'ipIfIndex') queryBuilder.addQueryElement(3, 'ipNetMask') ipListResult = snmpAgent.getSnmpData(queryBuilder) if (ipListResult == None) or (len(ipListResult) == 0): logger.warn('no data returned on query ', str(BASE_IP_OID)) else: for ip in ipListResult: if not isValidNetMask(str(ip.ipNetMask)): logger.warn('Received invalid netmask [', str(ip.ipNetMask),'] for ip ['+ ip.ipAddr +'], skipping') elif ip.ipAddr == None or len(ip.ipAddr) == 0: logger.warn('Received invalid ip: ' + ip.ipAddr + ', skipping')
def _createAgent(self): return snmputils.SnmpAgent(None, self._getClient())
def discoverInterfaceData(client, sysTable): snmpAgent = snmputils.SnmpAgent(None, client) queryBuilder = snmputils.SnmpQueryBuilder(BASE_INTERFACE_OID) queryBuilder.addQueryElement(1, 'ifIndex') queryBuilder.addQueryElement(2, 'ifDescr') queryBuilder.addQueryElement(3, 'ifType') queryBuilder.addQueryElement(5, 'ifSpeed') queryBuilder.addQueryElement(6, 'ifMac', 'hexa') queryBuilder.addQueryElement(7, 'ifAdminStatus') queryBuilder.addQueryElement(8, 'ifOperStatus') ifList = snmpAgent.getSnmpData(queryBuilder) queryBuilderHigh = snmputils.SnmpQueryBuilder(BASE_HIGH_INTERFACE_OID) queryBuilderHigh.addQueryElement(1, 'ifName') queryBuilderHigh.addQueryElement(15, 'ifHighSpeed') ifHighList = snmpAgent.getSnmpData(queryBuilderHigh) refifHigh = {} for iface in ifHighList: if iface.ifName: refifHigh[iface.ifName] = iface indx2if = {} refIfList = [] for interface in ifList: if interface.ifType == '': interface.ifType = -1 if interface.ifMac == None: interface.ifMac = '' if interface.ifMac and len(interface.ifMac) >= 34: #most likely we're dealing with the string to hex encoded value #try to decode it try: mac = interface.ifMac.decode('hex') #the fetched MAC might have missing 0 character at the end if mac: if len(mac) in [16, 11]: mac = mac + '0' interface.ifMac = mac except: logger.debugException('') ifValid = SnmpQueries.checkValidMacByInterfaceTypeAndDescription(int(interface.ifType), interface.ifMac, interface.ifDescr and interface.ifDescr.lower()) if (ifValid == 1) and (not netutils.isValidMac(interface.ifMac)): logger.debug('Mac is invalid:' + interface.ifMac+', using mac index instead - '+interface.ifIndex) interface.ifMac = interface.ifIndex setattr(interface, 'ifName', None) setattr(interface, 'ifAlias', None) indx2if[interface.ifIndex] = interface refIfList.append(interface) try: getInterfaceNameAndAlias(client, indx2if) except: logger.debugException('Failed to get Name and Alias') #removing interfaces with invalid mac address and no name or description for refIf in refIfList: if not modeling.isValidInterface(refIf.ifMac, refIf.ifDescr, refIf.ifName): logger.warn('Skipped invalid interface [', str(refIf.ifMac), '], name[', str(refIf.ifName), '], description[', str(refIf.ifDescr), ']') ifList.remove(refIf) for iface in ifList: if iface.ifSpeed and long(iface.ifSpeed) == 4294967295L:#magic number in case speed is higher than 10Gb hiIface = refifHigh.get(iface.ifName) if hiIface and hiIface.ifHighSpeed: iface.ifSpeed = long(hiIface.ifHighSpeed) * 1000000 return ifList