Python İle FTP Programı Yapımı
4 min read

Python İle FTP Programı Yapımı

Python İle FTP Programı Yapımı

Python ile FTP programı yaparak Filezilla alternatifi basit ama kaliteli bir FTP programına sahip olabilir ve ödevlerinizde rahatlıkla kullanabilirsiniz.

FTP, uygulama katmanında çalışan dosya taşıma protokülüdür ve açılımı File Transfer Protocol’dür. FTP ile dosyalarınızı bir adresden kolayca alabilir ve bir adrese yükleyebilirsiniz. Ayrıca dizin listeleme, dosya silme gibi onlarca işlemi rahatlıkla yapabilirsiniz. Yapabileceğiniz bu işlemlerin tam listesini görmek için aşağıdaki bağlantıyı kullanabilirsiniz.

FTP komutlarının tam listesini görmek için Tıklayınız.

Bu dersimizde de Python ile FTP protokolünü kullanarak bir FTP programı yapacağız ve oluşturacağımız server üzerine client tarafından dosya yükleyip istediğimiz dosyaları indirebileceğiz. Bu nedenle programımız iki aşamalı olacak bu aşamaları Server ile Client programları oluşturacak. Öyleyse ilk olarak Server tarafını hazırlayarak başlayalım.

1. FTP Programında Server Tarafının Hazırlanması

FTP programımızda dosyaları yükleyeceğimiz ve bağlantıları sürekli dinleyerek cevap verecek olan taraf sunucu tarafıdır. Bu nedenle ilk olarak Server tarafını kodlayarak başlıyoruz. Böylece dileyen tüm istemciler rahatlıkla bağlanıp işlemlerini gerçekleştirebilecektir.

Server tarafında pyftpdlib kütüphanesini indirerek başlıyoruz.

pip install pyftpdlib

Pyftpdlib, Python FTP Server kütüphanesi, Python ile çok verimli asenkron FTP sunucularını kolayca yazmak için taşınabilir bir arayüz sağlayan bir FTP sunucu kütüphanesidir. Şu anda Python programlama dili için mevcut olan en eksiksiz RFC-959 FTP sunucusu uygulamasıdır.

Kütüphanemizi indirdikten sonra projemize ekleyelim ve sürekli gelen bağlantıları dinleyecek server programımızın kodlarını yazalım.

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

authorizer = DummyAuthorizer()
authorizer.add_user("user", "123456", "user", perm="elradfmw")
authorizer.add_anonymous("anonim", perm="elradfmw")

handler = FTPHandler
handler.authorizer = authorizer

server = FTPServer(("127.0.0.1", 1026), handler)
server.serve_forever()

Bu kodu tek tek açıklayalım:

  • authorizer = DummyAuthorizer(): Gelen bağlantıdaki yetkilendirme işlemlerini yapacak olan nesnemizi oluşturuyoruz.
  • authorizer.add_user()add_user() fonksiyonu ile FTP sunucunuzda kullanıcılar oluşturabilir ve her kullanıcıya bir klasör atayabilirsiniz. Böylece ilgili kullanıcı sunucuya bağlandığında kendi klasörüne yönlendirilir ve dosya yükleme, indirme gibi FTP komutlarını bu dizin üzerinde işletir.
  • authorizer.add_anonymous()add_anonymous() fonksiyonu ile FTP sunucusuna daha önce kayıt etmediğimiz bir sunucu bağlandığımızda onu otomatik olarak istediğimiz bir dizine yönlendirebiliriz.
  • server = FTPServer(("127.0.0.1", 1026), handler): FTP sunucumuzun sürekli dinleyeceği IP adresini ve port numarasını belirliyoruz. Localhost üzerinde çalıştığımız için 127.0.0.1 ve rastgele bir port numarası atadık. Siz sadece aynı portta çalışan başka bir program olup olmadığına ve seçtiğiniz port numarasının 1024 ten büyük olmasına dikkat ediniz.
  • server.serve_forever(): Sunucumuzu ayağa kaldırıyoruz.

Artık FTP programımızda Server tarafımız hazır. Şimdi gelelim Client tarafına.

2. FTP Programında Client Tarafının Hazırlanması

FTP programımızda sunucu tarafını hazırladıktan bu sunucuya bağlanabilmek için client programımızı hazırlamamız gerekiyor. Bunun için öncelikle projemize ftplib kütüphanemizi dahil edelim ve ardından gerekli komutları ekleyelim.

from ftplib import FTP

ftp = FTP('')
ftp.connect('localhost',1026)
ftp.login("user","123456")

def dosyaYukle():
    dosyaadi = 'testfile.txt' # Yüklenecek dosya adı
    ftp.storbinary('STOR '+dosyaadi, open(dosyaadi, 'rb'))
    ftp.quit()

def dosyaIndir():
    dosyaadi = 'testfile.txt' # İndirilecek dosya adı
    dosya = open(dosyaadi, 'wb')
    ftp.retrbinary('RETR ' + dosyaadi, dosya.write, 1024)
    ftp.quit()
    dosya.close()

dosyaYukle()
#dosyaIndir()

Tekrardan işlemlerimizi açıklayalım:

  • ftp = FTP(''): FTP bağlantımızı oluşturacağımız nesnemizi oluşturalım.
  • ftp.connect('localhost',1026): Sunucumuza bağlanıyoruz. Localhost üzerinden çalıştığımız için localhost yazdık ama siz buraya bağlanacağınız sunucunun ip adresini veya alan adını yazabilirsiniz.
  • ftp.login("user","123456"): Hangi kullanıcı ile bağlanacağımızı seçiyoruz. Fakat bağlanacağımız kullanıcıyı server tarafında oluşturmalıyız. Eğer anonim olarak olarak bağlanmak istiyorsanız sadece ftp.login() komutunu çalıştırabilirsiniz ama yine anonim kuralını server tarafında oluşturmanız gerekiyor.
  • ftp.storbinary(): Dosya yükleme komutu olan STOR u çalıştırabileceğimiz fonksiyondur. Bu fonksiyon ile belirttiğimiz dosyamızı karşıya yükleyebiliriz.
  • ftp.retrbinary(): Dosya indirme komutu olan RETR yi çalıştırabileceğimiz fonksiyondur. Bu fonksiyon ile belirttiğimiz dosyamızı sunucudan indirebiliriz.

Genel olarak nasıl çalıştığınızı anlattığımız FTP programını deneyerek ve parametreleri değiştirerek daha iyi anlayabilirsiniz. Şimdi ise Programımızı çalıştırmaya gelelim.

3. FTP Programının Çalıştırılması ve Test

Python ile hazırladığımız FTP programımızda server ve client taraflarını hazırladıktan sonra çalıştırarak hızlı bir test yapalım. Bunun için ilk olarak server.py dosyamızı Python ile çalıştıralım ve bağlantıları sürekli dinleyip cevap verecek sunucu tarafını ayağa kaldıralım. Artık client.py programını çalıştırabiliriz. Böylece test için yazdığımız dosyaYukle() fonksiyonu çalışıp aynı dizinde bulunan testfile.txt dosyasını user kullanıcımız klasörü olan user isimli klasöre yükleyecek.

1366x698

Siz bu örneği yaparken dosya dizinlerini resimde görüldüğü gibi doğru vermeyi unutmayınız. Ayrıca try-except kullanarak çıkacak problemler durumunda ekrana bilgilendirme mesajları basabilirsiniz. Son olarak FTP programınızda çalıştırabileceğiniz kullanışlı fonksiyonları da aşağıda veriyorum. Bu fonksiyonlar ile daha gelişmiş bir FTP programı hazırlayabilirsiniz.

4. FTP Programınızda Kullanabileceğiniz Fonksiyonlar

Aşağıdaki FTP fonksiyonları ve komutlarıyla FTP programınızı daha kullanışlı ve gelişmiş bir hale çevirebilirsiniz:

  • ftp.pwd(): Bulunduğunuz dizinin adresini verir
  • ftp.dir(): Dizinde bulunan klasör ve dosyaların listesini verir
  • ftp.cwd(): Bulunduğunuz dizini değiştirir.
  • ftp.delete(): Belirttiğiniz dosyayı siler.
  • ftp.mkd(): Belirttiğiniz isimle yeni bir klasör oluşturur.
  • ftp.rmd(): Belirttiğiniz klasörü siler.
  • ftp.rename(): Belirttiğiniz dosyanın ismini değiştirir.
  • ftp.getwelcome(): Sunucuya bağlanan kullanıcı için hoşgeldin mesajı yayınlar.
  • ftp.size(): Dosyanın boyutunu döndürür.
  • ftp.sendcmd(): Bir cmd komutu gönderebilir ve geri dönüş alabilirsiniz.
  • ftp.quit(): Mevcut bağlantıyı sonlandırır.