FTP over different networks in python

Refresh

December 2018

Views

742 time

1

I and my friend have undertaken a small project as our plan for the summer and we were trying to employ FTP using python as a part of the project. We can successfully transfer the files over the same network but we have no clue as to how we can transfer files when we connected by internet(by a different network). I have added the code for your reference. I new to both FTP and python,it would be great if somebody can help us out.

Server side program:

 #server.py

 from pyftpdlib.ftpserver import DummyAuthorizer
 from pyftpdlib.ftpserver import FTPHandler
 from pyftpdlib.ftpserver import FTPServer

 authorizer = DummyAuthorizer()
 authorizer.add_user("user", "12345", "/", perm="elradfmw")
 authorizer.add_anonymous("/")
 handler = FTPHandler
 handler.authorizer = authorizer
 server = FTPServer(("xxx.xxx.x.x", 2121), handler)
 server.serve_forever()

And the client program:

 #client.py
 import ftplib

 fileTransfer = ftplib.FTP()
 fileTransfer.connect("xxx.xxx.x.x",2121)
 fileTransfer.login('user','12345')
 fileTransfer.retrlines('LIST')
 fileTransfer.cwd('/home/royal/MyPrograms/Python')
 fileTransfer.retrbinary('RETR  Florida.mp3',open('club.mp3','wb').write)

I am working behind a NAT.

2 answers

1

Я думаю, что решение для вашей проблемы Port Forwarding

portforwarding.com

4

Вы , вероятно , работает с проблемами брандмауэра; используя пассивный режим FTP должен помочь. Там хорошее объяснение в этой связи, но короткая версия, что FTP, по умолчанию, использует «активный» режим , в котором клиент создает соединение с сервером , чтобы сделать запрос, то сервер создает новое соединение с клиентом , чтобы ответить , Большинство брандмауэров настроены на блокирование «спонтанные» входящие соединения, и если брандмауэр специально не настроен , чтобы посмотреть на содержание исходящего соединения от клиента и увидеть «ах - ха, запрос FTP, я должен ожидать входящее соединение с этого сервера очень скоро», он будет блокировать соединение.

Пассивный режим, с другой стороны, имеет клиент создать два исходящих соединений, один для запроса и второй (на другой, случайно выбранный порт), что сервер будет использовать для отправки ответа. Off готового маршрутизатор + брандмауэр решение, в их конфигурации по умолчанию, позволит всем исходящим соединения проходят через, так что это сделало бы брандмауэр на стороне клиента пусть соединение через. Настройка брандмауэра на стороне сервера будет сложнее, хотя, как входящее соединение для данных может быть на любом порту - если не сузить пассивный диапазон портов данных.

Так что вы должны сделать, это:

  • Используйте пассивный режим.
  • Настройка сервера, чтобы принять определенный диапазон портов (как, скажем, 34500 до 34510, чтобы выбрать номера случайным образом - он не должен быть очень большой диапазон) для своих пассивных передач данных
  • Настройте брандмауэр на стороне сервера, чтобы разрешить входящие соединения на этот диапазон портов, а также на ваш «нормальный» FTP порт (2121 в вашем случае)

Если проблемы у вас возникли вопросы , брандмауэры, которые должны заставить его работать на вас. Если это все еще не работает; вы можете иметь еще одну проблему, так что идти вперед и задать новый вопрос! (Или обновлять этот, если это явно связано с вопросами брандмауэра).