Skip to content

Instantly share code, notes, and snippets.

@HarmJ0y
Created June 4, 2015 00:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HarmJ0y/8d1e6608f71367a7b18c to your computer and use it in GitHub Desktop.
Save HarmJ0y/8d1e6608f71367a7b18c to your computer and use it in GitHub Desktop.
smb_hoster.py
#!/usr/bin/python
from impacket import smbserver
import sys, argparse, threading, ConfigParser, time, os
class ThreadedSMBServer(threading.Thread):
"""
Threaded SMB server that can be spun up locally.
"""
def __init__(self):
threading.Thread.__init__(self)
def run(self, sharePath, shareName):
# Here we write a mini config for the server
smbConfig = ConfigParser.ConfigParser()
smbConfig.add_section('global')
smbConfig.set('global','server_name','SERVICE')
smbConfig.set('global','server_os','UNIX')
smbConfig.set('global','server_domain','WORKGROUP')
smbConfig.set('global','log_file','/tmp/smb.log')
smbConfig.set('global','credentials_file','')
# Let's add a dummy share
smbConfig.add_section(shareName)
smbConfig.set(shareName,'comment','system share')
smbConfig.set(shareName,'read only','yes')
smbConfig.set(shareName,'share type','0')
smbConfig.set(shareName,'path', sharePath)
# IPC always needed
smbConfig.add_section('IPC$')
smbConfig.set('IPC$','comment','')
smbConfig.set('IPC$','read only','yes')
smbConfig.set('IPC$','share type','3')
smbConfig.set('IPC$','path')
self.smb = smbserver.SMBSERVER(('0.0.0.0',445), config_parser=smbConfig)
print '\n [*] setting up SMB server...'
self.smb.processConfigFile()
try:
print ' [*] check /tmp/smb.log for accesses'
self.smb.serve_forever()
except:
pass
def shutdown(self):
print '\n [*] killing SMB server...\n'
self.smb.shutdown()
self.smb.socket.close()
self.smb.server_close()
self._Thread__stop()
# make sure all the threads are killed
for thread in threading.enumerate():
if thread.isAlive():
try:
thread._Thread__stop()
except:
pass
parser = argparse.ArgumentParser()
parser.add_argument('-f', metavar="FOLDER", required=True, help='Folder to host.')
parser.add_argument('-s', metavar="SHARE_NAME", required=True, help='Share name to create.')
args = parser.parse_args()
args.s = args.s.upper()
try:
os.system('rm /tmp/smb.log')
except: pass
try:
server = ThreadedSMBServer()
server.run(args.f, args.s)
time.sleep(.5)
while 1==1: time.sleep(1)
# catch any ctrl + c interrupts
except KeyboardInterrupt:
print "\n\nExiting...\n"
try: server.shutdown()
except: pass
sys.exit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment