1try:
2   import configparser
3except ImportError:
4   import ConfigParser as configparser
5import unittest
6
7from impacket import nmb
8from impacket.structure import hexdump
9
10
11class NMBTests(unittest.TestCase):
12    def create_connection(self):
13        pass
14
15    def test_encodedecodename(self):
16        name = 'THISISAVERYLONGLONGNAME'
17        encoded = nmb.encode_name(name,nmb.TYPE_SERVER,None)
18        hexdump(encoded)
19        decoded = nmb.decode_name(encoded)
20        hexdump(decoded[1])
21
22        #self.assertTrue(nmb.TYPE_SERVER==decoded[0])
23        self.assertTrue(name[:15]==decoded[1].strip())
24
25        # ToDo: Fix the scope functionality
26        #namescope = 'MYNAME'
27        #encoded = nmb.encode_name(namescope,nmb.TYPE_SERVER,'SCOPE')
28        #hexdump(encoded)
29        #decoded = nmb.decode_name(encoded)
30        #hexdump(decoded)
31
32        #self.assertTrue(nmb.TYPE_SERVER==decoded[0])
33        #self.assertTrue(namescope[:15]==decoded[1].strip())
34
35    def test_getnetbiosname(self):
36        n = nmb.NetBIOS()
37        res = n.getnetbiosname(self.machine)
38        print(repr(res))
39        self.assertTrue( self.serverName, res)
40
41    def test_getnodestatus(self):
42        n = nmb.NetBIOS()
43        resp = n.getnodestatus(self.serverName.upper(), self.machine)
44        print(resp)
45
46    def test_gethostbyname(self):
47        n = nmb.NetBIOS()
48        n.set_nameserver(self.serverName)
49        resp = n.gethostbyname(self.serverName, nmb.TYPE_SERVER)
50        print(resp.entries)
51
52    def test_name_registration_request(self):
53        n = nmb.NetBIOS()
54        # ToDo: Look at this
55        #resp = n.name_registration_request('*SMBSERVER', self.serverName, nmb.TYPE_WORKSTATION, None,nmb.NB_FLAGS_G, '1.1.1.1')
56        try:
57            resp = n.name_registration_request('*JSMBSERVER', self.serverName, nmb.TYPE_WORKSTATION, None,nmb.NB_FLAGS_ONT_P, '1.1.1.2')
58            resp.dump()
59        except Exception as e:
60            print str(e)
61            if str(e).find('NETBIOS') <= 0:
62                raise e
63
64    def test_name_query_request(self):
65        n = nmb.NetBIOS()
66        # ToDo: Look at this
67        # resp = n.name_registration_request('*SMBSERVER', self.serverName, nmb.TYPE_WORKSTATION, None,nmb.NB_FLAGS_G, '1.1.1.1')
68        resp = n.name_query_request(self.serverName, self.machine)
69        print(resp.entries)
70
71class NetBIOSTests(NMBTests):
72    def setUp(self):
73        NMBTests.setUp(self)
74        # Put specific configuration for target machine with SMB1
75        configFile = configparser.ConfigParser()
76        configFile.read('dcetests.cfg')
77        self.serverName = configFile.get('SMBTransport', 'servername')
78        self.machine  = configFile.get('SMBTransport', 'machine')
79
80if __name__ == "__main__":
81    suite = unittest.TestLoader().loadTestsFromTestCase(NetBIOSTests)
82    unittest.TextTestRunner(verbosity=1).run(suite)
83