示例#1
0
def _explicit_conversions(function_name: str) -> SNMPDetectSpecification:
    if function_name in MIGRATED_SCAN_FUNCTIONS:
        return MIGRATED_SCAN_FUNCTIONS[function_name]

    if function_name == '_is_fsc_or_windows':
        return any_of(
            startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.231'),
            startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.311'),
            startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.8072'),
        )

    if function_name == 'is_fsc':
        return all_of(
            _explicit_conversions('_is_fsc_or_windows'),
            exists('.1.3.6.1.4.1.231.2.10.2.1.1.0'),
        )

    if function_name == 'is_netapp_filer':
        return any_of(
            contains(".1.3.6.1.2.1.1.1.0", "ontap"),
            startswith(".1.3.6.1.2.1.1.2.0", ".1.3.6.1.4.1.789"),
        )

    if function_name == '_has_table_2':
        return exists(".1.3.6.1.4.1.9.9.109.1.1.1.1.2.*")

    if function_name == '_is_cisco':
        return contains(".1.3.6.1.2.1.1.1.0", "cisco")

    if function_name == '_is_cisco_nexus':
        return contains(".1.3.6.1.2.1.1.1.0", "nx-os")

    raise NotImplementedError(function_name)
def _explicit_conversions(function_name):
    # type: (str) -> SNMPDetectSpec
    if function_name == 'has_ifHCInOctets':
        return exists('.1.3.6.1.2.1.31.1.1.1.6.*')

    if function_name == '_is_fsc_or_windows':
        return any_of(
            startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.231'),
            startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.311'),
            startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.8072'),
        )

    if function_name == '_is_ucd':
        return any_of(
            contains(".1.3.6.1.2.1.1.1.0", "linux"),
            contains(".1.3.6.1.2.1.1.1.0", "cmc-tc"),
            contains(".1.3.6.1.2.1.1.1.0", "hp onboard administrator"),
            contains(".1.3.6.1.2.1.1.1.0", "barracuda"),
            contains(".1.3.6.1.2.1.1.1.0", "pfsense"),
            contains(".1.3.6.1.2.1.1.1.0", "genugate"),
            contains(".1.3.6.1.2.1.1.1.0", "bomgar"),
            contains(".1.3.6.1.2.1.1.1.0", "pulse secure"),
            all_of(
                equals('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.8072.3.2.10'),
                contains(".1.3.6.1.2.1.1.1.0", "version"),
                contains(".1.3.6.1.2.1.1.1.0", "serial"),
            ),
        )

    if function_name == 'scan_ricoh_printer':
        return all_of(
            contains(".1.3.6.1.2.1.1.2.0", ".1.3.6.1.4.1.367.1.1"),
            exists(".1.3.6.1.4.1.367.3.2.1.2.19.5.1.5.1"),
        )

    if function_name == 'is_fsc':
        return all_of(
            _explicit_conversions('_is_fsc_or_windows'),
            exists('.1.3.6.1.4.1.231.2.10.2.1.1.0'),
        )

    if function_name == 'is_netapp_filer':
        return any_of(
            contains(".1.3.6.1.2.1.1.1.0", "ontap"),
            startswith(".1.3.6.1.2.1.1.2.0", ".1.3.6.1.4.1.789"),
        )

    if function_name == '_has_table_8':
        return exists(".1.3.6.1.4.1.9.9.109.1.1.1.1.8.*")

    if function_name == '_is_cisco':
        return contains(".1.3.6.1.2.1.1.1.0", "cisco")

    if function_name == '_is_cisco_nexus':
        return contains(".1.3.6.1.2.1.1.1.0", "nx-os")

    raise NotImplementedError(function_name)
示例#3
0
def _ast_convert_call(call_ast):
    # type: (ast.Call) -> SNMPDetectSpec
    if isinstance(call_ast.func, ast.Name):
        if call_ast.func.id == 'bool':
            assert _is_oid_function(call_ast.args[0])
            return exists(_ast_convert_to_str(call_ast.args[0]))
        if call_ast.func.id in (
                'has_ifHCInOctets',
                'is_fsc',
                '_is_ucd',
                '_is_fsc_or_windows',
                'scan_ricoh_printer',
                'is_netapp_filer',
                '_has_table_2',
                '_is_cisco',
                '_is_cisco_nexus',
        ):
            return _explicit_conversions(call_ast.func.id)

        if call_ast.func.id in (
                'if64_disabled',
                'scan_f5_bigip_cluster_status_pre_11_2',
                'scan_f5_bigip_cluster_status_11_2_upwards',
                'scan_cisco_mem_asa64',
        ):
            raise NotImplementedError(call_ast.func.id)

    if isinstance(call_ast.func, ast.Attribute):
        assert _is_oid_function(call_ast.func.value)
        assert len(call_ast.args) == 1
        if call_ast.func.attr == 'startswith':
            return startswith(
                _ast_convert_to_str(call_ast.func.value),
                _ast_convert_to_str(call_ast.args[0]),
            )
        if call_ast.func.attr == 'endswith':
            return endswith(
                _ast_convert_to_str(call_ast.func.value),
                _ast_convert_to_str(call_ast.args[0]),
            )
        if isinstance(call_ast.func.value,
                      ast.Name) and call_ast.func.value.id == 're':
            assert call_ast.func.attr == 'match'
            raise NotImplementedError("regular expression")

    if _is_oid_function(call_ast):
        return exists(_ast_convert_to_str(call_ast))

    raise ValueError(ast.dump(call_ast))
def _ast_convert_call(call_ast: ast.Call) -> SNMPDetectSpecification:
    if isinstance(call_ast.func, ast.Name):
        if call_ast.func.id == "bool":
            assert _is_oid_function(call_ast.args[0])
            return exists(_ast_convert_to_str(call_ast.args[0]))
        if call_ast.func.id in (
                "is_fsc",
                "_is_ucd",
                "_is_fsc_or_windows",
                "scan_ricoh_printer",
                "is_netapp_filer",
                "_has_table_2",
                "_is_cisco",
                "_is_cisco_nexus",
        ):
            return _explicit_conversions(call_ast.func.id)

        if call_ast.func.id in (
                "scan_f5_bigip_cluster_status_pre_11_2",
                "scan_f5_bigip_cluster_status_11_2_upwards",
                "scan_cisco_mem_asa64",
        ):
            raise NotImplementedError(call_ast.func.id)

    if isinstance(call_ast.func, ast.Attribute):
        assert _is_oid_function(call_ast.func.value)
        assert len(call_ast.args) == 1
        if call_ast.func.attr == "startswith":
            return startswith(
                _ast_convert_to_str(call_ast.func.value),
                _ast_convert_to_str(call_ast.args[0]),
            )
        if call_ast.func.attr == "endswith":
            return endswith(
                _ast_convert_to_str(call_ast.func.value),
                _ast_convert_to_str(call_ast.args[0]),
            )
        if isinstance(call_ast.func.value,
                      ast.Name) and call_ast.func.value.id == "re":
            assert call_ast.func.attr == "match"
            raise NotImplementedError("regular expression")

    if _is_oid_function(call_ast):
        return exists(_ast_convert_to_str(call_ast))

    raise ValueError(ast.dump(call_ast))