scapy.contrib.rtps.rtps

Real-Time Publish-Subscribe Protocol (RTPS) dissection

class scapy.contrib.rtps.rtps.DataPacket(_pkt, /, *, encapsulationKind=0, encapsulationOptions=0, parameterList=b'', participantMessageData=b'', serializedData=b'')[source]

Bases: EPacket

aliastypes = [<class 'scapy.contrib.rtps.rtps.DataPacket'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<XShortField (DataPacket).encapsulationKind>, <XShortField (DataPacket).encapsulationOptions>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>]
class scapy.contrib.rtps.rtps.GUIDPrefixPacket(_pkt, /, *, hostId=0, appId=0, instanceId=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.rtps.rtps.GUIDPrefixPacket'>, <class 'scapy.packet.Packet'>]
extract_padding(p)[source]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<XIntField (GUIDPrefixPacket).hostId>, <XIntField (GUIDPrefixPacket).appId>, <XIntField (GUIDPrefixPacket).instanceId>]
class scapy.contrib.rtps.rtps.InlineQoSPacket(_pkt, /, *, parameters=[], sentinel=b'')[source]

Bases: EPacket

aliastypes = [<class 'scapy.contrib.rtps.rtps.InlineQoSPacket'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<PacketListField (InlineQoSPacket).parameters>, <PacketField (InlineQoSPacket).sentinel>]
class scapy.contrib.rtps.rtps.ParticipantMessageDataPacket(_pkt, /, *, guidPrefix=b'', kind=0, sequenceSize=0, serializedData=b'')[source]

Bases: EPacket

aliastypes = [<class 'scapy.contrib.rtps.rtps.ParticipantMessageDataPacket'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<PacketField (ParticipantMessageDataPacket).guidPrefix>, <XIntField (ParticipantMessageDataPacket).kind>, <scapy.contrib.rtps.common_types.EField object>, <StrLenField (ParticipantMessageDataPacket).serializedData>]
class scapy.contrib.rtps.rtps.RTPS(_pkt, /, *, magic=b'', protocolVersion=<ProtocolVersionPacket  |>, vendorId=<VendorIdPacket  |>, guidPrefix=<GUIDPrefixPacket  |>)[source]

Bases: Packet

RTPS package, overall structure as per DDSI-RTPS v2.3, section 9.4.1 The structure is also discussed at 8.3.3.

The wire representation (bits) is as follows:

0…2………..7……………15………….23………….. 31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Header (RTPSHeader) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Submessage (RTPSSubmessage) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ……………………………………………………….. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Submessage | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

For representation purposes, this package will only contain the header and other submessages will be bound as layers (bind_layers):

RTPS Header structure as per DDSI-RTPS v2.3, section 9.4.4 The wire representation (bits) is as follows:

0…2………..7……………15………….23……………31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ‘R’ | ‘T’ | ‘P’ | ‘S’ | +—————+—————+—————+—————+ | ProtocolVersion version | VendorId vendorId | +—————+—————+—————+—————+ | | + + | GuidPrefix guidPrefix | + + | | +—————+—————+—————+—————+

References:

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPS'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<StrFixedLenField (RTPS).magic>, <PacketField (RTPS).protocolVersion>, <PacketField (RTPS).vendorId>, <PacketField (RTPS).guidPrefix>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({'magic': b'RTPS'}, <class 'scapy.contrib.rtps.rtps.RTPSMessage'>), ({'magic': b'RTPX'}, <class 'scapy.contrib.rtps.rtps.RTPSMessage'>)]
class scapy.contrib.rtps.rtps.RTPSMessage(_pkt, /, *, submessages=[])[source]

Bases: Packet

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSMessage'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<PacketListField (RTPSMessage).submessages>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_ACKNACK(_pkt, /, *, submessageId=6, submessageFlags=0, octetsToNextHeader=0, reader_id=b'\x00\x00\x00\x00', writer_id=b'\x00\x00\x00\x00', readerSNState=0, count=0)[source]

Bases: EPacket

0…2………..7……………15………….23……………31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ACKNACK | flags | octetsToNextHeader | +—————+—————+—————+—————+ | EntityId readerEntityId | +—————+—————+—————+—————+ | EntityId writerEntityId | +—————+—————+—————+—————+ | | + SequenceNumberSet readerSNState + | | +—————+—————+—————+—————+ | Counter count | +—————+—————+—————+—————+

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_ACKNACK'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<XByteField (RTPSSubMessage_ACKNACK).submessageId>, <XByteField (RTPSSubMessage_ACKNACK).submessageFlags>, <scapy.contrib.rtps.common_types.EField object>, <EnumField (RTPSSubMessage_ACKNACK).reader_id>, <EnumField (RTPSSubMessage_ACKNACK).writer_id>, <XStrLenField (RTPSSubMessage_ACKNACK).readerSNState>, <scapy.contrib.rtps.common_types.EField object>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_DATA(_pkt, /, *, submessageId=21, submessageFlags=0, octetsToNextHeader=0, extraFlags=0, octetsToInlineQoS=0, readerEntityIdKey=0, readerEntityIdKind=0, writerEntityIdKey=0, writerEntityIdKind=0, writerSeqNumHi=0, writerSeqNumLow=0, inlineQoS=b'', key=b'', data=b'')[source]

Bases: EPacket

0…2………..7……………15………….23……………31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | RTPS_DATA | flags | octetsToNextHeader | +—————+—————+—————+—————+ | Flags extraFlags | octetsToInlineQos | +—————+—————+—————+—————+ | EntityId readerEntityId | +—————+—————+—————+—————+ | EntityId writerEntityId | +—————+—————+—————+—————+ | | + SequenceNumber writerSeqNum + | | +—————+—————+—————+—————+ | | ~ ParameterList inlineQos [only if Q==1] ~ | | +—————+—————+—————+—————+ | | ~ SerializedData serializedData [only if D==1 || K==1] ~ | | +—————+—————+—————+—————+

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_DATA'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<XByteField (RTPSSubMessage_DATA).submessageId>, <XByteField (RTPSSubMessage_DATA).submessageFlags>, <scapy.contrib.rtps.common_types.EField object>, <XNBytesField (RTPSSubMessage_DATA).extraFlags>, <scapy.contrib.rtps.common_types.EField object>, <X3BytesField (RTPSSubMessage_DATA).readerEntityIdKey>, <XByteField (RTPSSubMessage_DATA).readerEntityIdKind>, <X3BytesField (RTPSSubMessage_DATA).writerEntityIdKey>, <XByteField (RTPSSubMessage_DATA).writerEntityIdKind>, <scapy.contrib.rtps.common_types.EField object>, <scapy.contrib.rtps.common_types.EField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_DATA_FRAG(_pkt, /, *, uninterpreted_data=0)[source]

Bases: EPacket

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_DATA_FRAG'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<StrField (RTPSSubMessage_DATA_FRAG).uninterpreted_data>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_GAP(_pkt, /, *, uninterpreted_data=0)[source]

Bases: EPacket

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_GAP'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<StrField (RTPSSubMessage_GAP).uninterpreted_data>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_HEARTBEAT(_pkt, /, *, submessageId=7, submessageFlags=0, octetsToNextHeader=0, reader_id=b'\x00\x00\x00\x00', writer_id=b'\x00\x00\x00\x00', firstAvailableSeqNumHi=0, firstAvailableSeqNumLow=0, lastSeqNumHi=0, lastSeqNumLow=0, count=0)[source]

Bases: EPacket

0…2………..7……………15………….23……………31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | HEARTBEAT | flags | octetsToNextHeader | +—————+—————+—————+—————+ | EntityId readerEntityId | +—————+—————+—————+—————+ | EntityId writerEntityId | +—————+—————+—————+—————+ | | + SequenceNumber firstAvailableSeqNumber + | | +—————+—————+—————+—————+ | | + SequenceNumber lastSeqNumber + | | +—————+—————+—————+—————+ | Counter count | +—————+—————+—————+—————+

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_HEARTBEAT'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<XByteField (RTPSSubMessage_HEARTBEAT).submessageId>, <XByteField (RTPSSubMessage_HEARTBEAT).submessageFlags>, <scapy.contrib.rtps.common_types.EField object>, <EnumField (RTPSSubMessage_HEARTBEAT).reader_id>, <EnumField (RTPSSubMessage_HEARTBEAT).writer_id>, <scapy.contrib.rtps.common_types.EField object>, <scapy.contrib.rtps.common_types.EField object>, <scapy.contrib.rtps.common_types.EField object>, <scapy.contrib.rtps.common_types.EField object>, <scapy.contrib.rtps.common_types.EField object>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_INFO_DST(_pkt, /, *, submessageId=14, submessageFlags=0, octetsToNextHeader=0, guidPrefix=b'')[source]

Bases: EPacket

0…2………..7……………15………….23……………31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | INFO_DST | flags | octetsToNextHeader | +—————+—————+—————+—————+ | | + GuidPrefix guidPrefix + | | +—————+—————+—————+—————+

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_INFO_DST'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
endianness = '>'
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<XByteField (RTPSSubMessage_INFO_DST).submessageId>, <XByteField (RTPSSubMessage_INFO_DST).submessageFlags>, <scapy.contrib.rtps.common_types.EField object>, <PacketField (RTPSSubMessage_INFO_DST).guidPrefix>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_INFO_TS(_pkt, /, *, submessageId=9, submessageFlags=<Flag 0 ()>, octetsToNextHeader=0, ts_seconds=0, ts_fraction=0)[source]

Bases: EPacket

0…2………..7……………15………….23……………31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | INFO_TS | flags | octetsToNextHeader | +—————+—————+—————+—————+ | | + Timestamp timestamp [only if T==1] + | | +—————+—————+—————+—————+

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_INFO_TS'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<XByteField (RTPSSubMessage_INFO_TS).submessageId>, <FlagsField (RTPSSubMessage_INFO_TS).submessageFlags>, <scapy.contrib.rtps.common_types.EField object>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_PAD(_pkt, /, *, submessageId=1, submessageFlags=0, octetsToNextHeader=0)[source]

Bases: EPacket

0…2………..7……………15………….23……………31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PAD | flags | octetsToNextHeader | +—————+—————+—————+—————+

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_PAD'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<XByteField (RTPSSubMessage_PAD).submessageId>, <XByteField (RTPSSubMessage_PAD).submessageFlags>, <scapy.contrib.rtps.common_types.EField object>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_SEC_BODY(_pkt, /, *, uninterpreted_data=0)[source]

Bases: EPacket

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_SEC_BODY'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<StrField (RTPSSubMessage_SEC_BODY).uninterpreted_data>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_SEC_POSTFIX(_pkt, /, *, uninterpreted_data=0)[source]

Bases: EPacket

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_SEC_POSTFIX'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<StrField (RTPSSubMessage_SEC_POSTFIX).uninterpreted_data>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_SEC_PREFIX(_pkt, /, *, uninterpreted_data=0)[source]

Bases: EPacket

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_SEC_PREFIX'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<StrField (RTPSSubMessage_SEC_PREFIX).uninterpreted_data>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_SRTPS_POSTFIX(_pkt, /, *, uninterpreted_data=0)[source]

Bases: EPacket

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_SRTPS_POSTFIX'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<StrField (RTPSSubMessage_SRTPS_POSTFIX).uninterpreted_data>]
class scapy.contrib.rtps.rtps.RTPSSubMessage_SRTPS_PREFIX(_pkt, /, *, uninterpreted_data=0)[source]

Bases: EPacket

aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSSubMessage_SRTPS_PREFIX'>, <class 'scapy.contrib.rtps.common_types.EPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: List[Field[Any, Any] | _FieldContainer] = [<StrField (RTPSSubMessage_SRTPS_PREFIX).uninterpreted_data>]