Um servidor de ftp de uma linha em python

é possível ter um comando de uma linha em python para fazer um servidor ftp simples? Eu gostaria de ser capaz de fazer isso como uma maneira rápida e temporária de transferir arquivos para uma caixa linux sem ter que instalar um servidor ftp. De preferência, uma forma de usar as bibliotecas python para não haver mais nada para instalar.

Author: sashoalm, 2011-02-14

9 answers

Obrigatório retorcido exemplo:

twistd -n ftp

E provavelmente útil:

twistd ftp --help

Usage: twistd [options] ftp [options].
WARNING: This FTP server is probably INSECURE do not use it.
Options:
  -p, --port=           set the port number [default: 2121]
  -r, --root=           define the root of the ftp-site. [default:
                    /usr/local/ftp]
  --userAnonymous=  Name of the anonymous user. [default: anonymous]
  --password-file=  username:password-style credentials database
  --version         
  --help            Display this help and exit.
 107
Author: Ali Afshar, 2016-04-05 07:44:12

Confira pyftpdlib de Giampaolo Rodola. É um dos melhores servidores ftp para python. É usado no Google chromium (seu navegador) e bazaar (um sistema de controle de versões). É a implementação mais completa em Python para RFC-959 (aka: FTP server implementation spec).

Da linha de comandos:

python -m pyftpdlib

Em alternativa "my_server.py":

#!/usr/bin/env python

from pyftpdlib import servers
from pyftpdlib.handlers import FTPHandler
address = ("0.0.0.0", 21)  # listen on every IP on my machine on port 21
server = servers.FTPServer(address, FTPHandler)
server.serve_forever()

Há mais exemplos no site se você quiser algo mais complicado.

Para obter uma lista das opções da linha de comandos:

python -m pyftpdlib --help

Nota, Se quiser sobrepor-se ou usar uma porta ftp normal, irá necessitar de privilégios de administração (por exemplo, sudo).

 70
Author: Brian Bruggeman, 2016-04-24 14:26:45

Porque não usa um servidor de UMA Linha HTTP?

python -m SimpleHTTPServer 8000

Irá servir o conteúdo da pasta de trabalho actual sobre HTTP na porta 8000.

Se usar o Python 3, em vez disso deve escrever

python3 -m http.server 8000

Ver os documentos do módulo para 2.X e o http.servidor docs para 3.x.

A propósito, em ambos os casos o parâmetro Porto é opcional.

 30
Author: Andrea Spadaccini, 2011-02-14 19:15:31

As respostas acima foram todas assumindo que a sua distribuição em Python teria algumas bibliotecas de terceiros, a fim de alcançar o objetivo "um liner em Python ftpd", mas esse não é o caso do que @zio estava perguntando. Além disso, SimpleHTTPServer envolve web broswer para baixar arquivos, não é rápido o suficiente.

O Python não consegue fazer o ftpd sozinho, mas pode usar o netcat., nc:

nc é basicamente uma ferramenta embutida de qualquer sistema UNIX-like (até mesmo sistemas embutidos), então é perfeito para"[[11]}uma maneira rápida e temporária de transferir arquivos ".

Passo 1, do lado do receptor, executar:

nc -l 12345 | tar -xf -

Isto vai ouvir no porto 12345, à espera de dados.

Passo 2, do lado do remetente:

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ... | nc $RECEIVER_IP 12345

Você também pode colocar pv no meio para monitorar o progresso da transferência:

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ...| pv | nc $RECEIVER_IP 12345

Depois da transferência estar terminada, ambos os lados de nc Irão desistir automaticamente, e o trabalho está feito.

 24
Author: Meow, 2018-03-30 10:46:12

Para os utilizadores do pyftpdlib. Encontrei isto no site da pyftpdlib. Isto cria um ftp anónimo com acesso de escrita ao seu sistema de ficheiros, por isso use com o devido cuidado. Mais recursos estão disponíveis sob o capô para uma melhor segurança, então apenas vá olhar:

sudo pip install pyftpdlib

python -m pyftpdlib -w

Pode ser útil para aqueles que tentaram usar o método depreciado acima.

sudo python-m pyftpdlib.servidor FTPS

 12
Author: cdplayer, 2014-06-01 06:13:33

Install:

pip install twisted

Depois o código:

from twisted.protocols.ftp import FTPFactory, FTPRealm
from twisted.cred.portal import Portal
from twisted.cred.checkers import AllowAnonymousAccess, FilePasswordDB
from twisted.internet import reactor

reactor.listenTCP(21, FTPFactory(Portal(FTPRealm('./'), [AllowAnonymousAccess()])))
reactor.run()

Mais fundo:

Http://twistedmatrix.com/documents/current/core/examples/

 3
Author: Jonathan, 2014-12-11 20:07:51

A solução mais simples será a biblioteca pyftpd. Esta biblioteca permite-lhe rodar o servidor FTP Python numa única linha. No entanto, não vem instalado por omissão, mas podemos instalá - lo usando o comando apt simples

apt-get install python-pyftpdlib

Agora a partir da pasta que deseja servir, basta executar o módulo pythod

python -m pyftpdlib -p 21 
 2
Author: MVnD3X, 2018-05-13 06:45:57

Eu não sei sobre um servidor FTP de uma linha, mas se você fizer

python -m SimpleHTTPServer

Irá executar um Servidor HTTP em 0. 0. 0. 0. 8000, servindo ficheiros fora do directório actual. Se você está procurando uma maneira de obter rapidamente arquivos de uma caixa linux com um navegador web, você não pode vencê-lo.

 0
Author: Alex, 2011-02-14 16:44:49

Boa lista de ferramentas em

Http://www.willdonnelly.net/blog/file-transfer/

Já usei o woof várias vezes. Bom.
 0
Author: Joe Drumgoole, 2017-09-27 14:11:08