from enum import Enum from typing import Literal """ This module defines an enumeration for IP protocol types and provides a mapping from numeric IP protocol values to their corresponding enum representation. Source: https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers (01/12/2025) """ class IPProtocolEnum(str, Enum): HOPOPT = "IPv6 Hop-by-Hop Option" ICMP = "Internet Control Message Protocol" IGMP = "Internet Group Management Protocol" GGP = "Gateway-to-Gateway Protocol" IP_IN_IP = "IP in IP Encapsulation" ST = "Internet Stream Protocol" TCP = "Transmission Control Protocol" CBT = "Core-based Trees" EGP = "Exterior Gateway Protocol" IGP = "Interior Gateway Protocol" BBN_RCC_MON = "BBN RCC Monitoring" NVP_II = "Network Voice Protocol" PUP = "Xerox PUP" ARGUS = "ARGUS" EMCON = "EMCON" XNET = "Cross Net Debugger" CHAOS = "Chaos Protocol" UDP = "User Datagram Protocol" MUX = "Multiplexing" DCN_MEAS = "DCN Measurement Subsystems" HMP = "Host Monitoring Protocol" PRM = "Packet Radio Measurement" XNS_IDP = "XEROX NS IDP" TRUNK_1 = "Trunk 1" TRUNK_2 = "Trunk 2" LEAF_1 = "Leaf 1" LEAF_2 = "Leaf 2" RDP = "Reliable Data Protocol" IRTP = "Internet Reliable Transaction Protocol" ISO_TP4 = "ISO Transport Protocol Class 4" NETBLT = "Bulk Data Transfer Protocol" MFE_NSP = "MFE Network Services Protocol" MERIT_INP = "MERIT Internodal Protocol" DCCP = "Datagram Congestion Control Protocol" THREE_PC = "Third Party Connect Protocol" IDPR = "Inter-Domain Policy Routing" XTP = "Xpress Transport Protocol" DDP = "Datagram Delivery Protocol" IDPR_CMTP = "IDPR Control Message Transport Protocol" TP_PP = "TP++ Transport Protocol" IL = "IL Transport Protocol" IPV6 = "IPv6 Encapsulation" SDRP = "Source Demand Routing Protocol" IPV6_ROUTE = "IPv6 Routing Header" IPV6_FRAG = "IPv6 Fragment Header" IDRP = "Inter-Domain Routing Protocol" RSVP = "Resource Reservation Protocol" GRE = "Generic Routing Encapsulation" DSR = "Dynamic Source Routing" BNA = "Burroughs Network Architecture" ESP = "Encapsulating Security Payload" AH = "Authentication Header" I_NLSP = "Integrated Net Layer Security Protocol" SWIPE = "SwIPe" NARP = "NBMA Address Resolution Protocol" MOBILE = "IP Mobility" TLSP = "Transport Layer Security Protocol" SKIP = "Simple Key-Management for IP" IPV6_ICMP = "ICMP for IPv6" IPV6_NONXT = "No Next Header for IPv6" IPV6_OPTS = "Destination Options for IPv6" PROTO_61 = "Any host internal protocol" CFTP = "CFTP" PROTO_63 = "Any local network" SAT_EXPAK = "SATNET and Backroom EXPAK" KRYPTOLAN = "Kryptolan" RVD = "MIT Remote Virtual Disk Protocol" IPPC = "Internet Pluribus Packet Core" PROTO_68 = "Any distributed file system" SAT_MON = "SATNET Monitoring" VISA = "VISA Protocol" IPCU = "Internet Packet Core Utility" CPNX = "Computer Protocol Network Executive" CPHB = "Computer Protocol Heart Beat" WSN = "Wang Span Network" PVP = "Packet Video Protocol" BR_SAT_MON = "Backroom SATNET Monitoring" SUN_ND = "SUN ND Protocol (temporary)" WB_MON = "Wideband Monitoring" WB_EXPAK = "Wideband EXPAK" ISO_IP = "International Organization for Standardization Internet Protocol" VMTP = "Versatile Message Transaction Protocol" SECURE_VMTP = "Secure VMTP" VINES = "VINES" TTP = "TTP (Transaction Transport Protocol / IPTM)" NSFNET_IGP = "NSFNET-IGP" DGP = "Dissimilar Gateway Protocol" TCF = "TCF" EIGRP = "EIGRP" OSPF = "Open Shortest Path First" SPRITE_RPC = "Sprite RPC Protocol" LARP = "Locus Address Resolution Protocol" MTP = "Multicast Transport Protocol" AX25 = "AX.25 Packet Radio" OS = "KA9Q NOS compatible IP over IP tunneling" MICP = "Mobile Internetworking Control Protocol" SCC_SP = "Semaphore Communications Security Protocol" ETHERIP = "Ethernet-within-IP Encapsulation" ENCAP = "Encapsulation Header" PROTO_99 = "Any private encryption scheme" GMTP = "GMTP" IFMP = "Ipsilon Flow Management Protocol" PNNI = "PNNI over IP" PIM = "Protocol Independent Multicast" ARIS = "IBM ARIS" SCPS = "Space Communications Protocol Standards" QNX = "QNX" AN = "Active Networks" IPCOMP = "IP Payload Compression Protocol" SNP = "Sitara Networks Protocol" COMPAQ_PEER = "Compaq Peer Protocol" IPX_IN_IP = "IPX in IP" VRRP = "Virtual Router Redundancy Protocol" PGM = "PGM Reliable Transport Protocol" PROTO_114 = "Any 0-hop protocol" L2TP = "Layer Two Tunneling Protocol Version 3" DDX = "D-II Data Exchange" IATP = "Interactive Agent Transfer Protocol" STP = "Schedule Transfer Protocol" SRP = "SpectraLink Radio Protocol" UTI = "Universal Transport Interface Protocol" SMP = "Simple Message Protocol" SM = "Simple Multicast Protocol" PTP = "Performance Transparency Protocol" ISIS = "IS-IS over IPv4" FIRE = "Flexible Intra-AS Routing Environment" CRTP = "Combat Radio Transport Protocol" CRUDP = "Combat Radio User Datagram" SSCOPMCE = "Service-Specific Connection-Oriented Protocol" IPLT = "IPLT" SPS = "Secure Packet Shield" PIPE = "Private IP Encapsulation within IP" SCTP = "Stream Control Transmission Protocol" FC = "Fibre Channel" RSVP_E2E_IGNORE = "RSVP End-to-End Ignore" MOBILITY_HEADER = "Mobility Extension Header for IPv6" UDPLITE = "UDPLite" MPLS_IN_IP = "MPLS-in-IP" MANET = "MANET Protocols" HIP = "Host Identity Protocol" SHIM6 = "Shim6" WESP = "Wrapped Encapsulating Security Payload" ROHC = "Robust Header Compression" SRV6 = "Segment Routing over IPv6" AGGFRAG = "AGGFRAG Encapsulation Payload for ESP" NSH = "Network Service Header" HOMA = "Homa transport protocol" BIT_EMU = "Bit-stream Emulation" EXPERIMENTAL_253 = "Use for experimentation (RFC 3692)" EXPERIMENTAL_254 = "Use for experimentation (RFC 3692)" RESERVED = "Reserved" UNKNOWN = "Unknown" IP_PROTOCOL_MAP = { 0: IPProtocolEnum.HOPOPT, 1: IPProtocolEnum.ICMP, 2: IPProtocolEnum.IGMP, 3: IPProtocolEnum.GGP, 4: IPProtocolEnum.IP_IN_IP, 5: IPProtocolEnum.ST, 6: IPProtocolEnum.TCP, 7: IPProtocolEnum.CBT, 8: IPProtocolEnum.EGP, 9: IPProtocolEnum.IGP, 10: IPProtocolEnum.BBN_RCC_MON, 11: IPProtocolEnum.NVP_II, 12: IPProtocolEnum.PUP, 13: IPProtocolEnum.ARGUS, 14: IPProtocolEnum.EMCON, 15: IPProtocolEnum.XNET, 16: IPProtocolEnum.CHAOS, 17: IPProtocolEnum.UDP, 18: IPProtocolEnum.MUX, 19: IPProtocolEnum.DCN_MEAS, 20: IPProtocolEnum.HMP, 21: IPProtocolEnum.PRM, 22: IPProtocolEnum.XNS_IDP, 23: IPProtocolEnum.TRUNK_1, 24: IPProtocolEnum.TRUNK_2, 25: IPProtocolEnum.LEAF_1, 26: IPProtocolEnum.LEAF_2, 27: IPProtocolEnum.RDP, 28: IPProtocolEnum.IRTP, 29: IPProtocolEnum.ISO_TP4, 30: IPProtocolEnum.NETBLT, 31: IPProtocolEnum.MFE_NSP, 32: IPProtocolEnum.MERIT_INP, 33: IPProtocolEnum.DCCP, 34: IPProtocolEnum.THREE_PC, 35: IPProtocolEnum.IDPR, 36: IPProtocolEnum.XTP, 37: IPProtocolEnum.DDP, 38: IPProtocolEnum.IDPR_CMTP, 39: IPProtocolEnum.TP_PP, 40: IPProtocolEnum.IL, 41: IPProtocolEnum.IPV6, 42: IPProtocolEnum.SDRP, 43: IPProtocolEnum.IPV6_ROUTE, 44: IPProtocolEnum.IPV6_FRAG, 45: IPProtocolEnum.IDRP, 46: IPProtocolEnum.RSVP, 47: IPProtocolEnum.GRE, 48: IPProtocolEnum.DSR, 49: IPProtocolEnum.BNA, 50: IPProtocolEnum.ESP, 51: IPProtocolEnum.AH, 52: IPProtocolEnum.I_NLSP, 53: IPProtocolEnum.SWIPE, 54: IPProtocolEnum.NARP, 55: IPProtocolEnum.MOBILE, 56: IPProtocolEnum.TLSP, 57: IPProtocolEnum.SKIP, 58: IPProtocolEnum.IPV6_ICMP, 59: IPProtocolEnum.IPV6_NONXT, 60: IPProtocolEnum.IPV6_OPTS, 62: IPProtocolEnum.CFTP, 64: IPProtocolEnum.SAT_EXPAK, 65: IPProtocolEnum.KRYPTOLAN, 66: IPProtocolEnum.RVD, 67: IPProtocolEnum.IPPC, 69: IPProtocolEnum.SAT_MON, 70: IPProtocolEnum.VISA, 71: IPProtocolEnum.IPCU, 72: IPProtocolEnum.CPNX, 73: IPProtocolEnum.CPHB, 74: IPProtocolEnum.WSN, 75: IPProtocolEnum.PVP, 76: IPProtocolEnum.BR_SAT_MON, 77: IPProtocolEnum.SUN_ND, 78: IPProtocolEnum.WB_MON, 79: IPProtocolEnum.WB_EXPAK, 80: IPProtocolEnum.ISO_IP, 81: IPProtocolEnum.VMTP, 82: IPProtocolEnum.SECURE_VMTP, 83: IPProtocolEnum.VINES, 84: IPProtocolEnum.TTP, 85: IPProtocolEnum.NSFNET_IGP, 86: IPProtocolEnum.DGP, 87: IPProtocolEnum.TCF, 88: IPProtocolEnum.EIGRP, 89: IPProtocolEnum.OSPF, 90: IPProtocolEnum.SPRITE_RPC, 91: IPProtocolEnum.LARP, 92: IPProtocolEnum.MTP, 93: IPProtocolEnum.AX25, 94: IPProtocolEnum.OS, 95: IPProtocolEnum.MICP, 96: IPProtocolEnum.SCC_SP, 97: IPProtocolEnum.ETHERIP, 98: IPProtocolEnum.ENCAP, 100: IPProtocolEnum.GMTP, 101: IPProtocolEnum.IFMP, 102: IPProtocolEnum.PNNI, 103: IPProtocolEnum.PIM, 104: IPProtocolEnum.ARIS, 105: IPProtocolEnum.SCPS, 106: IPProtocolEnum.QNX, 107: IPProtocolEnum.AN, 108: IPProtocolEnum.IPCOMP, 109: IPProtocolEnum.SNP, 110: IPProtocolEnum.COMPAQ_PEER, 111: IPProtocolEnum.IPX_IN_IP, 112: IPProtocolEnum.VRRP, 113: IPProtocolEnum.PGM, 115: IPProtocolEnum.L2TP, 116: IPProtocolEnum.DDX, 117: IPProtocolEnum.IATP, 118: IPProtocolEnum.STP, 119: IPProtocolEnum.SRP, 120: IPProtocolEnum.UTI, 121: IPProtocolEnum.SMP, 122: IPProtocolEnum.SM, 123: IPProtocolEnum.PTP, 124: IPProtocolEnum.ISIS, 125: IPProtocolEnum.FIRE, 126: IPProtocolEnum.CRTP, 127: IPProtocolEnum.CRUDP, 128: IPProtocolEnum.SSCOPMCE, 129: IPProtocolEnum.IPLT, 130: IPProtocolEnum.SPS, 131: IPProtocolEnum.PIPE, 132: IPProtocolEnum.SCTP, 133: IPProtocolEnum.FC, 134: IPProtocolEnum.RSVP_E2E_IGNORE, 135: IPProtocolEnum.MOBILITY_HEADER, 136: IPProtocolEnum.UDPLITE, 137: IPProtocolEnum.MPLS_IN_IP, 138: IPProtocolEnum.MANET, 139: IPProtocolEnum.HIP, 140: IPProtocolEnum.SHIM6, 141: IPProtocolEnum.WESP, 142: IPProtocolEnum.ROHC, 143: IPProtocolEnum.SRV6, 144: IPProtocolEnum.AGGFRAG, 145: IPProtocolEnum.NSH, 146: IPProtocolEnum.HOMA, 147: IPProtocolEnum.BIT_EMU, 253: IPProtocolEnum.EXPERIMENTAL_253, 254: IPProtocolEnum.EXPERIMENTAL_254, 255: IPProtocolEnum.RESERVED, } def protocol_from_number(n: int) -> str: return IP_PROTOCOL_MAP.get(n, IPProtocolEnum.UNKNOWN).name