from ipaddress import IPv4Address, IPv4Network, IPv6Address, IPv6Network from typing import Tuple, Union TCP = "tcp" IN, OUT = "in", "out" def pack_ip_address(ip_address: Union[IPv4Address, IPv6Address]): if ip_address.version == 6: return int.from_bytes(ip_address.packed[:8], "big", signed=True) else: return int(ip_address) def pack_ip_network( ip_network: Union[IPv4Network, IPv6Network] ) -> Tuple[int, int, int]: net = pack_ip_address(ip_network.network_address) mask = pack_ip_address(ip_network.netmask) return net, mask, ip_network.version