SnmpDetection Deprecated

Deprecated. No available replacement.

python · Cortex Attack Surface Management

Source

import demistomock as demisto  # noqa: F401
from CommonServerPython import *  # noqa: F401
import ipaddress
import socket


# Hex value of the Snmp probes for each version.
long_hex_v3 = "303a020103300f02024a69020300ffe30401040201030410300e0"
hex_data = {
    "v1": [
        "302902010004067075626c6963a01c0204565adc5d020100020100300e300c06082b060102010101000500"
    ],
    "v2": [
        "302602010104067075626c6963a1190204dc63c29a020100020100300b300906052b060102010500"
    ],
    "v3": [
        long_hex_v3 + "400020100020100040004000400301204000400a00c020237f00201000201003000"
    ],
}
port = 161  # default SNMP port


def snmp_send(udp_socket, probe, ip_address, port, time_out):
    """Return the Snmp response

        Parameters:
            udp_socket (object): Python object of socket.
            probe (str): String value of Snmp data payload.
            ip_address (str): String value of IP address.
            time_out (str): String value of Time out.
            port (int): Integer port number.

        Returns:
            Str: Returns the value of the Snmp response.
    """

    udp_socket.sendto(bytes.fromhex(probe), (ip_address, port))
    udp_socket.settimeout(int(time_out))
    return udp_socket.recvfrom(1024)


def snmp_v1(udp_socket, probe, ip_address, port, time_out):
    """Return the Snmp Version 1 response."""
    return snmp_send(udp_socket, probe, ip_address, port, time_out)


def snmp_v2(udp_socket, probe, ip_address, port, time_out):
    """Return the Snmp Version 2 response."""

    return snmp_send(udp_socket, probe, ip_address, port, time_out)


def snmp_v3(udp_socket, probe, ip_address, port, time_out):
    """Return the Snmp Version 3 response."""

    return snmp_send(udp_socket, probe, ip_address, port, time_out)


def snmp_detect(ip_address: str, time_out: str) -> dict:
    """Return the dict of snmp versions enabled

        Parameters:
            ip_address (str): String value of Ip address.
            time_out (str): String value of Time out.

        Returns:
            Dict: Returns the dict containing if Snmp is enabled or not and list of versions enabled.
    """

    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    ver = list()

    enabled = "False"

    for version, probes in hex_data.items():
        for probe in probes:
            try:
                if version == "v1":
                    snmp_v1(udp_socket, probe, ip_address, port, time_out)
                elif version == "v2":
                    snmp_v2(udp_socket, probe, ip_address, port, time_out)
                else:
                    snmp_v3(udp_socket, probe, ip_address, port, time_out)
                enabled = "True"
                ver.append(version)
            except Exception:
                pass
    results = {"enabled": enabled, "versions": ver}
    return results


def main():
    ip_address = demisto.args().get("ip_address")
    try:
        ipaddress.ip_address(ip_address)  # validate ip address
        time_out = demisto.args().get("time_out")
        results = snmp_detect(ip_address, time_out)
        readable_output = tableToMarkdown('SNMP results:', results)
        return_results(CommandResults(
            outputs_prefix='SnmpDetection',
            outputs=results,
            raw_response=results,
            readable_output=readable_output
        ))
    except Exception as ex:
        demisto.error(traceback.format_exc())  # print the traceback
        return_error(f"SnmpDetection failed, Error: {str(ex)}")


""" ENTRY POINT """
if __name__ in ("__main__", "__builtin__", "builtins"):
    """This is executed when run from the command line"""
    main()

README

Checks to see if SNMP is enabled on the IP address provided.

Script Data


Name Description
Script Type python3
Cortex XSOAR Version 6.5.0

Used In


This script is used in the following playbooks and scripts.
Cortex ASM - SNMP Check

Inputs


Argument Name Description
ip_address IP address.
time_out Request timeout value, in seconds. Default value is 3 seconds.

Outputs


Path Description Type
SnmpDetection Displays if SNMP version is enabled and gets the versions running. Unknown