Advertisement
Guest User

Untitled

a guest
Mar 15th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.27 KB | None | 0 0
  1. #!/usr/bin/python2
  2.  
  3. from pyftpdlib.authorizers import DummyAuthorizer
  4. from pyftpdlib.handlers import FTPHandler
  5. from pyftpdlib.servers import FTPServer
  6. from optparse import OptionParser
  7.  
  8. import os
  9. import getpass
  10.  
  11. read_permisson="elr"
  12. upload_permisson="elrmw"
  13. write_permisson="elradfmwM"
  14. banner = "Welcome to pyshared!"
  15. port = 2121
  16. max_cons = 100
  17. max_cons_per_ip = 5
  18. encoding = None
  19.  
  20. from asynchat import async_chat
  21.  
  22. class EncodedProducer:
  23. def __init__(self, producer):
  24. self.producer = producer
  25. def more(self):
  26. return self.producer.more().decode("utf8").encode(encoding)
  27.  
  28. class EncodedHandler(FTPHandler):
  29.  
  30. def push(self, s):
  31. async_chat.push(self, s.encode(encoding))
  32.  
  33. def push_dtp_data(self, data, isproducer=False, file=None, cmd=None):
  34. if file==None:
  35. if isproducer:
  36. data=EncodedProducer(data)
  37. else:
  38. data=data.decode("utf8").encode(encoding)
  39.  
  40. FTPHandler.push_dtp_data(self, data, isproducer, file, cmd)
  41.  
  42. def decode(self, bytes):
  43. return bytes.decode(encoding, self.unicode_errors)
  44.  
  45.  
  46. def main(home, upload = False, write = False, authorization = False, encoded = False, nat_ip = False, pasv_port = None):
  47.  
  48. print "Set home directory to %s"%home
  49.  
  50. authorizer = DummyAuthorizer()
  51.  
  52. if write:
  53. print "Warning: All write permisson assigned!"
  54. permisson = write_permisson
  55. elif upload:
  56. print "Warning: Upload permisson assigned!"
  57. permisson = upload_permisson
  58. else:
  59. permisson = read_permisson
  60.  
  61. if authorization:
  62. print "Setting up authorization..."
  63. user = raw_input("Set user name:")
  64. while 1:
  65. password = getpass.getpass("Set password:")
  66. if getpass.getpass("Confirm password:") == password:
  67. break
  68. authorizer.add_user(user, password, home, perm=permisson)
  69. else:
  70. authorizer.add_anonymous(home ,perm=permisson)
  71.  
  72. if encoded:
  73. print "Transparent encoding transform enabled, target encoding: %s"%encoding
  74. handler = EncodedHandler
  75. else:
  76. handler = FTPHandler
  77. handler.authorizer = authorizer
  78.  
  79. handler.banner = banner
  80.  
  81. if nat_ip:
  82. handler.masquerade_address = nat_ip
  83. handler.passive_ports = pasv_port
  84.  
  85. address = ('', port)
  86. server = FTPServer(address, handler)
  87.  
  88. server.max_cons = max_cons
  89. server.max_cons_per_ip = max_cons_per_ip
  90.  
  91. server.serve_forever()
  92.  
  93. if __name__=="__main__":
  94. parser = OptionParser()
  95. parser.add_option("-u", "--upload", dest="upload",
  96. action="store_true",default=False,help="assign upload permissons.")
  97. parser.add_option("-w", "--write", dest="write",
  98. action="store_true",default=False,help="assign write permissons.(Overrides -u)")
  99. parser.add_option("-a", "--authorization", dest="authorization",
  100. action="store_true",default=False,help="enable authorization.")
  101. parser.add_option("-p", "--port", dest="port",
  102. action="store",type=int,default=port,help="set an alternative port.(Default: %d)"%port)
  103. parser.add_option("-d", "--home-dir", dest="home",
  104. action="store",default=os.getcwd(),help="set home directory.(Default: current working directory)")
  105. parser.add_option("-e", "--encoding", dest="encoding",
  106. action="store",default=None,help="set transparent encoding transform for clients.")
  107. parser.add_option("-n", "--nat-ip", dest="nat_ip",
  108. action="store", default=False, help="set NAT public ip for working behind NAT.")
  109. parser.add_option("-P", "--pasv-ports", dest="pasv_port",
  110. action="store", default="21210-21220", help="only effective when used together with --nat, set ports for PASV mode, for NAT ports forwarding, format: [start]-[end].(Default: 21210-21220).")
  111.  
  112. (options,args) = parser.parse_args()
  113.  
  114. port = options.port
  115.  
  116. encoding = options.encoding
  117.  
  118. pasv_port = range(int(options.pasv_port.split("-")[0]), int(options.pasv_port.split("-")[1]) + 1)
  119.  
  120. try :
  121. main(options.home, options.upload, options.write, options.authorization, encoding!=None, options.nat_ip, pasv_port)
  122. except Exception as e:
  123. print "Exception: %s detected."%e
  124. print "Now quit..."
  125. except KeyboardInterrupt:
  126. print "User interrupts!"
  127. print "Now quit..."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement