Esempio n. 1
0
def from_shodan(raw: Union[list, dict]) -> dict:
    """
    Turn an expected Shodan dictionary into a generic format
    :param raw: Shodan list or dictionary from host queries
    :return: Generic host describing dictionary
    """
    g = {}
    services = []
    if isinstance(raw, dict):
        services.append(raw)
    elif isinstance(raw, list):
        services.extend(raw)
    else:
        raise TypeError(
            "Given parameter 'raw' must be either a list or a dict.")
    # Get the meta data
    g.update(shodan_meta_extraction(services))
    # Get data for every service
    ports = []
    for s in services:
        ports.append(s["port"])
        g.update(shodan_service_extraction(s))
    g.update(dict(ports=ports))
    g["domains"].extend(common_model_cn_extraction(g))
    return g
Esempio n. 2
0
def from_censys_ipv4(raw: dict) -> dict:
    """
    Converts a Censys IPv4 dictionary into the common format
    :param raw: Censys IPv4 dict
    :return: Common format dict
    """
    flattened = False
    for k in raw.keys():
        if "." in k:
            flattened = True
            break
        elif k == "443" or k == "80" or k == "22" or k == "autonomous_system":
            break

    if flattened:
        raw = unflatten(raw)

    g = {}
    ports = []
    g.update(censys_ipv4_meta_extraction(raw))
    for protocol in raw.get("protocols", []):
        (port, protocol) = protocol.split("/")
        ports.append(port)
        g.update(censys_ipv4_service_extraction(raw, port, protocol))
    g.update(dict(ports=ports))
    g["domains"] = common_model_cn_extraction(g)
    return g
Esempio n. 3
0
def from_censys_ipv4(raw: dict) -> dict:
    """
    Converts a Censys IPv4 dictionary into the common format
    :param raw: Censys IPv4 dict
    :return: Common format dict
    """
    g = {}
    ports = []
    g.update(censys_ipv4_meta_extraction(raw))
    for protocol in raw["protocols"]:
        (port, protocol) = protocol.split("/")
        ports.append(port)
        g.update(censys_ipv4_service_extraction(raw, port, protocol))
    g.update(dict(ports=ports))
    g["domains"] = common_model_cn_extraction(g)
    return g