1# SPDX-License-Identifier: GPL-2.0-only
2# This file is part of Scapy RPC
3# See https://scapy.net/ for more information
4# Copyright (C) Gabriel Potter
5
6# ept.idl compiled on 06/07/2025
7# This file is a stripped version ! Use scapy-rpc for the full.
8"""
9RPC definitions for the following interfaces:
10- ept (v3.0): e1af8308-5d1f-11c9-91a4-08002b14a0fa
11This file is auto-generated by midl-to-scapy, do not modify.
12"""
13
14import uuid
15
16from scapy.fields import PacketListField, StrFixedLenField
17from scapy.layers.dcerpc import (
18 NDRPacket,
19 DceRpcOp,
20 NDRConfStrLenField,
21 NDRConfVarPacketListField,
22 NDRContextHandle,
23 NDRFullEmbPointerField,
24 NDRFullPointerField,
25 NDRIntField,
26 NDRPacketField,
27 NDRShortField,
28 NDRVarStrLenField,
29 register_dcerpc_interface,
30)
31
32
33class UUID(NDRPacket):
34 ALIGNMENT = (4, 4)
35 fields_desc = [
36 NDRIntField("Data1", 0),
37 NDRShortField("Data2", 0),
38 NDRShortField("Data3", 0),
39 StrFixedLenField("Data4", "", length=8),
40 ]
41
42
43class RPC_IF_ID(NDRPacket):
44 ALIGNMENT = (4, 4)
45 fields_desc = [
46 NDRPacketField("Uuid", UUID(), UUID),
47 NDRShortField("VersMajor", 0),
48 NDRShortField("VersMinor", 0),
49 ]
50
51
52class twr_p_t(NDRPacket):
53 ALIGNMENT = (4, 8)
54 DEPORTED_CONFORMANTS = ["tower_octet_string"]
55 fields_desc = [
56 NDRIntField("tower_length", None, size_of="tower_octet_string"),
57 NDRConfStrLenField(
58 "tower_octet_string",
59 "",
60 size_is=lambda pkt: pkt.tower_length,
61 conformant_in_struct=True,
62 ),
63 ]
64
65
66class ept_entry_t(NDRPacket):
67 ALIGNMENT = (4, 8)
68 fields_desc = [
69 NDRPacketField("object", UUID(), UUID),
70 NDRFullEmbPointerField(NDRPacketField("tower", twr_p_t(), twr_p_t)),
71 NDRVarStrLenField("annotation", ""),
72 ]
73
74
75class ept_lookup_Request(NDRPacket):
76 fields_desc = [
77 NDRIntField("inquiry_type", 0),
78 NDRFullPointerField(NDRPacketField("object", UUID(), UUID)),
79 NDRFullPointerField(NDRPacketField("Ifid", RPC_IF_ID(), RPC_IF_ID)),
80 NDRIntField("vers_option", 0),
81 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle),
82 NDRIntField("max_ents", 0),
83 ]
84
85
86class ept_lookup_Response(NDRPacket):
87 fields_desc = [
88 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle),
89 NDRIntField("num_ents", None, size_of="entries"),
90 NDRConfVarPacketListField(
91 "entries",
92 [],
93 ept_entry_t,
94 size_is=lambda pkt: pkt.max_ents,
95 length_is=lambda pkt: pkt.num_ents,
96 ),
97 NDRIntField("status", 0),
98 ]
99
100
101class ept_map_Request(NDRPacket):
102 fields_desc = [
103 NDRFullPointerField(NDRPacketField("obj", UUID(), UUID)),
104 NDRFullPointerField(NDRPacketField("map_tower", twr_p_t(), twr_p_t)),
105 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle),
106 NDRIntField("max_towers", 0),
107 ]
108
109
110class ept_map_Response(NDRPacket):
111 fields_desc = [
112 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle),
113 NDRIntField("num_towers", None, size_of="ITowers"),
114 NDRConfVarPacketListField(
115 "ITowers",
116 [],
117 twr_p_t,
118 size_is=lambda pkt: pkt.max_towers,
119 length_is=lambda pkt: pkt.num_towers,
120 ptr_pack=True,
121 ),
122 NDRIntField("status", 0),
123 ]
124
125
126EPT_OPNUMS = {
127 2: DceRpcOp(ept_lookup_Request, ept_lookup_Response),
128 3: DceRpcOp(ept_map_Request, ept_map_Response),
129}
130register_dcerpc_interface(
131 name="ept",
132 uuid=uuid.UUID("e1af8308-5d1f-11c9-91a4-08002b14a0fa"),
133 version="3.0",
134 opnums=EPT_OPNUMS,
135)