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'>]
- 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'>]
- 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'>]
- 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'>]
- class scapy.contrib.rtps.rtps.RTPS(_pkt, /, *, magic=b'', protocolVersion=<ProtocolVersionPacket |>, vendorId=<VendorIdPacket |>, guidPrefix=<GUIDPrefixPacket |>)[source]
Bases:
PacketRTPS 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:
https://community.rti.com/static/documentation/wireshark/current/doc/understanding_rtps.html # noqa E501
- aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPS'>, <class 'scapy.packet.Packet'>]
- class scapy.contrib.rtps.rtps.RTPSMessage(_pkt, /, *, submessages=[])[source]
Bases:
Packet- aliastypes = [<class 'scapy.contrib.rtps.rtps.RTPSMessage'>, <class 'scapy.packet.Packet'>]
- 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:
EPacket0…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:
EPacket0…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'>]
- 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'>]
- 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:
EPacket0…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:
EPacket0…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 = '>'
- class scapy.contrib.rtps.rtps.RTPSSubMessage_INFO_TS(_pkt, /, *, submessageId=9, submessageFlags=<Flag 0 ()>, octetsToNextHeader=0, ts_seconds=0, ts_fraction=0)[source]
Bases:
EPacket0…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'>]
- class scapy.contrib.rtps.rtps.RTPSSubMessage_PAD(_pkt, /, *, submessageId=1, submessageFlags=0, octetsToNextHeader=0)[source]
Bases:
EPacket0…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'>]
- 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'>]
- 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'>]
- 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'>]
- 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'>]