Packet library API Reference¶
Packet class¶
- class os_ken.lib.packet.packet.Packet(data=None, protocols=None, parse_cls=<class 'os_ken.lib.packet.ethernet.ethernet'>)¶
一个数据包解码/编码类。
一个实例用于解码或编码单个数据包。
data 是一个字节数组,用于描述要解码的原始数据报。在解码时,Packet 对象是可迭代的。迭代值是协议(以太网、ipv4 等)头部和有效负载。协议头部是 packet_base.PacketBase 的子类的实例。有效负载是一个字节数组。它们按照在网络上的顺序进行迭代。
在编码数据包时,应省略 data。
- add_protocol(proto)¶
为该数据包注册一个协议 proto。
只有在编码数据包时才能使用此方法。
在编码数据包时,注册一个协议(以太网、ipv4 等)头部以添加到此数据包。协议头部应在调用 self.serialize 之前按照在网络上的顺序注册。
- classmethod from_jsondict(dict_, decode_string=<function b64decode>, **additional_args)¶
从 JSON 样式的字典创建实例。
使用字典中指定的参数实例化此类。
此方法接受以下参数:
参数
描述
dict_
一个描述参数的字典。例如,{"Param1": 100, "Param2": 200}
decode_string
(可选) 指定如何解码字符串。默认值为 base64。此参数仅用于没有在 _TYPE 类属性中显式类型注释的属性。
additional_args
(可选) 构造函数的其他关键字参数。
- get_protocol(protocol)¶
返回与指定协议匹配的第一个协议。
- get_protocols(protocol)¶
返回与指定协议匹配的协议列表。
- serialize()¶
编码一个数据包并将结果字节数组存储在 self.data 中。
只有在编码数据包时才能使用此方法。
Stream Parser class¶
- class os_ken.lib.packet.stream_parser.StreamParser¶
流解析器基类。
该类的子类的实例用于从原始字节流中提取消息。
它被设计用于从不保留消息边界的传输读取的数据。一个典型的例子是 TCP。
- exception TooSmallException¶
- parse(data)¶
尝试从原始字节流中提取消息。
data 参数是新从输入流读取的 python 字节。
返回提取的消息的有序列表。它可以是一个空列表。
剩余的数据,无法生成完整消息,将保留在内部,并在下次调用此方法时使用。
- abstract try_parse(q)¶
尝试从给定的字节中提取消息。
这是子类覆盖点。
此方法尝试从参数给定的字节中提取消息。
如果给定的数据不足以提取完整消息,但以后有更多数据到达时仍有机会提取消息,则引发 TooSmallException。
子类列表
Protocol Header classes¶
- Packet Base Class
- ARP
- BFD
- BGP
AdminResetAdminShutdownAttrFlagErrorAttrLenErrorAuthFailureBGPEvpnEsImportRTExtendedCommunityBGPEvpnEsiLabelExtendedCommunityBGPEvpnMacMobilityExtendedCommunityBGPFlowSpecRedirectCommunityBGPFlowSpecTPIDActionCommunityBGPFlowSpecTrafficActionCommunityBGPFlowSpecTrafficMarkingCommunityBGPFlowSpecTrafficRateCommunityBGPFlowSpecVlanActionCommunityBGPKeepAliveBGPMessageBGPNotificationBGPOpenBGPPathAttributePmsiTunnelBGPRouteRefreshBGPUpdateBadBgpIdBadLenBadMsgBadNotificationBadPeerAsBgpExcCollisionResolutionConnRejectedEvpnASBasedEsiEvpnArbitraryEsiEvpnEsiEvpnEthernetAutoDiscoveryNLRIEvpnEthernetSegmentNLRIEvpnInclusiveMulticastEthernetTagNLRIEvpnIpPrefixNLRIEvpnL2BridgeEsiEvpnLACPEsiEvpnMacBasedEsiEvpnMacIPAdvertisementNLRIEvpnNLRIEvpnRouterIDEsiEvpnUnknownEsiEvpnUnknownNLRIFiniteStateMachineErrorFlowSpecComponentUnknownFlowSpecDSCPFlowSpecDestPortFlowSpecDestPrefixFlowSpecDestinationMacFlowSpecEtherTypeFlowSpecFragmentFlowSpecIPProtocolFlowSpecIPv4NLRIFlowSpecIPv6DestPrefixFlowSpecIPv6FlowLabelFlowSpecIPv6FragmentFlowSpecIPv6NLRIFlowSpecIPv6SrcPrefixFlowSpecIcmpCodeFlowSpecIcmpTypeFlowSpecInnerVLANCoSFlowSpecInnerVLANIDFlowSpecL2VPNNLRIFlowSpecLLCControlFlowSpecLLCDSAPFlowSpecLLCSSAPFlowSpecNextHeaderFlowSpecPacketLenFlowSpecPortFlowSpecSNAPFlowSpecSourceMacFlowSpecSrcPortFlowSpecSrcPrefixFlowSpecTCPFlagsFlowSpecVLANCoSFlowSpecVLANIDFlowSpecVPNv4NLRIFlowSpecVPNv6NLRIHoldTimerExpiredInvalidNetworkFieldInvalidNextHopInvalidOriginErrorMalformedAsPathMalformedAttrListMalformedOptionalParamMaxPrefixReachedMissingWellKnownNotSyncOptAttrErrorOtherConfChangeOutOfResourcePeerDeConfigPmsiTunnelIdUnknownRouteTargetMembershipNLRIRoutingLoopStreamParserUnRegWellKnowAttrUnacceptableHoldTimeUnsupportedOptParamUnsupportedVersion
- BMP
- BPDU
- CFM
- DHCP
- DHCP6
- 以太网
- Geneve
- GRE
- ICMP
- ICMPv6
- IGMP
- IPv4
- IPv6
- LLC
- LLDP
- MPLS
- OpenFlow
- OSPF
- PBB
- SCTP
cause_cookie_while_shutdowncause_invalid_paramcause_invalid_stream_idcause_missing_paramcause_no_userdatacause_out_of_resourcecause_protocol_violationcause_restart_with_new_addrcause_stale_cookiecause_unrecognized_chunkcause_unrecognized_paramcause_unresolvable_addrcause_user_initiated_abortchunk_abortchunk_cookie_ackchunk_cookie_echochunk_cwrchunk_datachunk_ecn_echochunk_errorchunk_heartbeatchunk_heartbeat_ackchunk_initchunk_init_ackchunk_sackchunk_shutdownchunk_shutdown_ackchunk_shutdown_completeparam_cookie_preserveparam_ecnparam_heartbeatparam_host_addrparam_ipv4param_ipv6param_state_cookieparam_supported_addrparam_unrecognized_paramsctp
- Slow
- TCP
- UDP
- VLAN
- VRRP
- VXLAN
- Zebra
InterfaceLinkParamsNextHopBlackholeNextHopIFIndexNextHopIFNameNextHopIPv4NextHopIPv4IFIndexNextHopIPv4IFNameNextHopIPv6NextHopIPv6IFIndexNextHopIPv6IFNameRegisteredNexthopZebraBfdClientRegisterZebraBfdDestinationDeregisterZebraBfdDestinationRegisterZebraBfdDestinationReplyZebraBfdDestinationUpdateZebraHelloZebraIPv4ImportLookupZebraIPv4NexthopAddZebraIPv4NexthopDeleteZebraIPv4NexthopLookupZebraIPv4NexthopLookupMRibZebraIPv4RouteAddZebraIPv4RouteDeleteZebraIPv4RouteIPv6NexthopAddZebraIPv6ImportLookupZebraIPv6NexthopAddZebraIPv6NexthopDeleteZebraIPv6NexthopLookupZebraIPv6RouteAddZebraIPv6RouteDeleteZebraImportCheckUpdateZebraImportRouteRegisterZebraImportRouteUnregisterZebraInterfaceAddZebraInterfaceAddressAddZebraInterfaceAddressDeleteZebraInterfaceBfdDestinationUpdateZebraInterfaceDeleteZebraInterfaceDisableRadvZebraInterfaceDownZebraInterfaceEnableRadvZebraInterfaceLinkParamsZebraInterfaceNbrAddressAddZebraInterfaceNbrAddressDeleteZebraInterfaceUpZebraInterfaceVrfUpdateZebraMessageZebraMplsLabelsAddZebraMplsLabelsDeleteZebraNexthopRegisterZebraNexthopUnregisterZebraNexthopUpdateZebraRedistributeAddZebraRedistributeDefaultAddZebraRedistributeDefaultDeleteZebraRedistributeDeleteZebraRedistributeIPv4AddZebraRedistributeIPv4DeleteZebraRedistributeIPv6AddZebraRedistributeIPv6DeleteZebraRouterIDAddZebraRouterIDDeleteZebraRouterIDUpdateZebraUnknownMessageZebraVrfAddZebraVrfDeleteZebraVrfUnregisterzebra