Skip to content

Conversation

@tmart234
Copy link

Summary

DICOM communications is used in medical imaging systems. This PR adds Scapy layers for the DICOM Upper Layer Protocol (DICOM PS3.8).

Features

  • Full PDU support: A-ASSOCIATE-RQ/AC/RJ, P-DATA-TF, A-RELEASE-RQ/RP, A-ABORT
  • Variable item negotiation: Application Context, Presentation Context, User Information, User Identity, Async Operations, Role Selection
  • DIMSE command packets: C-ECHO, C-STORE, C-FIND, C-MOVE, C-GET

Usage

from scapy.contrib.dicom import *

# Build an A-ASSOCIATE-RQ
pkt = DICOM() / A_ASSOCIATE_RQ(
    called_ae_title=_pad_ae_title("SERVER"),
    calling_ae_title=_pad_ae_title("CLIENT"),
    variable_items=[
        DICOMVariableItem() / DICOMApplicationContext(),
        build_presentation_context_rq(1, VERIFICATION_SOP_CLASS_UID, [DEFAULT_TRANSFER_SYNTAX_UID]),
        build_user_information(max_pdu_length=16384),
    ]
)

# Build a C-MOVE-RQ
move_rq = C_MOVE_RQ(message_id=1, move_destination=b"DEST_AE")

Testing

  • 59 unit tests in test/contrib/dicom.uts
  • All tests pass on Python 3.9+

References

@codecov
Copy link

codecov bot commented Dec 30, 2025

Codecov Report

❌ Patch coverage is 52.34708% with 335 lines in your changes missing coverage. Please review.
✅ Project coverage is 80.62%. Comparing base (a5bc2bb) to head (f5a706c).
⚠️ Report is 1 commits behind head on master.

Files with missing lines Patch % Lines
scapy/contrib/dicom.py 52.34% 335 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #4891      +/-   ##
==========================================
- Coverage   80.84%   80.62%   -0.23%     
==========================================
  Files         369      370       +1     
  Lines       90963    91671     +708     
==========================================
+ Hits        73539    73909     +370     
- Misses      17424    17762     +338     
Files with missing lines Coverage Δ
scapy/contrib/dicom.py 52.34% <52.34%> (ø)

... and 7 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@polydroi
Copy link

Thanks for the PR. I’ve stared the unit tests. Looks good, however, could you please add type hints to your layer?

@tmart234
Copy link
Author

Thanks for the PR. I’ve stared the unit tests. Looks good, however, could you please add type hints to your layer?

Added

@polybassa
Copy link
Contributor

Besides the small Flake8 issues, LGTM.

@gpotter2 do you want to have a final look?

polybassa
polybassa previously approved these changes Jan 9, 2026
@tmart234
Copy link
Author

tmart234 commented Jan 9, 2026

@polybassa fixed the Flake8 issues

@polybassa polybassa requested a review from gpotter2 January 9, 2026 19:24
@gpotter2
Copy link
Member

I trust you @polybassa !

@gpotter2 gpotter2 requested review from Copilot and removed request for gpotter2 January 11, 2026 12:35
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds comprehensive support for the DICOM (Digital Imaging and Communications in Medicine) Upper Layer Protocol to Scapy, enabling network analysis and interaction with medical imaging systems. The implementation follows the DICOM PS3.8 specification and includes extensive packet definitions for protocol negotiation, data transfer, and DIMSE commands.

Changes:

  • Added complete DICOM protocol layer implementation with PDU types, variable items, and DIMSE command packets
  • Implemented a high-level DICOMSocket class for association management and DIMSE operations
  • Added 59 comprehensive unit tests covering packet construction, parsing, and round-trip serialization

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 8 comments.

File Description
scapy/contrib/dicom.py Main implementation file containing DICOM packet classes, field types, PDU definitions, DIMSE commands, and DICOMSocket for application-level operations
test/contrib/dicom.uts Comprehensive test suite with 59 tests covering module loading, PDU construction/parsing, variable items, DIMSE packets, helper functions, and edge cases

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@polybassa
Copy link
Contributor

I trust you @polybassa !

Thanks. I've added the last two copilot finding.

@polybassa polybassa enabled auto-merge (squash) January 11, 2026 19:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants