使用 pynetdicom 验证 DICOM 连接请求的最佳方法
Best way to validate DICOM connection request with pynetdicom
根据已知主机列表验证请求的 DICOM 连接的首选方法是什么?
我可以连接到 EVT_CONN_OPEN 事件。但是,event.assoc.requestor.info.ae_title 元素始终为空 (b'')。
我从 TCP 网络分析中看到,名称已传输。那么,它在哪里?
验证请求主机的正确方法是什么?
您可以尝试使用 EVT_REQUESTED
,它会在关联请求为 received/sent 后触发,此时 AE 标题信息应该可用。不幸的是 EVT_CONN_OPEN
在关联请求之前发生的 TCP 连接上触发。
如果您不喜欢房东的详细信息,您可以使用处理程序通过 event.assoc.acse.send_reject() or abort with event.assoc.abort() 发送关联拒绝消息。
如果您只对根据 AE 标题进行验证感兴趣,您可以使用 AE.require_calling_aet 属性 将关联限制为具有匹配 AE 标题的关联。
为了其他任何查找此内容的人的利益,查找此内容的正确阶段是在 EVT_REQUESTED 事件中。但是,您可能会发现未填写详细信息(它们是在调用处理程序后填充的)。
因此,如果您想在 EVT_REQUESTED 中找到调用者 AE,您需要找到 A_ASSOCIATE 原语并从那里读取它们。因此,例如在您的处理程序中,您可以这样做来拒绝遥控器:
def handle_request(event):
req_title = event.assoc.requestor.primitive.calling_ae_title.decode('ascii')
if req_title != 'MyAET':
event.assoc.acse.send_reject(0x01, 0x01, 0x03)
return
至少对于 1.5.7。
根据已知主机列表验证请求的 DICOM 连接的首选方法是什么? 我可以连接到 EVT_CONN_OPEN 事件。但是,event.assoc.requestor.info.ae_title 元素始终为空 (b'')。 我从 TCP 网络分析中看到,名称已传输。那么,它在哪里? 验证请求主机的正确方法是什么?
您可以尝试使用 EVT_REQUESTED
,它会在关联请求为 received/sent 后触发,此时 AE 标题信息应该可用。不幸的是 EVT_CONN_OPEN
在关联请求之前发生的 TCP 连接上触发。
如果您不喜欢房东的详细信息,您可以使用处理程序通过 event.assoc.acse.send_reject() or abort with event.assoc.abort() 发送关联拒绝消息。
如果您只对根据 AE 标题进行验证感兴趣,您可以使用 AE.require_calling_aet 属性 将关联限制为具有匹配 AE 标题的关联。
为了其他任何查找此内容的人的利益,查找此内容的正确阶段是在 EVT_REQUESTED 事件中。但是,您可能会发现未填写详细信息(它们是在调用处理程序后填充的)。
因此,如果您想在 EVT_REQUESTED 中找到调用者 AE,您需要找到 A_ASSOCIATE 原语并从那里读取它们。因此,例如在您的处理程序中,您可以这样做来拒绝遥控器:
def handle_request(event):
req_title = event.assoc.requestor.primitive.calling_ae_title.decode('ascii')
if req_title != 'MyAET':
event.assoc.acse.send_reject(0x01, 0x01, 0x03)
return
至少对于 1.5.7。