cell.py 文件源码

python
阅读 30 收藏 0 点赞 0 评论 0

项目:endosome 作者: teor2345 项目源码 文件源码
def unpack_ip_address_bytes(data_bytes, addr_type):
    '''
    Return a tuple containing the unpacked addr_type IP address string, and the
    remainder of data_bytes.
    addr_type must be either IPV4_ADDRESS_TYPE or IPV6_ADDRESS_TYPE.
    data_bytes must be at least IPV4_ADDRESS_LEN or IPV6_ADDRESS_LEN long.
    '''
    addr_len = get_addr_type_len(addr_type)
    assert len(data_bytes) >= addr_len
    if addr_type == IPV4_ADDRESS_TYPE:
        assert addr_len == IPV4_ADDRESS_LEN
        (addr_bytes, remaining_bytes) = split_field(addr_len, data_bytes)
        # Some ipaddress variants demand bytearray, others demand bytes
        try:
            addr_value = ipaddress.IPv4Address(bytearray(addr_bytes))
            return (str(addr_value), remaining_bytes)
        except ipaddress.AddressValueError:
            pass
        except UnicodeDecodeError:
            pass
        addr_value = ipaddress.IPv4Address(bytes(addr_bytes))
    elif addr_type == IPV6_ADDRESS_TYPE:
        assert addr_len == IPV6_ADDRESS_LEN
        (addr_bytes, remaining_bytes) = split_field(addr_len, data_bytes)
        try:
            addr_value = ipaddress.IPv6Address(bytearray(addr_bytes))
            return (str(addr_value), remaining_bytes)
        except ipaddress.AddressValueError:
            pass
        except UnicodeDecodeError:
            pass
        addr_value = ipaddress.IPv6Address(bytes(addr_bytes))
    else:
        raise ValueError('Unexpected address type: {}'.format(addr_type))
    return (str(addr_value), remaining_bytes)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号