def get_bulk_asn_whois(addresses=None, retry_count=3, timeout=120):
    """
    The function for retrieving ASN information for multiple IP addresses from
    Cymru via port 43/tcp (WHOIS).

    Args:
        addresses (:obj:`list` of :obj:`str`): IP addresses to lookup.
        retry_count (:obj:`int`): The number of times to retry in case socket
            errors, timeouts, connection resets, etc. are encountered.
            Defaults to 3.
        timeout (:obj:`int`): The default timeout for socket connections in
            seconds. Defaults to 120.

    Returns:
        str: The raw ASN bulk data, new line separated.

    Raises:
        ValueError: addresses argument must be a list of IPv4/v6 address
            strings.
        ASNLookupError: The ASN bulk lookup failed.
    """

    if not isinstance(addresses, list):

        raise ValueError('addresses argument must be a list of IPv4/v6 '
                         'address strings.')

    try:

        # Create the connection for the Cymru whois query.
        conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        conn.settimeout(timeout)
        log.debug('ASN bulk query initiated.')
        conn.connect((CYMRU_WHOIS, 43))

        # Query the Cymru whois server, and store the results.
        conn.sendall((
            ' -r -a -c -p -f begin\n{0}\nend'.format(
                '\n'.join(addresses))
        ).encode())

        data = ''
        while True:

            d = conn.recv(4096).decode()
            data += d

            if not d:

                break

        conn.close()

        return str(data)

    except (socket.timeout, socket.error) as e:  # pragma: no cover

        log.debug('ASN bulk query socket error: {0}'.format(e))
        if retry_count > 0:

            log.debug('ASN bulk query retrying (count: {0})'.format(
                str(retry_count)))
            return get_bulk_asn_whois(addresses, retry_count - 1, timeout)

        else:

            raise ASNLookupError('ASN bulk lookup failed.')

    except:  # pragma: no cover

        raise ASNLookupError('ASN bulk lookup failed.')
The function for retrieving ASN information for multiple IP addresses from
    Cymru via port 43/tcp (WHOIS).

    Args:
        addresses (:obj:`list` of :obj:`str`): IP addresses to lookup.
        retry_count (:obj:`int`): The number of times to retry in case socket
            errors, timeouts, connection resets, etc. are encountered.
            Defaults to 3.
        timeout (:obj:`int`): The default timeout for socket connections in
            seconds. Defaults to 120.

    Returns:
        str: The raw ASN bulk data, new line separated.

    Raises:
        ValueError: addresses argument must be a list of IPv4/v6 address
            strings.
        ASNLookupError: The ASN bulk lookup failed.