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 getVServices(self): queryBuilder = snmputils.SnmpQueryBuilder(OID_TABLE_VSERVICE) queryBuilder.addQueryElement(8, 'vsvrServiceName') v_services = self.snmpAgent.getSnmpData(queryBuilder) v_service_map = {} for service in v_services: v_service_map[service.meta_data] = VService( service.vsvrServiceName) return v_service_map
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 discoverIPv6AddressTable(client): queryBuilder = snmputils.SnmpQueryBuilder(BASE_IPV6_IP_TABLE_OID) queryBuilder.addQueryElement(2, 'ipv6AddrPfxLength') queryBuilder.addQueryElement(3, 'ipv6AddrType') queryBuilder.addQueryElement(4, 'ipv6AddrAnycastFlag') queryBuilder.addQueryElement(5, 'ipv6AddrStatus') table = client.executeQuery(queryBuilder.produceQuery(None)).asTable() if table: return produceIPv6Results(table, queryBuilder, 'ipv6AddrAddress') return None
def getServer(self): queryBuilder = snmputils.SnmpQueryBuilder(OID_TABLE_SERVER) queryBuilder.addQueryElement(1, 'serverName') queryBuilder.addQueryElement(2, 'serverIpAddress') servers = self.snmpAgent.getSnmpData(queryBuilder) server_map = {} for server in servers: if isValidIP(server.serverIpAddress): serverModel = Server(server.serverName, server.serverIpAddress) server_map[serverModel.name] = serverModel return server_map
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 findAllProcessesByWmi(self): processes = [] agent = self._getAgent() queryBuilder = snmputils.SnmpQueryBuilder( DiscovererBySnmp.PROCESSES_OID_BASE) queryBuilder.addQueryElement(1, 'hrSWRunIndex') queryBuilder.addQueryElement(2, 'hrSWRunName') queryBuilder.addQueryElement(4, 'hrSWRunPath') queryBuilder.addQueryElement(5, 'hrSWRunParameters') #queryBuilder.addQueryElement(6, 'hrSWRunType') queryBuilder.addQueryElement(7, 'hrSWRunStatus') results = agent.getSnmpData(queryBuilder) for item in results: processPid = item.hrSWRunIndex processName = item.hrSWRunName processStatus = item.hrSWRunStatus processPath = item.hrSWRunPath processParameters = item.hrSWRunParameters # logger.debug("Process [PID:%s, Name: %s, Status: %s" % (processPid, processName, processStatus)) # logger.debug(" -- Path: %s" % processPath) # logger.debug(" -- Parameters: %s ]" % processParameters) if processStatus in ('4', ): #skip processes in invalid state continue if not processName or re.search(r"<defunct>", processName): continue if not re.search(r"\w+", processName): continue commandLine = None if processPath: processPath = self._fixProcessPath(processPath, processName) if self._shouldAddQuotes(processPath): processPath = '"%s"' % processPath if processParameters: commandLine = " ".join([processPath, processParameters]) else: commandLine = processPath process = process_module.Process(processName, processPid, commandLine) process.executablePath = processPath process.argumentLine = processParameters processes.append(process) return processes
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 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 discoverIPv6NetToMediaTable(client): queryBuilder = snmputils.SnmpQueryBuilder(BASE_ARPTABLE_IPV6_OID) queryBuilder.addQueryElement(2, 'ipv6NetToMediaPhysAddress', 'hexa') queryBuilder.addQueryElement(3, 'ipv6NetToMediaType') queryBuilder.addQueryElement(4, 'ipv6IfNetToMediaState') queryBuilder.addQueryElement(5, 'ipv6IfNetToMediaLastUpdated') queryBuilder.addQueryElement(6, 'ipv6NetToMediaValid') logger.debug('try to get ARP table for IPv6 by RFC 2465.') table = client.executeQuery(queryBuilder.produceQuery(None)).asTable() if table: return produceIPv6Results(table, queryBuilder, 'ipv6NetToMediaNetAddress') return None
def discoverIPNetToPhysicalTable(client): queryBuilder = snmputils.SnmpQueryBuilder(BASE_IP_NET_TO_PHYSICAL_TABLE_OID) queryBuilder.addQueryElement(4, 'ipNetToPhysicalPhysAddress', 'hexa') queryBuilder.addQueryElement(5, 'ipNetToPhysicalLastUpdated') queryBuilder.addQueryElement(6, 'ipNetToPhysicalType') queryBuilder.addQueryElement(7, 'ipNetToPhysicalState') queryBuilder.addQueryElement(8, 'ipNetToPhysicalRowStatus') logger.debug('try to get ARP table for both IPv4/6 by RFC 4293.') table = client.executeQuery(queryBuilder.produceQuery(None)).asTable() if table: return produceIPv6Results(table, queryBuilder, 'ipNetToPhysicalNetAddress') return None
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 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 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 getVServers(self): queryBuilder = snmputils.SnmpQueryBuilder(OID_TABLE_VSERVER) queryBuilder.addQueryElement(1, 'vsvrName') queryBuilder.addQueryElement(2, 'vsvrIpAddress') queryBuilder.addQueryElement(3, 'vsvrPort') queryBuilder.addQueryElement(4, 'vsvrType') vservers = self.snmpAgent.getSnmpData(queryBuilder) v_server_map = {} for row in vservers: if isValidIP(row.vsvrIpAddress): v_server_map[row.meta_data] = VServer( row.vsvrName, row.vsvrIpAddress, row.vsvrPort, serviceTypeToName(row.vsvrType)) return v_server_map
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 getServices(self): queryBuilder = snmputils.SnmpQueryBuilder(OID_TABLE_SERVICE) queryBuilder.addQueryElement(1, 'svcServiceName') queryBuilder.addQueryElement(2, 'svcIpAddress') queryBuilder.addQueryElement(3, 'svcPort') queryBuilder.addQueryElement(4, 'svcServiceType') services = self.snmpAgent.getSnmpData(queryBuilder) service_map = {} for service in services: if isValidIP(service.svcIpAddress): serviceModel = Services( service.svcServiceName, service.svcIpAddress, service.svcPort, serviceTypeToName(service.svcServiceType)) service_map[serviceModel.name] = serviceModel return service_map
def discoverMixedIPAddressTable(client): queryBuilder = snmputils.SnmpQueryBuilder(BASE_MIXED_IP_TABLE_OID) queryBuilder.addQueryElement(3, 'ipAddressIfIndex') queryBuilder.addQueryElement(4, 'ipAddressType') queryBuilder.addQueryElement(5, 'ipAddressPrefix') queryBuilder.addQueryElement(6, 'ipAddressOrigin') queryBuilder.addQueryElement(7, 'ipAddressStatus') queryBuilder.addQueryElement(8, 'ipAddressCreated') queryBuilder.addQueryElement(9, 'ipAddressLastChanged') queryBuilder.addQueryElement(10, 'ipAddressRowStatus') queryBuilder.addQueryElement(11, 'ipAddressStorageType') table = client.executeQuery(queryBuilder.produceQuery(None)).asTable() if table: return produceIPv6Results(table, queryBuilder, 'ipAddressAddr') return None
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 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 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 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 getServiceGroup(self): queryBuilder = snmputils.SnmpQueryBuilder(OID_TABLE_SERVICE_GROUP) queryBuilder.addQueryElement(1, 'svcGrpMemberGroupName') queryBuilder.addQueryElement(2, 'svcGrpMemberName') queryBuilder.addQueryElement(3, 'svcGrpMemberPrimaryIPAddress') queryBuilder.addQueryElement(4, 'svcGrpMemberPrimaryPort') queryBuilder.addQueryElement(5, 'svcGrpMemberServiceType') serviceGroups = self.snmpAgent.getSnmpData(queryBuilder) service_group_map = {} for serviceGroup in serviceGroups: if isValidIP(serviceGroup.svcGrpMemberPrimaryIPAddress): sg = ServiceGroup( serviceGroup.svcGrpMemberGroupName, serviceGroup.svcGrpMemberName, serviceGroup.svcGrpMemberPrimaryIPAddress, serviceGroup.svcGrpMemberPrimaryPort, serviceTypeToName(serviceGroup.svcGrpMemberServiceType), ) service_group_map[sg.name] = sg return service_group_map
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