:orphan:

Hostprobe api
===========================

The api of hostprobe

.. note::
    
    The function titles only show the required parameters, while the subsection "Optional" shows **all the other** parameters; 
    The "Optional" parameters have their default value listed next to them (ex: "port (80): <info>")

general hostprobe
-----------------------------------

.. function:: hostprobe.netprobe(network: str) -> list | None

    ``netprobe`` is a tool used to scrape all the online 
    hosts off of a network.
    
    Required Parameters:

    - **network** : the ip network (with netmask bits) that is scanned

    Optional Paremeters:

    - **timeout** (5): the timeout for how long a host will be checked until it is considered offline
    - **verbose** (False): prints extraneous info (works if output is enabled)
    - **retry** (False): retries all the hosts that rendered offline
    - **port** (80): the port scanned
    - **maxthreads** (0): the maximum number of individual threads (0 or less signifies no maximum)
    - **info** (False): prints runtime stats while the program is running (works if output is enabled, and verbose is disabled)
    - **r** (True): returns the output list
    - **output** (False): enables output (either verbose or info)
    - **threshold** (True): enables memory threshold, set in mebibytes, which won't be exceded by the number of threads
    - **maxthreshold** (DEFAULTTHRESHOLD): the maximum memory threshold value

    Example:

    >>> import hostprobe
    >>> onlinehosts = hostprobe.netprobe("192.168.1.1/24")
    >>> print(f"some online hosts: {onlinehosts}"")
    some online hosts: ["192.168.1.1", "192.168.1.7", "192.168.1.32"]

.. function:: hostprobe.check_host(host:str) -> Queue | None

    ``check_host`` is a tool designed for netprobe, but it is also available for public api.
    If no result queue is supplied, output will be printed to stdout.
    *Note on result queue:* the returned values were designed for the usage of netprobe;
    **True- host is online**, **2- host is offline**, **0-SIGINT was requested by the user**.
    *result_queue format:* "(host, status)" (ex. output: "('192.168. 123.132', True)").

    Required Parameters:

    - host: the ip adress of the host to be checked

    Optional Parameters:

    - port (80): the port scanned
    - timeout (1): the timeout for how long a host will be checked until it is considered offline
    - result_queue (None): a queue for the returned values (see ``check_host`` description for more details)

    Example without queue:

    >>> import hostprobe
    >>> hostprobe.check_host("192.168.1.1", timeout=2)
    192.168.1.1 is online

    Example with queue:

    >>> from queue import Queue
    >>> import hostprobe
    >>> result_queue = Queue()
    >>> host_status = hostprobe.check_host("192.168.1.1", timeout=2, result_queue=result_queue)
    >>> host, status = host_status.get()
    >>> if status is True:
    ...     print(f"the host {host} is online")
    ... elif status == 2:
    ...     print(f"the host {host} is offline")
    ...
    the host 192.168.1.1 is online

hostprobe constants
-------------------------------------------

.. py:data:: DEFAULTTHRESHOLD

    Hostprobe default value for maximum threshold (100mib)

    Example:

    >>> import hostprobe
    >>> online = hostprobe.netprobe("192.168.1.1/24", threshold=True, maxthreshold=hostprobe.DEFAULTTHRESHOLD)
    >>> #sets the max threshold used to the default (100mib)


.. py:data:: MINTHRESHOLD

    A dynamic value (depending on system) representing the approximate minimum threshold, which is the amount
    of ram the program uses (plus 1 for a grace amount, allowing at least 1 thread to be created).
    This is used to ensure that the program does not try to stop ram at a 
    value less then the ram the program generally uses.

    Example:

    >>> import hostprobe
    >>> from hostprobe.utils import mebibyte
    >>> hostprobe.netprobe("192.168.1.1/24", threshold=True, maxthreshold=(hostprobe.MINTHRESHOLD + mebibyte(1)))
    >>> #sets the max threshold to the near smallest value, without causing the program to crash


hostprobe submodule options
--------------------------------------------

.. function:: hostprobe.utils.mebibyte() -> int

    used to represent mebibytes in integer format

    Required Parameters:

    - mbval: the mebibyte value to be converted to int

    Example:

    >>> from hostprobe.utils import mebibyte
    >>> onemib = mebibyte(1)
    >>> print(onemib)
    1048576

