Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/scapy/layers/msrpce/raw/ept.py: 96%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

28 statements  

1# SPDX-License-Identifier: GPL-2.0-only 

2# This file is part of Scapy 

3# See https://scapy.net/ for more information 

4# Copyright (C) Gabriel Potter 

5 

6""" 

7Very partial RPC definitions for the following interfaces: 

8- ept (v3.0): e1af8308-5d1f-11c9-91a4-08002b14a0fa 

9""" 

10 

11import uuid 

12 

13from scapy.fields import StrFixedLenField 

14from scapy.layers.dcerpc import ( 

15 register_dcerpc_interface, 

16 DceRpcOp, 

17 NDRConfStrLenField, 

18 NDRConfVarPacketListField, 

19 NDRContextHandle, 

20 NDRFullPointerField, 

21 NDRIntField, 

22 NDRPacket, 

23 NDRPacketField, 

24 NDRShortField, 

25 NDRVarStrLenField, 

26) 

27 

28 

29class UUID(NDRPacket): 

30 ALIGNMENT = (4, 4) 

31 fields_desc = [ 

32 NDRIntField("Data1", 0), 

33 NDRShortField("Data2", 0), 

34 NDRShortField("Data3", 0), 

35 StrFixedLenField("Data4", "", length=8), 

36 ] 

37 

38 

39class twr_p_t(NDRPacket): 

40 ALIGNMENT = (4, 8) 

41 DEPORTED_CONFORMANTS = ["tower_octet_string"] 

42 fields_desc = [ 

43 NDRIntField("tower_length", None, size_of="tower_octet_string"), 

44 NDRConfStrLenField( 

45 "tower_octet_string", 

46 "", 

47 length_from=lambda pkt: pkt.tower_length, 

48 conformant_in_struct=True, 

49 ), 

50 ] 

51 

52 

53class ept_entry_t(NDRPacket): 

54 ALIGNMENT = (4, 8) 

55 fields_desc = [ 

56 NDRPacketField("object", UUID(), UUID), 

57 NDRFullPointerField(NDRPacketField("tower", twr_p_t(), twr_p_t), deferred=True), 

58 NDRVarStrLenField("annotation", ""), 

59 ] 

60 

61 

62class RPC_IF_ID(NDRPacket): 

63 ALIGNMENT = (4, 4) 

64 fields_desc = [ 

65 NDRPacketField("Uuid", UUID(), UUID), 

66 NDRShortField("VersMajor", 0), 

67 NDRShortField("VersMinor", 0), 

68 ] 

69 

70 

71class ept_lookup_Request(NDRPacket): 

72 fields_desc = [ 

73 NDRIntField("inquiry_type", 0), 

74 NDRFullPointerField(NDRPacketField("object", UUID(), UUID)), 

75 NDRFullPointerField(NDRPacketField("Ifid", RPC_IF_ID(), RPC_IF_ID)), 

76 NDRIntField("vers_option", 0), 

77 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle), 

78 NDRIntField("max_ents", 0), 

79 ] 

80 

81 

82class ept_lookup_Response(NDRPacket): 

83 fields_desc = [ 

84 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle), 

85 NDRIntField("num_ents", None, size_of="entries"), 

86 NDRConfVarPacketListField( 

87 "entries", 

88 [], 

89 ept_entry_t, 

90 size_is=lambda pkt: pkt.max_ents, 

91 length_is=lambda pkt: pkt.num_ents, 

92 ), 

93 NDRIntField("status", 0), 

94 ] 

95 

96 

97class ept_map_Request(NDRPacket): 

98 fields_desc = [ 

99 NDRFullPointerField(NDRPacketField("obj", UUID(), UUID)), 

100 NDRFullPointerField(NDRPacketField("map_tower", twr_p_t(), twr_p_t)), 

101 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle), 

102 NDRIntField("max_towers", 0), 

103 ] 

104 

105 

106class ept_map_Response(NDRPacket): 

107 fields_desc = [ 

108 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle), 

109 NDRIntField("num_towers", None, size_of="ITowers"), 

110 NDRConfVarPacketListField( 

111 "ITowers", [], twr_p_t, count_from=lambda pkt: pkt.num_towers, ptr_pack=True 

112 ), 

113 NDRIntField("status", 0), 

114 ] 

115 

116 

117EPT_OPNUMS = { 

118 2: DceRpcOp(ept_lookup_Request, ept_lookup_Response), 

119 3: DceRpcOp(ept_map_Request, ept_map_Response), 

120} 

121register_dcerpc_interface( 

122 name="ept", 

123 uuid=uuid.UUID("e1af8308-5d1f-11c9-91a4-08002b14a0fa"), 

124 version="3.0", 

125 opnums=EPT_OPNUMS, 

126)