Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
O smecherie pe care nu o inteleg

Balcon parter fara acte

unde gasesc un speed bag in bucur...

Programe TV cu altfel de sporturi
 Laptop "bun la toate" max...

navigatie noua vw tiguan

ctfmon.exe - System Error (in Saf...

Ați prins vremurile cand 120 Volț...
 Whatsapp nu afișeaza numele ...

Medii admitere Politehnica Bucure...

Se extinde Baza de la Kogalniceanu

Politist mutilat de caine in curt...
 Trotineta- cat rezista?

Windows 11 si inregistrare de pe ...

Cont Facebook spart

Accesare Plex prin webstation
 

FTP Server in Python

- - - - -
  • Please log in to reply
No replies to this topic

#1
nikushoru

nikushoru

    Junior Member

  • Grup: Members
  • Posts: 219
  • Înscris: 17.03.2010
Salut, am un server ftp si trebuie sa modific functia de stor ca sa pot incarca un director intreg. Nu prea cunosc pythonul. Vrea cineva sa ma ajute ?

import os, socket, threading, time
from ftplib import FTP
import sys
import chilkat
import ftplib
#import ftptools
#import traceback

allow_delete = True
local_ip = socket.gethostbyname(socket.gethostname())
#local_ip = "192.168.43.59"
#local_port = 21
local_port = 9859
currdir=os.path.abspath('./ftp')

class FTPserverThread(threading.Thread):
def __init__(self,(conn,addr)):
self.conn=conn
self.addr=addr
self.basewd=currdir
self.cwd=self.basewd
self.rest=False
self.mode = None
self.pasv_mode=False
threading.Thread.__init__(self)

def run(self):
self.conn.send('220 Welcome!\r\n')
while True:
cmd=self.conn.recv(256)
if not cmd: break
else:
print 'Recieved:',cmd
try:
	 func=getattr(self,cmd[:4].strip().upper())
	 func(cmd)
except Exception,e:
	 print 'ERROR:',e
	 #traceback.print_exc()
	 self.conn.send('500 Sorry.\r\n')

def SYST(self,cmd):
self.conn.send('215 UNIX Type\r\n')
def OPTS(self,cmd):
if cmd[5:-2].upper()=='UTF8 ON':
self.conn.send('200 OK.\r\n')
else:
self.conn.send('451 Sorry.\r\n')
def USER(self,cmd):
self.conn.send('331 OK.\r\n')
def PASS(self,cmd):
self.conn.send('230 OK.\r\n')
#self.conn.send('530 Incorrect.\r\n')
def QUIT(self,cmd):
self.conn.send('221 Goodbye.\r\n')
def TYPE(self,cmd):
self.mode=cmd[5]
self.conn.send('200 Binary mode.\r\n')


def PWD(self,cmd):
cwd=os.path.relpath(self.cwd,self.basewd)
if cwd=='.':
cwd='/'
else:
cwd='/'+cwd
self.conn.send('257 \"%s\"\r\n' % cwd)
def CWD(self,cmd):
chwd=cmd[4:-2]
if chwd=='/':
self.cwd=self.basewd
elif chwd[0]=='/':
self.cwd=os.path.join(self.basewd,chwd[1:])
else:
self.cwd=os.path.join(self.cwd,chwd)
self.conn.send('250 OK.\r\n')

def PORT(self,cmd):
if self.pasv_mode:
self.servsock.close()
self.pasv_mode = False
l=cmd[5:].split(',')
self.dataAddr='.'.join(l[:4])
self.dataPort=(int(l[4])<<8)+int(l[5])
self.conn.send('200 Get port.\r\n')

def PASV(self,cmd): # from http://goo.gl/3if2U
self.pasv_mode = True
self.servsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.servsock.bind((local_ip,0))
self.servsock.listen(1)
ip, port = self.servsock.getsockname()
print 'open', ip, port
self.conn.send('227 Entering Passive Mode (%s,%u,%u).\r\n' %
(','.join(ip.split('.')), port>>8&0xFF, port&0xFF))

def start_datasock(self):
if self.pasv_mode:
self.datasock, addr = self.servsock.accept()
print 'connect:', addr
else:
self.datasock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.datasock.connect((self.dataAddr,self.dataPort))

def stop_datasock(self):
self.datasock.close()
if self.pasv_mode:
self.servsock.close()


def LIST(self,cmd):
self.conn.send('150 Here comes the directory listing.\r\n')
print 'list:', self.cwd
self.start_datasock()
for t in os.listdir(self.cwd):
k=self.toListItem(os.path.join(self.cwd,t))
self.datasock.send(k+'\r\n')
self.stop_datasock()
self.conn.send('226 Directory send OK.\r\n')

def toListItem(self,fn):
st=os.stat(fn)
fullmode='rwxrwxrwx'
mode=''
for i in range(9):
mode+=((st.st_mode>>(8-i))&1) and fullmode[i] or '-'
d=(os.path.isdir(fn)) and 'd' or '-'
ftime=time.strftime(' %b %d %H:%M ', time.gmtime(st.st_mtime))
return d+mode+' 1 user group '+str(st.st_size)+ftime+os.path.basename(fn)

def MKD(self,cmd):
dn=os.path.join(self.cwd,cmd[4:-2])
os.mkdir(dn)
self.conn.send('257 Directory created.\r\n')

def RMD(self,cmd):
dn=os.path.join(self.cwd,cmd[4:-2])
if allow_delete:
os.rmdir(dn)
self.conn.send('250 Directory deleted.\r\n')
else:
self.conn.send('450 Not allowed.\r\n')

def DELE(self,cmd):
fn=os.path.join(self.cwd,cmd[5:-2])
if allow_delete:
os.remove(fn)
self.conn.send('250 File deleted.\r\n')
else:
self.conn.send('450 Not allowed.\r\n')

def RETR(self,cmd):
fn=os.path.join(self.cwd,cmd[5:-2])
#print 'Downloading:',fn
#if self.mode=='I':
# fi=open(fn,'rb')
#else:
# fi=open(fn,'r')
#self.conn.send('150 Opening data connection.\r\n')
#if self.rest:
# fi.seek(self.pos)
# self.rest=False
#data= fi.read(1024)
#self.start_datasock()
#while data:
# self.datasock.send(data)
# data=fi.read(1024)
#fi.close()
#self.stop_datasock()
#self.conn.send('226 Transfer complete.\r\n')
#ftp = chilkat.CkFtp2()
#success = ftp.UnlockComponent("Anything for 30-day trial")
#ftp.put_Hostname("127.0.1.1")
#ftp.put_Username("test")
#ftp.put_Password("test")
#success = ftp.Connect()

#success = ftp.DownloadTree(fn)
#if (success != True):
	 #print(ftp.lastErrorText())
	 #sys.exit()

@staticmethod
def uploadThis(self,path):
	 files = os.listdir(path)
	 os.chdir(path)
	 for f in files:
if os.path.isfile(path + r'\{}'.format(f)):
	 fh = open(f, 'rb')
	 self.storbinary('STOR %s' % f, fh)
	 fh.close()
elif os.path.isdir(path + r'\{}'.format(f)):
	 self.mkd(f)
	 self.cwd(f)
	 uploadThis(path + r'\{}'.format(f))
	 self.cwd('..')
	 os.chdir('..')

def STOR(self,cmd):
fn=os.path.join(self.cwd,cmd[5:-2])
print 'Uplaoding:',fn
"""
if self.mode and self.mode=='I':
fo=open(fn,'wb')
else:
fo=open(fn,'w')
self.conn.send('150 Opening data connection.\r\n')
self.start_datasock()
while True:
data=self.datasock.recv(1024)
if not data: break
fo.write(data)
fo.close()
self.stop_datasock()
self.conn.send('226 Transfer complete.\r\n')
"""

self.uploadThis(sefl, fn)

class FTPserver(threading.Thread):
def __init__(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind((local_ip,local_port))
threading.Thread.__init__(self)

def run(self):
self.sock.listen(5)
while True:
th=FTPserverThread(self.sock.accept())
th.daemon=True
th.start()

def stop(self):
self.sock.close()

if __name__=='__main__':
ftp=FTPserver()
ftp.daemon=True
ftp.start()
print 'On', local_ip, ':', local_port
raw_input('Enter to end...\n')
ftp.stop()


Primesc eroarea data :
Uplaoding: /home/nicolae/Documents/ftp/transfer
ERROR: 'str' object is not callable

Edited by nikushoru, 25 November 2015 - 19:21.


Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate