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

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

31 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- srvsvc (v3.0): 4B324FC8-1670-01D3-1278-5A47BF6EE188 

9""" 

10 

11import uuid 

12 

13from scapy.fields import StrFixedLenField 

14from scapy.layers.dcerpc import ( 

15 register_dcerpc_interface, 

16 DceRpcOp, 

17 NDRConfPacketListField, 

18 NDRConfVarStrNullFieldUtf16, 

19 NDRFullPointerField, 

20 NDRIntField, 

21 NDRPacket, 

22 NDRPacketField, 

23 NDRUnionField, 

24) 

25 

26 

27class LPSHARE_INFO_1(NDRPacket): 

28 ALIGNMENT = (4, 8) 

29 fields_desc = [ 

30 NDRFullPointerField( 

31 NDRConfVarStrNullFieldUtf16("shi1_netname", ""), deferred=True 

32 ), 

33 NDRIntField("shi1_type", 0), 

34 NDRFullPointerField( 

35 NDRConfVarStrNullFieldUtf16("shi1_remark", ""), deferred=True 

36 ), 

37 ] 

38 

39 

40class SHARE_INFO_1_CONTAINER(NDRPacket): 

41 ALIGNMENT = (4, 8) 

42 fields_desc = [ 

43 NDRIntField("EntriesRead", None, size_of="Buffer"), 

44 NDRFullPointerField( 

45 NDRConfPacketListField( 

46 "Buffer", 

47 [LPSHARE_INFO_1()], 

48 LPSHARE_INFO_1, 

49 count_from=lambda pkt: pkt.EntriesRead, 

50 ), 

51 deferred=True, 

52 ), 

53 ] 

54 

55 

56class LPSHARE_ENUM_STRUCT(NDRPacket): 

57 ALIGNMENT = (4, 8) 

58 fields_desc = [ 

59 NDRIntField("Level", 0), 

60 NDRUnionField( 

61 [ 

62 ( 

63 NDRFullPointerField( 

64 NDRPacketField( 

65 "ShareInfo", 

66 SHARE_INFO_1_CONTAINER(), 

67 SHARE_INFO_1_CONTAINER, 

68 ), 

69 deferred=True, 

70 ), 

71 ( 

72 (lambda pkt: getattr(pkt, "Level", None) == 1), 

73 (lambda _, val: val.tag == 1), 

74 ), 

75 ), 

76 ], 

77 StrFixedLenField("ShareInfo", "", length=0), 

78 align=(4, 8), 

79 switch_fmt=("L", "L"), 

80 ), 

81 ] 

82 

83 

84class NetrShareEnum_Request(NDRPacket): 

85 fields_desc = [ 

86 NDRFullPointerField(NDRConfVarStrNullFieldUtf16("ServerName", "")), 

87 NDRPacketField("InfoStruct", LPSHARE_ENUM_STRUCT(), LPSHARE_ENUM_STRUCT), 

88 NDRIntField("PreferedMaximumLength", 0), 

89 NDRFullPointerField(NDRIntField("ResumeHandle", 0)), 

90 ] 

91 

92 

93class NetrShareEnum_Response(NDRPacket): 

94 fields_desc = [ 

95 NDRPacketField("InfoStruct", LPSHARE_ENUM_STRUCT(), LPSHARE_ENUM_STRUCT), 

96 NDRIntField("TotalEntries", 0), 

97 NDRFullPointerField(NDRIntField("ResumeHandle", 0)), 

98 NDRIntField("status", 0), 

99 ] 

100 

101 

102class NetrShareGetInfo_Request(NDRPacket): 

103 fields_desc = [ 

104 NDRFullPointerField(NDRConfVarStrNullFieldUtf16("ServerName", "")), 

105 NDRConfVarStrNullFieldUtf16("NetName", ""), 

106 NDRIntField("Level", 0), 

107 ] 

108 

109 

110class NetrShareGetInfo_Response(NDRPacket): 

111 fields_desc = [ 

112 NDRUnionField( 

113 [ 

114 ( 

115 NDRFullPointerField( 

116 NDRPacketField("ShareInfo", LPSHARE_INFO_1(), LPSHARE_INFO_1) 

117 ), 

118 ( 

119 (lambda pkt: getattr(pkt, "Level", None) == 1), 

120 (lambda _, val: val.tag == 1), 

121 ), 

122 ), 

123 ], 

124 StrFixedLenField("ShareInfo", "", length=0), 

125 align=(4, 8), 

126 switch_fmt=("L", "L"), 

127 ), 

128 NDRIntField("status", 0), 

129 ] 

130 

131 

132class LPSERVER_INFO_101(NDRPacket): 

133 ALIGNMENT = (4, 8) 

134 fields_desc = [ 

135 NDRIntField("sv101_platform_id", 0), 

136 NDRFullPointerField( 

137 NDRConfVarStrNullFieldUtf16("sv101_name", ""), deferred=True 

138 ), 

139 NDRIntField("sv101_version_major", 0), 

140 NDRIntField("sv101_version_minor", 0), 

141 NDRIntField("sv101_type", 0), 

142 NDRFullPointerField( 

143 NDRConfVarStrNullFieldUtf16("sv101_comment", ""), deferred=True 

144 ), 

145 ] 

146 

147 

148class NetrServerGetInfo_Request(NDRPacket): 

149 fields_desc = [ 

150 NDRFullPointerField(NDRConfVarStrNullFieldUtf16("ServerName", "")), 

151 NDRIntField("Level", 0), 

152 ] 

153 

154 

155class NetrServerGetInfo_Response(NDRPacket): 

156 fields_desc = [ 

157 NDRUnionField( 

158 [ 

159 ( 

160 NDRFullPointerField( 

161 NDRPacketField( 

162 "ServerInfo", LPSERVER_INFO_101(), LPSERVER_INFO_101 

163 ) 

164 ), 

165 ( 

166 (lambda pkt: getattr(pkt, "Level", None) == 101), 

167 (lambda _, val: val.tag == 101), 

168 ), 

169 ), 

170 ], 

171 StrFixedLenField("ServerInfo", "", length=0), 

172 align=(4, 8), 

173 switch_fmt=("L", "L"), 

174 ), 

175 NDRIntField("status", 0), 

176 ] 

177 

178 

179SRVSVC_OPNUMS = { 

180 15: DceRpcOp(NetrShareEnum_Request, NetrShareEnum_Response), 

181 16: DceRpcOp(NetrShareGetInfo_Request, NetrShareGetInfo_Response), 

182 21: DceRpcOp(NetrServerGetInfo_Request, NetrServerGetInfo_Response), 

183} 

184register_dcerpc_interface( 

185 name="srvsvc", 

186 uuid=uuid.UUID("4B324FC8-1670-01D3-1278-5A47BF6EE188"), 

187 version="3.0", 

188 opnums=SRVSVC_OPNUMS, 

189)