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.
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.
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).
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.
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 -
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.
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
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:
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
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.
Boa lista de ferramentas em
Já usei o woof várias vezes. Bom.