Package pike :: Module netbios
[hide private]
[frames] | no frames]

Source Code for Module pike.netbios

 1  # 
 2  # Copyright (c) 2013, EMC Corporation 
 3  # All rights reserved. 
 4  # 
 5  # Redistribution and use in source and binary forms, with or without 
 6  # modification, are permitted provided that the following conditions are met: 
 7  # 
 8  # 1. Redistributions of source code must retain the above copyright notice, 
 9  # this list of conditions and the following disclaimer. 
10  # 2. Redistributions in binary form must reproduce the above copyright notice, 
11  # this list of conditions and the following disclaimer in the documentation 
12  # and/or other materials provided with the distribution. 
13  # 
14  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
15  # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
16  # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
17  # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 
18  # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
19  # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
20  # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
21  # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
22  # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
23  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
24  # POSSIBILITY OF SUCH DAMAGE. 
25  # 
26  # Module Name: 
27  # 
28  #        netbios.py 
29  # 
30  # Abstract: 
31  # 
32  #        NETBios frame support 
33  # 
34  # Authors: Brian Koropoff (brian.koropoff@emc.com) 
35  # 
36   
37  import core 
38  import crypto 
39  import smb2 
40   
41 -class Netbios(core.Frame):
42 - def __init__(self, context=None):
43 core.Frame.__init__(self, None, context) 44 self.len = None 45 self.conn = context 46 self.transform = None 47 self._smb2_frames = []
48
49 - def _children(self):
50 return self._smb2_frames
51
52 - def _encode(self, cur):
53 # Frame length (0 for now) 54 len_hole = cur.hole.encode_uint32be(0) 55 base = cur.copy() 56 if self.transform is not None: 57 # performing encryption 58 self.transform.encode(cur) 59 else: 60 for child in self.children: 61 child.encode(cur) 62 63 if self.len is None: 64 self.len = cur - base 65 len_hole(self.len)
66
67 - def _decode(self, cur):
68 self.len = cur.decode_uint32be() 69 end = cur + self.len 70 71 with cur.bounded(cur, end): 72 while (cur < end): 73 signature = cur.copy().decode_bytes(4) 74 if (signature.tostring() == '\xfdSMB'): 75 crypto.TransformHeader(self).decode(cur) 76 else: 77 smb2.Smb2(self).decode(cur)
78
79 - def append(self, smb2_frame):
80 self._smb2_frames.append(smb2_frame)
81