A Wrapper around StreamSocket that uses a DceRpcSession
| 3282 | |
| 3283 | |
| 3284 | class DceRpcSocket(StreamSocket): |
| 3285 | """ |
| 3286 | A Wrapper around StreamSocket that uses a DceRpcSession |
| 3287 | """ |
| 3288 | |
| 3289 | def __init__(self, *args, **kwargs): |
| 3290 | self.transport = kwargs.pop("transport", None) |
| 3291 | self.session = DceRpcSession( |
| 3292 | ssp=kwargs.pop("ssp", None), |
| 3293 | auth_level=kwargs.pop("auth_level", None), |
| 3294 | support_header_signing=kwargs.pop("support_header_signing", True), |
| 3295 | ) |
| 3296 | super(DceRpcSocket, self).__init__(*args, **kwargs) |
| 3297 | |
| 3298 | def send(self, x, **kwargs): |
| 3299 | for pkt in self.session.out_pkt(x): |
| 3300 | if self.transport == DCERPC_Transport.NCACN_NP: |
| 3301 | # In this case DceRpcSocket wraps a SMB_RPC_SOCKET, call it directly. |
| 3302 | self.ins.send(pkt, **kwargs) |
| 3303 | else: |
| 3304 | super(DceRpcSocket, self).send(pkt, **kwargs) |
| 3305 | |
| 3306 | def recv(self, x=None): |
| 3307 | pkt = super(DceRpcSocket, self).recv(x) |
| 3308 | if pkt is not None: |
| 3309 | return self.session.in_pkt(pkt) |
| 3310 | |
| 3311 | |
| 3312 | # --- TODO cleanup below |
no outgoing calls
no test coverage detected
searching dependent graphs…