Açık Kaynak Kodlu Uygulamalar

Python ile Siber Güvenlik Uygulamaları: Bölüm 2

9 Kasım 20228 dakika okumaAçık Kaynak Kodlu UygulamalarEğitim DanışmanlıkSiber Güvenlik

Serimizin ilk bölümünde (https://www.ongsec.com/python-ile-siber-guvenlik-uygulamalari-bolum-1/) temel python bilgisini elde etmiştik. Bu bölümde öğrendiklerimizin üzerine koyarak daha ileri seviye işlemler yapacağız ve son bölüme yani etik hack' leme araçlarımızı yazmaya hazır hale geleceğiz.

O zaman hadi ikinci bölümümüze başlayalım.


Fonksiyonlar

1. Hazır tanımlı fonksiyonlar

my_string = "berat"
print(my_string.upper())
print(my_string)

upper python' da tanımlanmış bir method orneğidir. Mesela bu ornekte birinci print içindeki çıktımız BERAT olacaktır ama ikinci print' de my_string' i yazdırınca kucuk harfle yazacaktır (Daha önceden stringler' in böyle olduğunu ilk bölümde incelemiştik).

2. Yardım alma fonksiyonu

help(my_string.split())

Python dökümantasyonuna web sitesinden ulaşmak yerine bu şekilde programın içinden de ulaşabilirim.

Burada acaba bu split ne işe yarıyor detaylı öğrenmek istiyorsak bu şekilde help yazarak öğrenebiliriz.

3. Kendi fonksiyonumuzu yazalım

def hello_world():
    print("hello")
    print("world")

hello_world()

def anahtar sözcüğünü kullanarak hello_world() diye kendi fonksiyonumu tanımladım ve içine print ile hello ve world kelimelerini yazdım.

Yazdığım fonksiyonu çağırmak için hello_world() diyorum ve ekrana çıktı olarak hello world yazdırıyorum.


Girdi-Çıktı İşlemleri

1. Parametre alan fonksiyon tanımlama

def hello_programming(name):
    print("hello")
    print(name)

hello_programming("Python")

hello python yazdırmış olduk.

Burada parametre alacak şekilde fonksiyonu oluşturdum. Aşağıda çağırırken bu parametre değerini mutlaka girmem lazım yoksa program hata verir ve çalışmaz.

Peki ben parametre girmezsem de bu fonksiyonun hata vermeden çalışmasını istiyorsam;

def hello_program(name="python"):
    print("hello")
    print(name)

hello_program()
hello_program("java")

İlk çıktıda hello python dönecek.

İkinci çıktıda da hello java yazacak.

Yani programa dışarıdan parametre girersem parametreye göre fonksiyonum yeni halini alacaktır.

2.İki sayıyı toplama fonksiyonu

def toplama(sayi1, sayi2):
    sayi3 = sayi1 + sayi2
    print(sayi3)

toplama(1, 2)

Fonksiyondan da anlaşıldığı gibi sayı 1 ve sayı 2 değerlerini toplayıp, sayı 3' e atıyoruz ve sayı 3' ü ekrana yazdırıyoruz.

3. Yazdırma işlemi değil, sonucun bir değişkene atanması fonksiyonları

def toplam(a, b, c):
    return a + b + c

sonuc = toplam(1, 2, 3)
print(sonuc)

Yani eğer yaptığım işlemi yazdırmak değil de bir değişkene eşitlemek istiyorsam return komutunu kullanacağım.

4. Fonksiyonlarda if else yapısını kullanmak

def control_string(s):
    if s[0] == "m":
        print("mmm")
    else:
        print(s)

control_string("berat")
control_string("merve")

Burada ilk harfi m ise mmm yazdır, değilse girilen string' in kendisini yazdır.

Yani ilk çıktı berat, ikinci çıktı mmm olur.

5. Fonksiyonlarda if else yapısı için başka bir örnek

def new_control(j):
    if j[0] == "m":
        print(j.capitalize())  

new_control("merve")  # Merve olmuş olacak

Eğer ilk harfi m ise ilk harfini büyüt öyle yazdır dedim

Çıktım Merve olmuş olacak.


İleri Seviye Fonksiyonlar

1. Arbitrary arguments

def summation(*args):
    return sum(args)

toplam1 = summation(1, 2, 3)
print(toplam1)
toplam2 = summation(1, 2, 3, 4, 5)
print(toplam2)

Bu şekilde python' un kendi sum fonksiyonunu ve args' ı kullanarak istediğimiz kadar sayıyı toplayabiliriz.

2. Keyword arguments

def ornek_fonksiyon(**kwargs):
    print(kwargs)

ornek_fonksiyon(kosma=10, yuzme=20, basketbol=30)

Bu fonksiyon sayesinde de dictionary olarak oluşturmama olanak sağlıyor.

Burada da kullanıcı istediği kadar değer girebilir.

3. Keyword arguments başka bir örnek

def key_function(**kwargs):
    if "metallica" in kwargs:
        print("heavy metal")
    else:
        print("rock is dead")

key_function(metallica=10, madonna=6)
key_function(madonna=100, mickymouse=200, eminem=300)

İlk fonksiyonu çağırdığımda çıktım : heavy metal olacaktır

İkinci fonksiyonu çağırışımda da rock is dead çıktısı alacağım.


Pratik Fonksiyon Kullanımları

1. Bölme işlemi fonksiyonu

def divide(number):
    return number / 2

bolum = divide(10)
print(bolum)

Burada verilen sayıyı 2' ye bölen fonksiyon yazdık.

2. Liste elemanlarını bölme işlemine sokan fonksiyon

def divide(number):
    return number / 2

my_list = [1, 2, 3, 4, 5, 6, 7, 8]
my_newlist = []
for num in my_list:
    my_newlist.append(divide(num))
print(my_newlist)

Burada my_list' deki tüm elemanları divide fonksiyonuna sokup yeni değeri my_newlist' e ekledik ve en sonunda da my_newlist' i ekrana yazdırdık. Çıktımız: [0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0] olacaktır.

3. Yukarıdaki sayılar sadece 1 tane 2 tane yada 10 tane olmayabilir çok uzun listeler olabilir. Bunu daha pratik bir şekilde yapmak için python' da kullanacağımız fonksiyonun adı MAP

def divide(number):
    return number / 2
my_list = [1, 2, 3, 4, 5, 6, 7, 8]
print(list(map(divide, my_list)))

Burada tek satırda yazacağım kod ile aynı sonucu alabiliyorum. Yani yine çıktımız : [0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0] olacaktır.

4. Filter

def control_string(string):
    return "metallica" in string

print(control_string("metallicadasdad"))
#true değerini alırım

---------------------------------------------

my_artist_list = ["metallica", "madonna", "eminem"]
print(list(map(control_string, my_artist_list)))

#[True,False,False] değerini alırım

---------------------------------------------

#Peki ben yukarıdaki listede tüm değerlerin true false olmasına bakıp hepsini getirdim.Eğer ben sadece true olanları listelemek istersem ne yapacam??? İşte bu yönteme de FILTER diyoruz.

print(list(filter(control_string, my_artist_list)))
#burada çıktım metallica olacaktır.

Lambda

1. Lambda fonksiyonunun kullanımı

def carpma_fonksiyonu(number):
    return number * 3

print(carpma_fonksiyonu(5))

carpma_fonksiyonu2 = lambda num: num * 3
print(carpma_fonksiyonu2(5))

Birinci fonksiyon da bir sayıyı 3 ile çarpıyor, ikinci fonksiyon da aynı şekilde bir sayıyı 3 ile çarpıyor.

2. Peki benim lambda' yı kullanım amacım ne olabilir?

my_list = [3, 4, 5, 6]
print(list(map(lambda num: num * 4, my_list)))

Mesela örnekteki gibi elimizde bir liste olsun ve tüm elemanları 4 ile çarpmak istiyorum. 4 ile çarpma fonksiyonunu yazma yerine tek satırda lambda ile bunu halledebiliyoruz.


Scope

1. Scope nedir

number = 10

def multipy(num):
    number = 5
    return num * number

print(multipy(5))
print(number)
# İlk çıktımız 25, İkinci çıktımız 10 olacaktır.

2. Peki python' da değişkenler hangi durumda hangi değerleri alır?

LEGB

L-->LOCAL

E-->ENCLOSING

G-->GLOBAL

B-->BUILTIN

Bu sıraya göre karar verir.

3. Başka bir örnek kullanımla scope kavramlarını detaylı olarak öğrenelim

my_string = "berat" #GLOBAL

def my_function():
    my_string = "furkan" #ENCLOSING
    print(my_string)

    def my_function2():
        my_string = "yazturk" #LOCAL
        print(my_string)

    my_function2()

my_function() #Burada çıktımız yazturk olacak
print(my_string) #Burada da berat olacak

Çıktılarımız sırasıyla:

Ekran görüntüsüBu adımın terminal çıktısı arşivden aktarılmayı bekliyor. Yazının metni adımların tamamını anlatır.
Şeklinde olacaktır

Decorator

1.

def func(new_func):
    print("function started")
    new_func()
    print("function ended")

def hellofunc():
    print("hello world")

func(hellofunc)

Çıktımız:

Ekran görüntüsüBu adımın terminal çıktısı arşivden aktarılmayı bekliyor. Yazının metni adımların tamamını anlatır.
Bu şekilde bir tane fonksiyonun içine başka bir fonksiyonu input olarak verebiliriz.

2.

def new_func1():
    print("new func1")

    def new_func2():
        print("new func2")

    return new_func2()

string_new = new_func1()

3.

def decorator_fuction(func):
    def wrapper_function():
        print("wrapper started")
        func()
        print("wrapper stoped")

    return wrapper_function()

@decorator_fuction
def function_neww():
    print("hello world")

wrapper started

hello world

wrapper stopped

Çıktılarını almış oluruz.

İşte bu şekilde iki saat eşitleme yapacağımız yerde bu şekilde tanımlayarak kullanabiliriz.


Class

1. Class tanımlamak

class Musician():
    def __init__(self, name, age):  #bir class' dan bir obje oluşturulduğunda ilk burası çağrılır
        self.name_attribute = name
        self.age_attribute = age

my_musician = Musician("berat", "33")
print(my_musician.name_attribute) # berat
print(my_musician.age_attribute) #33
my_musician.name_attribute = "furkan"
print(my_musician.name_attribute) #furkan

Yani sınıflar örnekteki gibi tanımlanıyor ve değer atamaları yapılıp örnekteki gibi çağrılıyor.


Metodlar

1.

class Musician():
    def __init__(self, name, age, instrunment):
        self.name = name
        self.age = age
        self.instrunment = instrunment

    # method
    def sing(self):
        print(f"we are the champions {self.instrunment} ")

my_musician = Musician("james", 50, "Guitar")
print(my_musician.name)
print(my_musician.age)
print(my_musician.instrunment)
# Diğerlerini zaten self' le obje ureterek yapmistim. Ama burada job' u default yani sinifta oluşturdum.
# Nesnelerin ortak özellikleri olacak şekilde tanımladım

my_musician.job = "singer"  # Tabi ki bu şekilde bir atamayla metodun özelliğini değiştirebiliyoruz
print(my_musician.job)
my_musician.sing()  # we are the champions Guitar yazacak

Çıktımız:

Ekran görüntüsüBu adımın terminal çıktısı arşivden aktarılmayı bekliyor. Yazının metni adımların tamamını anlatır.

Sınıfların Pratik Kullanımları

1.

class DogYear():
    year_factor = 7

    def __init__(self, age): #bu fonksiyon java' daki ya da c#' daki main metodu gibi
        self.age = age

    def calculation(self):
        return self.age * self.year_factor

my_dog = DogYear(3) 
print(my_dog.age) #my dog diye ürettiğimiz nesnenin değerine ulaşırız yani 3' e
print(my_dog.calculation()) #Burada da calculation methoduna my_dog nesnemizi soktuk oda 21 sonucunu verecektir
# Yani programımızın çıktıları 3 ve 23 olacaktır.

Inheritence

1.

class Class1():
    def __init__(self):
        print("Class1 created")

    def method1(self):
        print("method1")

    def method2(self):
        print("method2")

class Class2(Class1): #burda class2' yi class1' den inherite ettim. Yani class1' den miras aldım.
    def __init__(self):
        Class1.__init__(self)
        print("Class2 created")

my_inheritence = Class2()
my_inheritence.method1()
my_inheritence.method2()

Çıktımız:

Ekran görüntüsüBu adımın terminal çıktısı arşivden aktarılmayı bekliyor. Yazının metni adımların tamamını anlatır.

Polymorphism

1.

class Apple():
    def __init__(self, name):
        self.name = name

    def information(self):
        return self.name + " 100 calories"

class Banana():
    def __init__(self, name):
        self.name = name

    def information(self):
        return self.name + " 150 calories"

banana = Banana("Banana")
apple = Apple("Apple")
fruit_list = [banana, apple]

for fruit in fruit_list:
    print(fruit.information())

Çıktımız:

Ekran görüntüsüBu adımın terminal çıktısı arşivden aktarılmayı bekliyor. Yazının metni adımların tamamını anlatır.
Polymorphism farklı sınıflarda aynı method isimleri olarak tanımlarsak bile hangi instance' da tanımladıysak o class' ın instance' i olarak çağırıp ona göre kullanır.
Burada apple Apple instance' indaki informationu kullandi, banana da Banana sınıfının instance' inde ki informationu kullandı.

Özel Metodlar

class Fruits():
    def __init__(self, name, calories):
        self.name = name
        self.calories = calories

my_fruit = Fruits("Banana", 20)
print(my_fruit)

# Mesela list=[1,2] len(list) yaptigimda 2 ciktimizi aliyordum. Len bir built-in fonksiyonuydu
# Ben bu built-in fonksiyonlari kendi class' ımda nasıl kullanacağım peki
# Başka bir örnekle görelim

class Meyveler():
    def __init__(self, ad, kalori):
        self.ad = ad
        self.kalori = kalori

    def __str__(self):
        return f"{self.ad} meyvesi {self.kalori} kaloridir"

    def __len__(self):
        return self.kalori

benim_meyvem = Meyveler("Muz", 200)
print(benim_meyvem)
# Artik burada Muz meyvesi 200 kaloridir çıktısını alırım
# Yani str methodu print ettireceğimiz zaman gidip ilk buraya bakıyor. Yav baba bir string yazdıracaktım elinde var mi bir string değer gidip onu bir yazdırayım için oluşturulmuş özel bir metod' dur.

print(len(benim_meyvem))
# Burada da 200 çıktısını alırım. Len' de string gibi ozel bir metod ve bunu da bu sekilde tanımlarsak yine sorunsuz bir sekilde çıktılarımı alabilirim

Çıktımız:

Ekran görüntüsüBu adımın terminal çıktısı arşivden aktarılmayı bekliyor. Yazının metni adımların tamamını anlatır.

Hataları Ele Almak

1. Olası bir hatayla karşılaşabileceğimiz bir program

def number_power(num1):
    return num1 ** 2

a = int(input("Enter a number:"))
print(number_power(a))

Şimdi ben normalde buraya rakam girersem sıkıntı yok ama ya bir string girersem ne olur tabiki program çöker.
İşte biz programın çökmemesi için try except yapısını kullanacağız.

2.try except yapısı

def us_alma(sayi1):
    return sayi1 ** 2

while True:
    try:
        b = int(input("Enter a number : "))
    except:
        print("Please a number!!!")
    else:
        print("OK!")
        break
    finally:
        print("Burasi her zaman calistirilacak...")
print(us_alma(b))

Çıktımız:

Ekran görüntüsüBu adımın terminal çıktısı arşivden aktarılmayı bekliyor. Yazının metni adımların tamamını anlatır.
Şeklinde olacaktır

Python’ ın ikinci bölümünü de böylece bitirmiş olduk. Artık son bölüm olan kendi araçlarımızı yazma aşamasına geçebiliriz.

Python öğrenme ve esneklik açısından diğer programlama dillerinin bir adım önüne geçiyor.

Siz de kişisel olarak ya da şirket çalışanlarınızın python eğitimleri alarak kendi uygulamalarını yazmasını istiyorsanız; tecrübeli yazılım geliştirme uzmanlarımız ile en temel seviyeden, ileri seviyeye kadar tüm süreçlerinizde yanınızda olarak python programlama dilini eksiksiz ve kafanızda soru işaretleri kalmayacak şekilde öğrenmenize yardımcı olabiliriz.

Serinin son yazısında görüşmek üzere. Bizi takip etmeye devam edin…

Son yazılar

Bu konuda destek

Yazdıklarımız iş yaparken üretilmiş notlardır. Kurumunuz için aynı işi yapabiliriz.

Uzmanla görüşün

Başlayalım

Projenizi konuşalım.

İlk görüşme bir keşif toplantısıdır, satış sunumu değil. Kurumunuzun kendi ortamında yapılacak kısa süreli bir pilot çalışma veya kavram doğrulama (PoC) ile yetkinliğimizi doğrudan değerlendirebilirsiniz.

Teklif formunu doldurun

WhatsApp