scapy.contrib.dicom

DICOM (Digital Imaging and Communications in Medicine) Protocol Reference: DICOM PS3.8 - Network Communication Support for Message Exchange https://dicom.nema.org/medical/dicom/current/output/html/part08.html

class scapy.contrib.dicom.A_ABORT(_pkt, /, *, reserved1=0, reserved2=0, source=0, reason_diag=0)[source]

Bases: Packet

A-ABORT PDU for aborting DICOM associations.

SOURCE_CODES = {0: 'DICOM UL service-user', 2: 'DICOM UL service-provider'}
aliastypes = [<class 'scapy.contrib.dicom.A_ABORT'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (A_ABORT).reserved1>, <ByteField (A_ABORT).reserved2>, <ByteEnumField (A_ABORT).source>, <ByteField (A_ABORT).reason_diag>]
mysummary() str[source]
class scapy.contrib.dicom.A_ASSOCIATE_AC(_pkt, /, *, protocol_version=1, reserved1=0, called_ae_title=b'', calling_ae_title=b'', reserved2=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', variable_items=[])[source]

Bases: Packet

A-ASSOCIATE-AC PDU for accepting DICOM associations.

aliastypes = [<class 'scapy.contrib.dicom.A_ASSOCIATE_AC'>, <class 'scapy.packet.Packet'>]
answers(other: Packet) bool[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortField (A_ASSOCIATE_AC).protocol_version>, <ShortField (A_ASSOCIATE_AC).reserved1>, <DICOMAETitleField (A_ASSOCIATE_AC).called_ae_title>, <DICOMAETitleField (A_ASSOCIATE_AC).calling_ae_title>, <StrFixedLenField (A_ASSOCIATE_AC).reserved2>, <PacketListField (A_ASSOCIATE_AC).variable_items>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.A_ASSOCIATE_RJ(_pkt, /, *, reserved1=0, result=1, source=1, reason_diag=1)[source]

Bases: Packet

A-ASSOCIATE-RJ PDU for rejecting DICOM associations.

RESULT_CODES = {1: 'rejected-permanent', 2: 'rejected-transient'}
SOURCE_CODES = {1: 'DICOM UL service-user', 2: 'DICOM UL service-provider (ACSE)', 3: 'DICOM UL service-provider (Presentation)'}
aliastypes = [<class 'scapy.contrib.dicom.A_ASSOCIATE_RJ'>, <class 'scapy.packet.Packet'>]
answers(other: Packet) bool[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (A_ASSOCIATE_RJ).reserved1>, <ByteEnumField (A_ASSOCIATE_RJ).result>, <ByteEnumField (A_ASSOCIATE_RJ).source>, <ByteField (A_ASSOCIATE_RJ).reason_diag>]
mysummary() str[source]
class scapy.contrib.dicom.A_ASSOCIATE_RQ(_pkt, /, *, protocol_version=1, reserved1=0, called_ae_title=b'', calling_ae_title=b'', reserved2=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', variable_items=[])[source]

Bases: Packet

A-ASSOCIATE-RQ PDU for initiating DICOM associations.

aliastypes = [<class 'scapy.contrib.dicom.A_ASSOCIATE_RQ'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortField (A_ASSOCIATE_RQ).protocol_version>, <ShortField (A_ASSOCIATE_RQ).reserved1>, <DICOMAETitleField (A_ASSOCIATE_RQ).called_ae_title>, <DICOMAETitleField (A_ASSOCIATE_RQ).calling_ae_title>, <StrFixedLenField (A_ASSOCIATE_RQ).reserved2>, <PacketListField (A_ASSOCIATE_RQ).variable_items>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.A_RELEASE_RP(_pkt, /, *, reserved1=0)[source]

Bases: Packet

A-RELEASE-RP PDU for confirming association release.

aliastypes = [<class 'scapy.contrib.dicom.A_RELEASE_RP'>, <class 'scapy.packet.Packet'>]
answers(other: Packet) bool[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<IntField (A_RELEASE_RP).reserved1>]
mysummary() str[source]
class scapy.contrib.dicom.A_RELEASE_RQ(_pkt, /, *, reserved1=0)[source]

Bases: Packet

A-RELEASE-RQ PDU for requesting association release.

aliastypes = [<class 'scapy.contrib.dicom.A_RELEASE_RQ'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<IntField (A_RELEASE_RQ).reserved1>]
mysummary() str[source]
class scapy.contrib.dicom.C_ECHO_RQ(_pkt, /, *, affected_sop_class_uid='1.2.840.10008.1.1', command_field=48, message_id=1, data_set_type=257)[source]

Bases: DIMSEPacket

C-ECHO-RQ DIMSE Command for verification.

aliastypes = [<class 'scapy.contrib.dicom.C_ECHO_RQ'>, <class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<DICOMUIDField (C_ECHO_RQ).affected_sop_class_uid>, <DICOMUSField (C_ECHO_RQ).command_field>, <DICOMUSField (C_ECHO_RQ).message_id>, <DICOMUSField (C_ECHO_RQ).data_set_type>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.C_ECHO_RSP(_pkt, /, *, affected_sop_class_uid='1.2.840.10008.1.1', command_field=32816, message_id_responded=1, data_set_type=257, status=0)[source]

Bases: DIMSEPacket

C-ECHO-RSP DIMSE Response.

aliastypes = [<class 'scapy.contrib.dicom.C_ECHO_RSP'>, <class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
answers(other: Packet) int[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<DICOMUIDField (C_ECHO_RSP).affected_sop_class_uid>, <DICOMUSField (C_ECHO_RSP).command_field>, <DICOMUSField (C_ECHO_RSP).message_id_responded>, <DICOMUSField (C_ECHO_RSP).data_set_type>, <DICOMUSField (C_ECHO_RSP).status>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.C_FIND_RQ(_pkt, /, *, affected_sop_class_uid='1.2.840.10008.5.1.4.1.2.1.1', command_field=32, message_id=1, priority=2, data_set_type=0)[source]

Bases: DIMSEPacket

C-FIND-RQ DIMSE Command for querying DICOM objects.

aliastypes = [<class 'scapy.contrib.dicom.C_FIND_RQ'>, <class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<DICOMUIDField (C_FIND_RQ).affected_sop_class_uid>, <DICOMUSField (C_FIND_RQ).command_field>, <DICOMUSField (C_FIND_RQ).message_id>, <DICOMUSField (C_FIND_RQ).priority>, <DICOMUSField (C_FIND_RQ).data_set_type>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.C_FIND_RSP(_pkt, /, *, affected_sop_class_uid='1.2.840.10008.5.1.4.1.2.1.1', command_field=32800, message_id_responded=1, data_set_type=257, status=0)[source]

Bases: DIMSEPacket

C-FIND-RSP DIMSE Response.

aliastypes = [<class 'scapy.contrib.dicom.C_FIND_RSP'>, <class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
answers(other: Packet) int[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<DICOMUIDField (C_FIND_RSP).affected_sop_class_uid>, <DICOMUSField (C_FIND_RSP).command_field>, <DICOMUSField (C_FIND_RSP).message_id_responded>, <DICOMUSField (C_FIND_RSP).data_set_type>, <DICOMUSField (C_FIND_RSP).status>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.C_GET_RQ(_pkt, /, *, affected_sop_class_uid='1.2.840.10008.5.1.4.1.2.1.3', command_field=16, message_id=1, priority=2, data_set_type=0)[source]

Bases: DIMSEPacket

C-GET-RQ DIMSE Command for retrieving objects on same association.

aliastypes = [<class 'scapy.contrib.dicom.C_GET_RQ'>, <class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<DICOMUIDField (C_GET_RQ).affected_sop_class_uid>, <DICOMUSField (C_GET_RQ).command_field>, <DICOMUSField (C_GET_RQ).message_id>, <DICOMUSField (C_GET_RQ).priority>, <DICOMUSField (C_GET_RQ).data_set_type>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.C_GET_RSP(_pkt, /, *, affected_sop_class_uid='1.2.840.10008.5.1.4.1.2.1.3', command_field=32784, message_id_responded=1, data_set_type=257, status=0, num_remaining=0, num_completed=0, num_failed=0, num_warning=0)[source]

Bases: DIMSEPacket

C-GET-RSP DIMSE Response.

aliastypes = [<class 'scapy.contrib.dicom.C_GET_RSP'>, <class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
answers(other: Packet) int[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<DICOMUIDField (C_GET_RSP).affected_sop_class_uid>, <DICOMUSField (C_GET_RSP).command_field>, <DICOMUSField (C_GET_RSP).message_id_responded>, <DICOMUSField (C_GET_RSP).data_set_type>, <DICOMUSField (C_GET_RSP).status>, <DICOMUSField (C_GET_RSP).num_remaining>, <DICOMUSField (C_GET_RSP).num_completed>, <DICOMUSField (C_GET_RSP).num_failed>, <DICOMUSField (C_GET_RSP).num_warning>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.C_MOVE_RQ(_pkt, /, *, affected_sop_class_uid='1.2.840.10008.5.1.4.1.2.1.2', command_field=33, message_id=1, priority=2, data_set_type=0, move_destination=b'')[source]

Bases: DIMSEPacket

C-MOVE-RQ DIMSE Command for retrieving DICOM objects.

aliastypes = [<class 'scapy.contrib.dicom.C_MOVE_RQ'>, <class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<DICOMUIDField (C_MOVE_RQ).affected_sop_class_uid>, <DICOMUSField (C_MOVE_RQ).command_field>, <DICOMUSField (C_MOVE_RQ).message_id>, <DICOMUSField (C_MOVE_RQ).priority>, <DICOMUSField (C_MOVE_RQ).data_set_type>, <DICOMAEDIMSEField (C_MOVE_RQ).move_destination>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.C_MOVE_RSP(_pkt, /, *, affected_sop_class_uid='1.2.840.10008.5.1.4.1.2.1.2', command_field=32801, message_id_responded=1, data_set_type=257, status=0, num_remaining=0, num_completed=0, num_failed=0, num_warning=0)[source]

Bases: DIMSEPacket

C-MOVE-RSP DIMSE Response.

aliastypes = [<class 'scapy.contrib.dicom.C_MOVE_RSP'>, <class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
answers(other: Packet) int[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<DICOMUIDField (C_MOVE_RSP).affected_sop_class_uid>, <DICOMUSField (C_MOVE_RSP).command_field>, <DICOMUSField (C_MOVE_RSP).message_id_responded>, <DICOMUSField (C_MOVE_RSP).data_set_type>, <DICOMUSField (C_MOVE_RSP).status>, <DICOMUSField (C_MOVE_RSP).num_remaining>, <DICOMUSField (C_MOVE_RSP).num_completed>, <DICOMUSField (C_MOVE_RSP).num_failed>, <DICOMUSField (C_MOVE_RSP).num_warning>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.C_STORE_RQ(_pkt, /, *, affected_sop_class_uid='1.2.840.10008.5.1.4.1.1.2', command_field=1, message_id=1, priority=2, data_set_type=0, affected_sop_instance_uid='1.2.3.4.5.6.7.8.9')[source]

Bases: DIMSEPacket

C-STORE-RQ DIMSE Command for storing DICOM objects.

aliastypes = [<class 'scapy.contrib.dicom.C_STORE_RQ'>, <class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<DICOMUIDField (C_STORE_RQ).affected_sop_class_uid>, <DICOMUSField (C_STORE_RQ).command_field>, <DICOMUSField (C_STORE_RQ).message_id>, <DICOMUSField (C_STORE_RQ).priority>, <DICOMUSField (C_STORE_RQ).data_set_type>, <DICOMUIDField (C_STORE_RQ).affected_sop_instance_uid>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.C_STORE_RSP(_pkt, /, *, affected_sop_class_uid='1.2.840.10008.5.1.4.1.1.2', command_field=32769, message_id_responded=1, data_set_type=257, status=0, affected_sop_instance_uid='1.2.3.4.5.6.7.8.9')[source]

Bases: DIMSEPacket

C-STORE-RSP DIMSE Response.

aliastypes = [<class 'scapy.contrib.dicom.C_STORE_RSP'>, <class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
answers(other: Packet) int[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<DICOMUIDField (C_STORE_RSP).affected_sop_class_uid>, <DICOMUSField (C_STORE_RSP).command_field>, <DICOMUSField (C_STORE_RSP).message_id_responded>, <DICOMUSField (C_STORE_RSP).data_set_type>, <DICOMUSField (C_STORE_RSP).status>, <DICOMUIDField (C_STORE_RSP).affected_sop_instance_uid>]
hashret() bytes[source]
mysummary() str[source]
class scapy.contrib.dicom.DICOM(_pkt, /, *, pdu_type=1, reserved1=0, length=None)[source]

Bases: Packet

DICOM Upper Layer (UL) PDU header.

aliastypes = [<class 'scapy.contrib.dicom.DICOM'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (DICOM).pdu_type>, <ByteField (DICOM).reserved1>, <LenField (DICOM).length>]
mysummary() str[source]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({'pdu_type': 1}, <class 'scapy.contrib.dicom.A_ASSOCIATE_RQ'>), ({'pdu_type': 2}, <class 'scapy.contrib.dicom.A_ASSOCIATE_AC'>), ({'pdu_type': 3}, <class 'scapy.contrib.dicom.A_ASSOCIATE_RJ'>), ({'pdu_type': 4}, <class 'scapy.contrib.dicom.P_DATA_TF'>), ({'pdu_type': 5}, <class 'scapy.contrib.dicom.A_RELEASE_RQ'>), ({'pdu_type': 6}, <class 'scapy.contrib.dicom.A_RELEASE_RP'>), ({'pdu_type': 7}, <class 'scapy.contrib.dicom.A_ABORT'>)]
class scapy.contrib.dicom.DICOMAEDIMSEField(name: str, default: Any, tag_group: int, tag_elem: int)[source]

Bases: DICOMElementField

DICOM AE element field for DIMSE - 16 bytes, space-padded.

addfield(pkt: Packet | None, s: bytes, val: Any) bytes[source]
i2repr(pkt: Packet | None, val: Any) str[source]
class scapy.contrib.dicom.DICOMAETitleField(name: str, default: bytes = b'')[source]

Bases: StrFixedLenField

DICOM AE Title field - 16 bytes, space-padded per PS3.5 Section 6.2.

i2m(pkt: Packet | None, val: Any) bytes[source]
i2repr(pkt: Packet | None, val: Any) str[source]
m2i(pkt: Packet | None, val: bytes) bytes[source]
class scapy.contrib.dicom.DICOMAbstractSyntax(_pkt, /, *, uid=b'')[source]

Bases: Packet

DICOM Abstract Syntax item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMAbstractSyntax'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<StrLenField (DICOMAbstractSyntax).uid>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMApplicationContext(_pkt, /, *, uid=b'1.2.840.10008.3.1.1.1\x00')[source]

Bases: Packet

DICOM Application Context item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMApplicationContext'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<StrLenField (DICOMApplicationContext).uid>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMAsyncOperationsWindow(_pkt, /, *, max_ops_invoked=1, max_ops_performed=1)[source]

Bases: Packet

DICOM Asynchronous Operations Window sub-item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMAsyncOperationsWindow'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortField (DICOMAsyncOperationsWindow).max_ops_invoked>, <ShortField (DICOMAsyncOperationsWindow).max_ops_performed>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMElementField(name: str, default: Any, tag_group: int, tag_elem: int)[source]

Bases: Field[bytes, bytes]

DICOM data element field with explicit tag and length encoding.

addfield(pkt: Packet | None, s: bytes, val: Any) bytes[source]
getfield(pkt: Packet | None, s: bytes) Tuple[bytes, bytes][source]
i2repr(pkt: Packet | None, val: Any) str[source]
randval() RandString[source]
tag_elem
tag_group
class scapy.contrib.dicom.DICOMImplementationClassUID(_pkt, /, *, uid=b'')[source]

Bases: Packet

DICOM Implementation Class UID sub-item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMImplementationClassUID'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<StrLenField (DICOMImplementationClassUID).uid>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMImplementationVersionName(_pkt, /, *, name='DICOM Implementation Version Name')[source]

Bases: Packet

DICOM Implementation Version Name sub-item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMImplementationVersionName'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<StrLenField (DICOMImplementationVersionName).name>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMMaximumLength(_pkt, /, *, max_pdu_length=16384)[source]

Bases: Packet

DICOM Maximum Length sub-item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMMaximumLength'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<IntField (DICOMMaximumLength).max_pdu_length>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMPresentationContextAC(_pkt, /, *, context_id=1, reserved1=0, result=0, reserved2=0, sub_items=[])[source]

Bases: Packet

DICOM Presentation Context item for association accepts.

RESULT_CODES = {0: 'acceptance', 1: 'user-rejection', 2: 'no-reason', 3: 'abstract-syntax-not-supported', 4: 'transfer-syntaxes-not-supported'}
aliastypes = [<class 'scapy.contrib.dicom.DICOMPresentationContextAC'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (DICOMPresentationContextAC).context_id>, <ByteField (DICOMPresentationContextAC).reserved1>, <ByteEnumField (DICOMPresentationContextAC).result>, <ByteField (DICOMPresentationContextAC).reserved2>, <PacketListField (DICOMPresentationContextAC).sub_items>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMPresentationContextRQ(_pkt, /, *, context_id=1, reserved1=0, reserved2=0, reserved3=0, sub_items=[])[source]

Bases: Packet

DICOM Presentation Context item for association requests.

aliastypes = [<class 'scapy.contrib.dicom.DICOMPresentationContextRQ'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (DICOMPresentationContextRQ).context_id>, <ByteField (DICOMPresentationContextRQ).reserved1>, <ByteField (DICOMPresentationContextRQ).reserved2>, <ByteField (DICOMPresentationContextRQ).reserved3>, <PacketListField (DICOMPresentationContextRQ).sub_items>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMSCPSCURoleSelection(_pkt, /, *, uid_length=None, sop_class_uid=b'', scu_role=0, scp_role=0)[source]

Bases: Packet

DICOM SCP/SCU Role Selection sub-item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMSCPSCURoleSelection'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FieldLenField (DICOMSCPSCURoleSelection).uid_length>, <StrLenField (DICOMSCPSCURoleSelection).sop_class_uid>, <ByteField (DICOMSCPSCURoleSelection).scu_role>, <ByteField (DICOMSCPSCURoleSelection).scp_role>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMSOPClassCommonExtendedNegotiation(_pkt, /, *, sop_class_uid_length=None, sop_class_uid=b'', service_class_uid_length=None, service_class_uid=b'', related_sop_class_uid_length=None, related_sop_class_uids=b'')[source]

Bases: Packet

DICOM SOP Class Common Extended Negotiation sub-item (PS3.7 D.3.3.6).

aliastypes = [<class 'scapy.contrib.dicom.DICOMSOPClassCommonExtendedNegotiation'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FieldLenField (DICOMSOPClassCommonExtendedNegotiation).sop_class_uid_length>, <StrLenField (DICOMSOPClassCommonExtendedNegotiation).sop_class_uid>, <FieldLenField (DICOMSOPClassCommonExtendedNegotiation).service_class_uid_length>, <StrLenField (DICOMSOPClassCommonExtendedNegotiation).service_class_uid>, <FieldLenField (DICOMSOPClassCommonExtendedNegotiation).related_sop_class_uid_length>, <StrLenField (DICOMSOPClassCommonExtendedNegotiation).related_sop_class_uids>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMSOPClassExtendedNegotiation(_pkt, /, *, sop_class_uid_length=None, sop_class_uid=b'', service_class_application_information=b'')[source]

Bases: Packet

DICOM SOP Class Extended Negotiation sub-item (PS3.7 D.3.3.5).

aliastypes = [<class 'scapy.contrib.dicom.DICOMSOPClassExtendedNegotiation'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FieldLenField (DICOMSOPClassExtendedNegotiation).sop_class_uid_length>, <StrLenField (DICOMSOPClassExtendedNegotiation).sop_class_uid>, <StrLenField (DICOMSOPClassExtendedNegotiation).service_class_application_information>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMSocket(dst_ip: str, dst_port: int, dst_ae: str, src_ae: str = 'SCAPY_SCU', read_timeout: int = 10)[source]

Bases: object

DICOM application-layer socket for associations and DIMSE operations.

accepted_contexts: Dict[int, Tuple[str, str]]
associate(requested_contexts: Dict[str, List[str]] | None = None) bool[source]
c_echo() int | None[source]
c_store(dataset_bytes: bytes, sop_class_uid: str, sop_instance_uid: str, transfer_syntax_uid: str) int | None[source]
close() None[source]
connect() bool[source]
recv() Packet | None[source]
release() bool[source]
send(pkt: Packet) None[source]
send_raw_bytes(raw_bytes: bytes) None[source]
sock: socket | None
sr1(*args: Any, **kargs: Any) Packet | None[source]

Send one packet and receive one answer.

stream: StreamSocket | None
class scapy.contrib.dicom.DICOMTransferSyntax(_pkt, /, *, uid=b'1.2.840.10008.1.2\x00')[source]

Bases: Packet

DICOM Transfer Syntax item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMTransferSyntax'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<StrLenField (DICOMTransferSyntax).uid>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMUIDField(name: str, default: Any, tag_group: int, tag_elem: int)[source]

Bases: DICOMElementField

DICOM UID element field with automatic even-length padding.

addfield(pkt: Packet | None, s: bytes, val: Any) bytes[source]
i2repr(pkt: Packet | None, val: Any) str[source]
randval() str[source]
class scapy.contrib.dicom.DICOMUIDFieldRaw(name: str, default: Any, tag_group: int, tag_elem: int)[source]

Bases: DICOMElementField

DICOM UID element field without automatic padding.

addfield(pkt: Packet | None, s: bytes, val: Any) bytes[source]
class scapy.contrib.dicom.DICOMULField(name: str, default: Any, tag_group: int, tag_elem: int)[source]

Bases: DICOMElementField

DICOM Unsigned Long (UL) element field.

addfield(pkt: Packet | None, s: bytes, val: int) bytes[source]
getfield(pkt: Packet | None, s: bytes) Tuple[bytes, int][source]
randval() RandInt[source]
class scapy.contrib.dicom.DICOMUSField(name: str, default: Any, tag_group: int, tag_elem: int)[source]

Bases: DICOMElementField

DICOM Unsigned Short (US) element field.

addfield(pkt: Packet | None, s: bytes, val: int) bytes[source]
getfield(pkt: Packet | None, s: bytes) Tuple[bytes, int][source]
i2repr(pkt: Packet | None, val: Any) str[source]
randval() RandShort[source]
class scapy.contrib.dicom.DICOMUserIdentity(_pkt, /, *, user_identity_type=1, positive_response_requested=0, primary_field_length=None, primary_field=b'', secondary_field_length=None, secondary_field=b'')[source]

Bases: Packet

DICOM User Identity sub-item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMUserIdentity'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (DICOMUserIdentity).user_identity_type>, <ByteField (DICOMUserIdentity).positive_response_requested>, <FieldLenField (DICOMUserIdentity).primary_field_length>, <StrLenField (DICOMUserIdentity).primary_field>, <scapy.fields.ConditionalField object>, <scapy.fields.ConditionalField object>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMUserIdentityResponse(_pkt, /, *, response_length=None, server_response=b'')[source]

Bases: Packet

DICOM User Identity Server Response sub-item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMUserIdentityResponse'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FieldLenField (DICOMUserIdentityResponse).response_length>, <StrLenField (DICOMUserIdentityResponse).server_response>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMUserInformation(_pkt, /, *, sub_items=[])[source]

Bases: Packet

DICOM User Information item.

aliastypes = [<class 'scapy.contrib.dicom.DICOMUserInformation'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<PacketListField (DICOMUserInformation).sub_items>]
mysummary() str[source]
class scapy.contrib.dicom.DICOMVariableItem(_pkt, /, *, item_type=16, reserved=0, length=None)[source]

Bases: Packet

DICOM variable item header with type and length fields.

aliastypes = [<class 'scapy.contrib.dicom.DICOMVariableItem'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (DICOMVariableItem).item_type>, <ByteField (DICOMVariableItem).reserved>, <LenField (DICOMVariableItem).length>]
guess_payload_class(payload: bytes) type[source]
mysummary() str[source]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({'item_type': 16}, <class 'scapy.contrib.dicom.DICOMApplicationContext'>), ({'item_type': 32}, <class 'scapy.contrib.dicom.DICOMPresentationContextRQ'>), ({'item_type': 33}, <class 'scapy.contrib.dicom.DICOMPresentationContextAC'>), ({'item_type': 48}, <class 'scapy.contrib.dicom.DICOMAbstractSyntax'>), ({'item_type': 64}, <class 'scapy.contrib.dicom.DICOMTransferSyntax'>), ({'item_type': 80}, <class 'scapy.contrib.dicom.DICOMUserInformation'>), ({'item_type': 81}, <class 'scapy.contrib.dicom.DICOMMaximumLength'>), ({'item_type': 82}, <class 'scapy.contrib.dicom.DICOMImplementationClassUID'>), ({'item_type': 83}, <class 'scapy.contrib.dicom.DICOMAsyncOperationsWindow'>), ({'item_type': 84}, <class 'scapy.contrib.dicom.DICOMSCPSCURoleSelection'>), ({'item_type': 85}, <class 'scapy.contrib.dicom.DICOMImplementationVersionName'>), ({'item_type': 86}, <class 'scapy.contrib.dicom.DICOMSOPClassExtendedNegotiation'>), ({'item_type': 87}, <class 'scapy.contrib.dicom.DICOMSOPClassCommonExtendedNegotiation'>), ({'item_type': 88}, <class 'scapy.contrib.dicom.DICOMUserIdentity'>), ({'item_type': 89}, <class 'scapy.contrib.dicom.DICOMUserIdentityResponse'>), ({}, <class 'scapy.contrib.dicom.DICOMGenericItem'>)]
class scapy.contrib.dicom.DIMSEPacket(_pkt, /)[source]

Bases: Packet

Base class for DIMSE command packets with automatic group length.

GROUP_LENGTH_ELEMENT_SIZE = 12
aliastypes = [<class 'scapy.contrib.dicom.DIMSEPacket'>, <class 'scapy.packet.Packet'>]
post_build(pkt: bytes, pay: bytes) bytes[source]
class scapy.contrib.dicom.P_DATA_TF(_pkt, /, *, pdv_items=[])[source]

Bases: Packet

P-DATA-TF PDU for transferring DICOM data.

aliastypes = [<class 'scapy.contrib.dicom.P_DATA_TF'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<PacketListField (P_DATA_TF).pdv_items>]
mysummary() str[source]
class scapy.contrib.dicom.PresentationDataValueItem(_pkt, /, *, length=None, context_id=1, reserved_bits=0, is_last=0, is_command=0, data=b'')[source]

Bases: Packet

Presentation Data Value (PDV) item within P-DATA-TF PDU.

aliastypes = [<class 'scapy.contrib.dicom.PresentationDataValueItem'>, <class 'scapy.packet.Packet'>]
extract_padding(s: bytes) Tuple[bytes, bytes][source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FieldLenField (PresentationDataValueItem).length>, <ByteField (PresentationDataValueItem).context_id>, <BitField (PresentationDataValueItem).reserved_bits>, <BitField (PresentationDataValueItem).is_last>, <BitField (PresentationDataValueItem).is_command>, <StrLenField (PresentationDataValueItem).data>]
mysummary() str[source]
scapy.contrib.dicom.build_presentation_context_rq(context_id: int, abstract_syntax_uid: str, transfer_syntax_uids: List[str]) Packet[source]

Build a Presentation Context RQ item.

scapy.contrib.dicom.build_user_information(max_pdu_length: int = 16384, implementation_class_uid: str | None = None, implementation_version: str | bytes | None = None) Packet[source]

Build a User Information item.

scapy.contrib.dicom.parse_dimse_status(dimse_bytes: bytes) int | None[source]

Extract status code from DIMSE response bytes.