import math import numpy as np def myDistance(a, b): myPoint1 = a myPoint2 = b a = (myPoint1[0]-myPoint2[0])**2 b = (myPoint1[1]-myPoint2[1])**2 return math.sqrt(a+b) def findCenter(ListOfPoints): a=0 b=0 length = len(ListOfPoints) for point in ListOfPoints: a = a + point[0] b = b + point[1] return [a/length,b/length] myPoint1 = [0,0] myPoint2 = [1,0] myPoint3 = [0,1] myPoint4 = [1,1] pointList = [] pointList.append(myPoint1) pointList.append(myPoint2) pointList.append(myPoint3) pointList.append(myPoint4) myDistance(myPoint2,myPoint3) findCenter(pointList) myArray = np.array([[1,2,3],[2,6,9]],np.int32) myArray.ndim, myArray.shape myArray1 = myArray.reshape(1,6) print(myArray) print("") print(myArray1)
Histogram
# coding: utf-8 # In[93]: import numpy as np myNumbers = np.random.randint(0,2,10) myHistogram = {} myNumbers # siyah beyaz resim olacak for number in myNumbers: if number in myHistogram.keys(): myHistogram[number]=myHistogram[number]+1 else: myHistogram[number]=1 myNumbers, myHistogram # histogram da iki değer olmalı # bunların oranı yazı-matbaa çıktısı için % kaçtır
VPN istemcisi, İnternet üzerinden bağlantı kurmak istediği kaynakla sanal bir noktadan-noktaya (point-to-point) bağlantı kurar, kaynak ya da uzaktan erişime geçmek istediği sunucu kimlik bilgilerini kontrol eder ve doğrulama sonrasında VPN istemcisiyle uzaktan erişime geçtiği sunucu arasında veri akışı gerçekleşir. Veriler, akış sırasında noktadan-noktaya bağlantı gibi üst bilgi kullanılarak kapsüllenir. Üst bilgi, verilerin bitiş noktasına erişimleri için paylaşılan veya ortak ağ üzerinden yönlendirme bilgileri sağlar. Özel ağ bağlantısını taklit etmek için, gönderilen veriler gizlilik amacıyla şifrelenir. Paylaşılan veya ortak ağda ele geçirilen paketlerin şifreleri, şifreleme anahtarları olmadan çözülemez. Özel ağ verilerinin kapsüllendiği ve şifrelendiği bağlantı VPN bağlantısı olarak bilinir.
İki çeşit VPN bağlantısı vardır. İlki uzaktan erişim VPN, diğeri ise siteden siteye VPN’dir.
VPN Bağlantı Çeşitleri
- Uzaktan Erişim VPN: Uzaktan erişim VPN bağlantıları, evinde çalışan ya da seyahat esnasında ofisinde olamayan kullanıcıların İnternet üzerinden özel ağ üzerindeki sunucuya erişme imkânı sağlar. VPN, istemcisiyle uzaktan erişim sunucusu arasında noktadan noktaya bir bağlantıdır. Ayrıca veriler özel bir ağ üzerinden gönderiliyormuş gibi görünmektedir. Bu yüzden ortak ağın gerçek alt yapısı önemli değildir.
- Siteden siteye VPN: Siteden siteye VPN bağlantıları farklı ofisler arasında veya farklı kuruluşlar arasında ortak bir ağ üzerinden güvenli bir şekilde iletişimi sağlamaz. VPN bağlantısı WAN (Wide Area Network) bağlantısı gibi çalışır. WAN bağlantısı şehirler, ülkeler gibi uzun mesafeler arasında iletişimi sağlayan ağ çeşididir. Ağlar, İnternet üzerinden verileri bir yönlendirici ile başka bir yönlendiriciye iletir. Yönlendiricilere göre VPN bağlantısı, veri bağlantısı olarak işlev görmektedir.
- Kapsülleme: VPN ağında veriler bir üst bilgi ile kapsüllenirler. Üst bilgi, verilerin bitiş noktalarına erişmeleri için, paylaşılan veya ortak ağ üzerinden çapraz geçebilmelerine olanak veren yönlendirme bilgileri sağlar.
- Kimlik doğrulama: Ağa erişmeye çalışan kişinin buna yetkili olup olmadığı, dışarıdan müdahale edilemeyecek şekilde, yani şifreli olarak HTTPS protokolü ile yapılır ve izini olanlar ağa alınır.
- Veri şifreleme: Veriler de dışarıdan ağdan geçen bilgileri dinleyenlerin çözümleyemeyeceği biçimde şifrelenerek dışarıdakiler için anlaşılmaz hâle getirilir.
Tünel oluşturma, bir protokol türündeki paketin başka bir protokol datagramı içinde kapsüllenmesini sağlar. Örneğin, VPN, IP paketlerini Internet gibi ortak bir ağ üzerinden kapsüllemek için PPTP'yi kullanır. Noktadan Noktaya Tünel Protokolü (PPTP), Katman İki Tünel Protokolü (L2TP) veya Güvenli Yuva Tünel Protokolü'ne (SSTP) dayalı bir VPN çözümü yapılandırılabilir.
PPTP, L2TP ve SSTP protokolleri büyük ölçüde, orijinal olarak Noktadan Noktaya Protokolü (PPP) için belirlenen özellikleri esas alır. PPP çevirmeli veya adanmış noktadan noktaya bağlantılar üzerinden veri göndermek için tasarlanmıştır. IP kullanımında, PPP, IP paketlerini PPP çerçeveleri içinde kapsüller ve ardından kapsüllenen PPP paketlerini noktadan noktaya bir bağlantı üzerinden aktarır. PPP orijinal olarak çevirmeli istemci ve ağ erişimi sunucusu arasında kullanılacak protokol olarak tanımlanmıştır.
PPP kimlik doğrulama kullanılarak kullanıcı düzeyinde kimlik doğrulama
VPN bağlantısı oluşturmak için, VPN sunucusu bağlanmayı deneyen VPN istemcisinin kimliğini, Noktadan Noktaya Protokolü (PPP) kullanıcı düzeyinde kimlik doğrulama yöntemi kullanarak doğrular ve VPN istemcisinin uygun yetkilendirmeye sahip olduğunu onaylar. Karşılıklı kimlik doğrulama kullanılırsa, VPN istemcisi de VPN sunucusunun kimliğini doğrular; bu şekilde kendilerini VPN sunucuları gibi tanıtan bilgisayarlara karşı koruma sağlanır.
Internet Anahtar Değişimi (IKE) kullanarak bilgisayar düzeyinde kimlik doğrulama
Internet Protokolü güvenliği (IPsec) güvenlik ilişkisi oluşturmak üzere VPN istemcisi ve VPN sunucusu, bilgisayar sertifikaları veya önceden paylaşılan bir anahtar değişimi için IKE protokolünü kullanır. Her iki durumda da VPN istemcisi ve sunucusu, birbirlerinin kimliklerini bilgisayar düzeyinde doğrular. Bilgisayar sertifikası kimlik doğrulaması çok daha güçlü bir kimlik doğrulama yöntemi olduğundan daha fazla önerilir. Bilgisayar düzeyinde kimlik doğrulama yalnızca L2TP/IPsec bağlantıları için uygulanır.
Veri kaynağı için kimlik doğrulama ve veri bütünlüğü
VPN bağlantısı üzerinden gönderilen verinin, bağlantının diğer ucundan gönderilmiş olduğunu ve aktarım sırasında değiştirilmediğini onaylamak için, veride yalnızca gönderenin ve alanın bildiği bir şifreleme anahtarına dayalı şifreleme sağlama toplamı bulunur. Veri kaynağı için kimlik doğrulama ve veri bütünlüğü yalnızca L2TP/IPsec bağlantılarında kullanılabilir.
Veriler, paylaşılan veya ortak geçiş ağından çapraz geçer ve gizliliğin sağlanması için gönderici tarafından şifrelenir. Daha sonra bu şifreler, alan tarafından çözümlenir. Şifreleme ve alan tarafından şifre çözme işlemi, göndericinin ve alanın kullandığı şifreleme anahtarına bağlıdır.
VPN bağlantısı üzerinden veri transferi yapıldığında şifreleme anahtarı olduğu için bilgiler ele geçirilse bile dışarıdaki için bir anlam ifade etmez. Ayrıca şifreleme anahtarının uzunluğu da güvenlik anlamında önemli bir faktördür. Çünkü şifreleme anahtarını belirlemek adına hesaplama işlemleri yapıldığında bu tür metotlar, şifreleme anahtarı büyüdüğünde daha uzun hesaplama zamanı alır. Bu yüzden güvenliği sağlamak adına, yani veriyi mümkün olduğu kadar gizli tutmak amacıyla şifreleme anahtarını mümkün olan en büyük boyutta seçmek veya kullanmak önemli bir faktördür.
Tünel oluşturma, bir protokol türündeki paketin başka bir protokol datagramı içinde kapsüllenmesini sağlar. Örneğin, VPN, IP paketlerini Internet gibi ortak bir ağ üzerinden kapsüllemek için PPTP'yi kullanır. Noktadan Noktaya Tünel Protokolü (PPTP), Katman İki Tünel Protokolü (L2TP) veya Güvenli Yuva Tünel Protokolü'ne (SSTP) dayalı bir VPN çözümü yapılandırılabilir.
PPTP, L2TP ve SSTP protokolleri büyük ölçüde, orijinal olarak Noktadan Noktaya Protokolü (PPP) için belirlenen özellikleri esas alır. PPP çevirmeli veya adanmış noktadan noktaya bağlantılar üzerinden veri göndermek için tasarlanmıştır. IP kullanımında, PPP, IP paketlerini PPP çerçeveleri içinde kapsüller ve ardından kapsüllenen PPP paketlerini noktadan noktaya bir bağlantı üzerinden aktarır. PPP orijinal olarak çevirmeli istemci ve ağ erişimi sunucusu arasında kullanılacak protokol olarak tanımlanmıştır.
PPTP
PPTP, birden çok protokol trafiğinin şifrelenmesini ve ardından IP ağı veya Internet gibi ortak IP ağı üzerinden gönderilmek üzere bir IP üst bilgisi ile kapsüllenmesini sağlar. PPTP uzaktan erişim ve siteden siteye VPN bağlantıları için kullanılabilir. Internet, VPN için ortak ağ olarak kullanıldığında, PPTP sunucusu, biri Internet üzerinde diğeri de intranet'te bulunan iki arabirime sahip PPTP etkin bir VPN sunucusudur.
PPTP, ağ üzerinden aktarım yaptığında PPP çerçevelerini IP datagramları içerisinde kapsüller. PPTP, tünel yönetimi için Genel Yönlendirme Kapsüllemesi‘nin (GRE) değiştirilmiş bir sürümünü kullanır. Ayrıca kapsüllenen PPP çerçeveleri şifrelenebilir veya sıkıştırılabilir.
PPP çerçevesi, MS-CHAPv2 veya EAP-TLS kimlik doğrulama işlemiyle oluşturulan şifreleme anahtarları kullanılarak, Microsoft Noktadan Noktaya Şifreleme (MPPE) ile şifrelenir. PPP çerçeve yüklerinin şifrelenebilmesi için, sanal özel ağ istemcilerinin MS-CHAP v2 veya EAP-TLS kimlik doğrulama protokolünü kullanması gerekir. PPTP, temeldeki PPP şifrelemesinden ve önceden şifrelenen PPP çerçevesinin kapsüllenmesinden yararlanır.
L2TP
L2TP birden çok protokol trafiğinin şifrelenmesini ve ardından IP veya zaman uyumsuz aktarım modu (ATM) gibi noktadan noktaya datagram teslimini destekleyen herhangi bir medya üzerinden gönderilmesini sağlar. L2TP, Cisco Systems, Inc. tarafından geliştirilen, PPTP ve Katman İki İletme (L2F) protokollerinin birleşiminden oluşan bir teknolojidir. L2TP, PPTP ve L2F'nin en iyi özelliklerini alır.
PPTP'nin aksine, Microsoft'un L2TP uygulaması, PPP datagramlarının şifrelenmesinde MPPE'yi kullanmaz. L2TP, şifreleme hizmetleri için Aktarım Modunda Internet Protokolü güvenliğine (IPsec) dayanır. L2TP ve IPsec'in birleşimi L2TP/IPsec olarak bilinir.
L2TP/IPsec paketlerinin kapsüllenmesi iki katmandan oluşmaktadır. Birinci katman, PPP çerçevesi L2TP ve UDP üst bilgisiyle sarılmaktadır. İkinci katman ise Ipsec güvenlik yükü dediğimiz (ESP) üst bilgi ve alt bilgi olmak üzere iletiyi ve kimlik doğrulamayı destekleyen Ipsec kimlik doğrulama alt bilgisi ve IP üst bilgisiyle sarılır. IP üst bilgisinde VPN sunucusuna karşılık gelen IP adresi yer almaktadır.
SSTP
Güvenli Yuva Tüneli Protokolü (SSTP), 443 numaralı TCP bağlantı noktası üzerinden HTTPS protokolünü kullanan yeni bir tünel protokolüdür ve trafiğin güvenlik duvarlarından ve PPTP ile L2TP/IPsec trafiğini engelleyebilen Web proxy'lerden geçirilmesini sağlar. SSTP, PPP trafiğini HTTPS protokolünün Güvenli Yuva Katmanı (SSL) kanalı üzerinde kapsüllemek için bir mekanizma sağlar. PPP'nin kullanılması, EAP-TLS gibi etkili kimlik doğrulama yöntemlerinin desteklenmesine olanak sağlar. SSL, gelişmiş anahtar anlaşması, şifreleme ve bütünlük denetimi kullanarak aktarma düzeyinde güvenlik sağlar.
Bir istemci SSTP tabanlı VPN bağlantısı oluşturmaya çalışırsa, SSPT ilk olarak, SSTP sunucusunda çift yönlü bir HTTPS katmanı oluşturur. Protokol paketleri bu HTTPS katmanı üzerinden veri yükü olarak geçer.
PPTP, L2TP/Ipsec ve SSTP ile VPN çözümlerinde dikkat edilmesi gereken hususlar:
PPTP, Microsoft işletim sistemleriyle birlikte (Microsoft 2000, WindowsXP, Windows Vista vb.) ve aynı zamanda farklı Microsoft istemcileriyle kullanılabilir. PPTP, L2TP/Ipsec gibi ortak anahtar altyapısı (PKI) kullanımını gerektirmez. Bunun üzerine PPTP, veri akışındaki güvenliği sağlar, yani veri bir başkasının eline geçtiğinde şifreleme anahtarı olmadan ulaşılamaz. Fakat veriler, PPTP tabanlı VPN bağlantılarının akış sırasıda verilerin değişimi konusunda ve kimlik doğrulama, yani veriyi gönderen kişinin yetkili kullanıcı olup olmadığı konularında kanıt sağlayamaz.
L2TP/Ipsec, sadece Microsoft 2000, Windows XP ve Windows Vista ve üstü çalıştıran bilgisayarlarla kullanılabilir. L2TP/Ipsec, kimlik doğrulama yöntemi için önceden paylaşılan anahtarları veya bilgisayar sertifikalarını sağlar. Kimlik doğrulama kısımında bilgisayar sertifikalarını sağlamak için PKI’ya başvurur. L2TP/Ipsec, VPN bağlantıları kimlik doğrulama, veri gizliliği ve veri bütünlüğü için IPsec'i kullanır.
SSTP, Windows Vista Service Pack 1 (SP1) veya Windows Server 2008 ve üstü işletim sistemleriyle çalışan bilgisayarlarda kullanılır. SSTP VPN bağlantılarında SSL kullanılarak veri gizliliği, kimlik doğrulaması ve veri bütünlüğü sağlanır.
Ayrıca, bu üç tünel türünde de kimlik doğrulama, İnternet Protokolü sürüm 4 (Ipv4) ve İnternet Protokolü 6 (Ipv6) antlaşması ve ağ erişim koruması (NAP) gibi PPP özellikleri, bu üç tünelde de değişmez bir kıstastır.
# coding: utf-8 # In[5]: import numpy as np import matplotlib.pyplot as plt im1=[[1,0],[0,0]] im2=[[0,1],[0,0]] im3=[[0,0],[1,0]] im4=[[0,0],[0,1]] em1=[[0,1],[1,1]] em2=[[1,0],[1,1]] em3=[[1,1],[0,1]] em4=[[1,1],[1,0]] im1 = [im1, im2, im3, im4] em1 = [em1, em2, em3, em4] img1 = plt.imread("t.jpg") img1 plt.imshow(img1, plt.cm.binary) plt.show() img1.ndim img1.shape def count_internal_mask(image): counter_internal = 0 for mask in im1: counter_internal = counter_internal + count_mask(image, mask) return counter_internal def count_external_mask(image): counter_external = 0 for mask in em1: counter_external = counter_external + count_mask(image, mask) return counter_external def count_mask(image, mask): counter = 0 m = img1.shape[0] n = img1.shape[1] for i in range(m-1): for j in range(n-1): a = b = c = d = False if(img1[i,j][0] == mask[0][0]): a = True if (img1[i,j+1][0] == mask[0][1]): b = True if (img1[i+1,j][0] == mask[1][0]): c = True if (img1[i+1,j+1][0] == mask[1][1]): d = True if (a and b and c and d): counter = counter + 1 return counter c1 = count_internal_mask(img1) c2 = count_external_mask(img1) c1, c2 # In[ ]:
Snort'un mimarisi performans, basitlik ve esnekliğe dayalıdır. Snort IP ağları üzerinde gerçek zamanlı trafik analizi ve paket loglaması yapabilen bir yazılımdır. Yazılım protokol analizi, içerik tarama/eşleme yapabildiği gibi, arabellek taşması, port taraması, CGI saldırısı, işletim sistemi parmakizi denemesi gibi pek çok saldırı ve zararlı/şüpheli yazılım çeşidini tespit edebilmektedir. Snort üzerinden geçen trafiği tanımlamak için kullanıcı tarafından da tanımlanabilen esnek kural dilini kullanır; bunun yanı sıra modüler takma-program (plug-in) mimarisini kullanan tespit motoru da bulunmaktadır. Snort'un gerçek zamanlı alarm mekanizması vardır. Bu mekanizma Windows istemcilerine WinPopup pencereleri çıkarabilir, Linux türevlerinde alarm mekanizmalarını syslog'a dahil edebilir, ya da özelleştirilmiş günlük dosyasında alarmları biriktirebilir.
Snort mimarisinin 3 temel bileşeni vardır: paket çözücü, tespit motoru ve günlükleme/alarm altsistemi. Snort temel olarak uygulama seviyesine kadar tüm katmanlardaki veriye bakar ve bu veri içerisinden belirli trafiği toplar; kullanıcı ya da geliştirici tarafından tanımlanabilen kural setlerini uygulayarak bulduklarını değerlendirir.
Snort temelde 3 ayrı modda çalışabilecek şekilde yapılandırılabilir:
Paket İzleyici modu (packet sniffer): Bu mod tcpdump paket izleyici programı gibi basit bir şekilde ağdan paketleri okuyup sürekli bir şekilde konsola akıttığı moddur. Konut satırında
- ./snort -v
Paket Günlükleme modu (packet logger): paketleri diske yazar. Komut satırında
- ./snort -dev -l ./log
Ağ Sızma Tespit/Engelleme Sistemi modu (NIDS/NIPS): Snort'un en karmaşık ve yapılandırılabilir modudur. Snort bu modda temel olarak trafiği analiz edip kullanıcı tarafından tanımlanabilen bir kural seti ile gördüklerine karşı çeşitli eylemler gerçekleştirebilir. Örneğin komut satırında
- ./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf
Kuralları Yazmak
Snort kuralları basit bir şekilde yazılabilmesine rağmen zararlı/şüpheli trafiği tespit etmede oldukça başarılıdır.
Snort kuralları basit bir şekilde yazılabilmesine rağmen zararlı/şüpheli trafiği tespit etmede oldukça başarılıdır.
Snort kuralları mantıksal olarak iki kısma ayrılmaktadır: kural başlığı ve kural opsiyonları. Kural başlığı kural eylemini, protokolü, kaynak IP adresi, hedef IP adresi, alt ağ maskeleri ile kaynak ve hedef port bilgilerini içerir. Kural opsiyonu ise kural eylemi takınılacaksa paketin hangi kısımlarının inceleneceğini belirler. Kural eylemi 8 şekilde olabilir:
- Pass (Geçir): Paketi basit bir şekilde geçirilir
- Log (Günlükle): Günlükleme rutini kullanıcı tarafından ne tanımlandı ise tam paket olarak kaydedilir.
- Alert (Alarm): Kullanıcı tarafından belirlenen metotla bir olay bildirisi yaratır ve tüm paketi günlükler.
- Activate (Etkinleştir): Alarm ver ve ardından başka bir dinamik kuralı etkinleştirir.
- Dynamic (Dinamik): Bir etkinleştir kuralı etkinleştirinceye kadar boşta kalır, sonra günlükle olarak çalışır.
- Drop (Düşür): Paketi düşür ve günlükler.
- Reject (Reddet): Paketi engeller, günlükler, protokol TCP ise TCP yeniden başlat (TCP reset)ya da ICMP port erişilemez mesajı yollar.
- Sdrop (Günlüklemeden Düşür): Paketi düşürür ve günlüklemez.
Aşağıda örnek olarak bir alarm kuralı gösterilmiştir:
- alert tcp any any ? 10.1.1.5 80 (content: "cgi-bin/phf" ; msg "PHF probe!";)
- alert - kural eylemi: alarm ver
- tcp - protokol
- any - kaynak IP, herhangi bir IP adresinden
- any - kaynak port, herhangi bir porttan
- 10.1.1.5 - hedef IP adresi
- 80 - hedef port
- content: -"cgi-bin/phf" - mesaj içeriğinde "cgi-bin/phf" var ise
- msg "PHF probe!" - PHF probe! Alarmı ver.Kural setleri periyodik olarak Snort geliştirici grup tarafından Snort resmi web sitesinden yayınlandığı gibi, kurallar kullanıcılar tarafından da oluşturulabilmektedir.
Snort Kurulumu
Snort kurulumunu gerçekleştirmeden önce Snort'un düzgün çalışması için bir takım paketlerin kurulması gereklidir.
- # apt-get update
- # apt-get install -y build-essential
- # apt-get install -y libpcap-dev libpcre3-dev libdumbnet-dev
- # apt-get install -y bison flex
- # apt-get install -y zlib1g-dev
komutları ile gerekli kurulumları gerçekleştirelim.
- # wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz
komutu ile Snort'un kullandığı ağ kütüphanesi olan Daq kütüphanesini indirelim.
- # tar -xvzf daq-2.0.6.tar.gz
- # cd daq-2.0.6
- # ./configure
- # make
- # make install
komutları ile Daq kütüphanesini kuralım.
- # wget https://www.snort.org/downloads/snort/snort-2.9.7.6.tar.gz
komutu ile Snort'u indirelim.
- # cd ..
- # tar -xvzf snort-2.9.7.6.tar.gz
- # cd snort-2.9.7.6
- # ./configure --enable-sourcefire
- # make
- # make install
komutları ile Snort'u kuralım.
Not! Snort'un en güncel sürümü için https://www.snort.org/ sitesini ziyaret edebilirsiniz.
Scapy Kurulumu
- $ cd /tmp
- $ wget --trust-server-names scapy.net # veya wget -O scapy.zip scapy.net
- $ unzip scapy-x.x.x.zip
- $ cd scapy
- $ sudo python setup.py install
komutları ile kurulum gerçekleştirilir.
Scapy'i Başlatmak
- Sudo Scapy
komutu ile scapy başlatılır.
Scapy Kullanımı
- from scapy.all import *
Yazının bu aşaması artık tamamen örnekler üzerinden gidecektir.
- ethernet_frame = Ether()
- ethernet_frame.show()
###[ Ethernet ]###
- dst = ff:ff:ff:ff:ff:ff
- src = xx:xx:xx:cb:ed:cd
- type = LOOP
- ethernet_frame = Ether()
- ethernet_frame.src = "aa:bb:cc:dd:ee:ff"
- ethernet_frame.show()
###[ Ethernet ]###
- dst = ff:ff:ff:ff:ff:ff
- src = aa:bb:cc:dd:ee:ff #değişen kısım
- type = LOOP
- ip_packet = IP()
- ip_packet = show()
###[ IP ]###
- version = 4
- ihl = None
- tos = 0x0
- len = None
- id = 1
- flags =
- frag = 0
- ttl = 64
- proto = hopopt
- chksum = None
- src = 127.0.0.1
- dst = 127.0.0.1
- \options \
- ip_packet = IP()
- ip_packet.src = "192.168.1.2"
- ip_packet.dst = "192.168.1.11"
- ip_packet.ttl = 128
- ip_packet.show()
###[ IP ]###
- version = 4
- ihl = None
- tos = 0x0
- len = None
- id = 1
- flags =
- frag = 0
- ttl = 128 #Değiştirdiğimiz kısım
- proto = hopopt
- chksum = None
- src = 192.168.1.2 #Değiştirdiğimiz kısım
- dst = 192.168.1.11 #Değiştirdiğimiz kısım
- \options \
Scapy'de Paket Gönderme ve Veriyi İşleme
Artık bir paketi nasıl manipüle edebileceğimizi biliyoruz, fakat takdir edersiniz ki amacımız sadece bir protokolün içeriğini manipüle etmek değil, aynı zamanda bu manipüle edilmiş paketi göndermektir. Bunun için Scapy bize temel olarak 6 adet fonksiyon kullanma imkanı sağlamıştır. Aşağıda bu fonksiyonları görmekteyiz;
- send()
- sendp()
- sr()
- sr1()
- srp()
- srp1()
send()
Bu fonksiyon sayesinde oluşturduğumuz paketleri cihazımızdaki ethernet kartı veya wireless kartı vasıtası ile iletim ortamına gönderebiliyoruz. Aşağıdaki örneği inceleyelim.
- send(IP(dst="192.168.10.14", src="192.168.10.62")/ICMP()/"Scapy")
- .
- Sent 1 packets.
Tamam buraya kadar her şey güzel fakat, burada syntax açısından biraz farklılıklar var. Kısaca buna değinmekte fayda var. Sadece tek bir protokol yerine birden fazla protokolden oluşan bir network paketini oluşturmak içinTCP/IP protocol yapısını bilmek gerekir. Mesela HTTP isteği sadece HTTP datasından ibaret değildir. Öncelikle bu HTTP datasını kapsülleyen bir TCP datagramı, bu datagramı kapsülleyen IP paketi, IP paketini kapsülleyen bir Ethernet frame’i vardır. Yani yapı şu şekildedir. Ethernet > IP > TCP > HTTP data . Dolayısıyla Scapy’de de paketlerimizi oluştururken bu yapıya dikkat etmemiz gerekmektedir. Örneğimize geri dönecek olursak protokol başlıklarını sırası ile sonuna () koyarak ekledik. Daha sonra / işaretini de kapsülleyici olarak kullandık. Mesela IP() ile ilk olarak IP paketimizin başlığını eklemiş olduk. Daha sonra parametre verme mantığı ile source ve destination adreslerini src ve dst değişkenlerini kullanarak örnekteki gibi değiştirdik. Daha sonra ICMP() ile ICMP başlığını ekledik. Bu ICMP başlığının payload kısmına da verimizi yerleştirdik. Bu kapsülleme işlemlerini de hep / işareti ile yaptık. Tüm bu işlemlerden sonra artık içinde Scapy yazan bir ICMP paketi oluşmuş oldu. Bizim amacımız bu paketi göndermekti. İşte bu paketi de send() fonksiyonumuzun içine yazarak göndermiş olduk. Genel olarak süreç ve yapı bu şekildedir. Gerisi teferruattur. Şimdi aşağıdaki örneğimizi inceleyelim.
- send(IP(dst="192.168.10.14")/ICMP()/"Scapy", loop=1, inter=0.2, verbose=False)
sendp()
Bu fonksiyonumuz ise temel olarak, send() fonksiyonu ile aynı görevi üstlenmektedir. Fakat aralarındaki temel fark şudur; send() fonksiyonu ile Layer 3 düzeyinde işlemler yapabilirsiniz, Layer 2(802.3, 802.11, 802.1q, 802.15..) yani bu örnekteki Ethernet çerçevesinde değişiklik yapamazsınız, bu değerler otomatik olarak Scapy tarafından(dolaylı yoldan işletim sistemi tarafından) doldurulur. Fakat sendp() fonksiyonu ile Layer 2 katmanında da paketlerinizi manipüle edebilirsiniz. Yani Ethernet çerçevesinde istediğiniz değişikliği yapabilirsiniz. Şimdi bu teorik bilgiden sonra aşağıdaki kodumuzu inceleyelim.
Bu fonksiyonumuz ise temel olarak, send() fonksiyonu ile aynı görevi üstlenmektedir. Fakat aralarındaki temel fark şudur; send() fonksiyonu ile Layer 3 düzeyinde işlemler yapabilirsiniz, Layer 2(802.3, 802.11, 802.1q, 802.15..) yani bu örnekteki Ethernet çerçevesinde değişiklik yapamazsınız, bu değerler otomatik olarak Scapy tarafından(dolaylı yoldan işletim sistemi tarafından) doldurulur. Fakat sendp() fonksiyonu ile Layer 2 katmanında da paketlerinizi manipüle edebilirsiniz. Yani Ethernet çerçevesinde istediğiniz değişikliği yapabilirsiniz. Şimdi bu teorik bilgiden sonra aşağıdaki kodumuzu inceleyelim.
- sendp(Ether(src="aa:bb:cc:dd:ee:ff")/IP(dst="192.168.10.14")/ICMP()/"Scapy", count=10, inter=0.2, verbose=False)
sr()
Şimdiye kadar oluşturduğumuz paketlerimizi sadece iletim ortamına göndermekle yetindik. Fakat sadece göndermek bizim için yeterli değil, ağ kartımıza gelen paketleri de değerlendirmek en az göndermek kadar önemlidir. Aslında biz yukarıdaki örneklerde ICMP paketi gönderdirdiğimiz de, cevap olarak bize ICMP Reply paketi gelmektedir, fakat biz o ICMP Reply paketini göremedik ve dolayısıyla o ICMP Reply paketini işleyemedik. İşte bu ICMP Reply paketi gibi bizim ağ kartımızdan gönderdiğimiz pakete cevap olarak gelen paketleri sr() fonksiyonu ile işleme alabiliyoruz. Aynı zamanda sr() fonksiyonu ile paketlerimizi iletim ortamına da gönderedebiliriz. Yani ayrıca send() fonksiyonunu kullanmamıza gerek yoktur.
sr'nin açılımı send and recieve'dir
Aşağıdaki örneği inceleyelim.
- ans, unans = sr(IP(dst="cyberkod.com")/TCP(sport=9898, dport=80, flags= 'S'))
- for send, recieve in ans:
- send.show()
- print("--")
- recieve.show()
###[ IP ]###
###[ IP ]###
- version = 4
- ihl = None
- tos = 0x0
- len = None
- id = 1
- flags =
- frag = 0
- ttl = 64
- proto = tcp
- chksum = None
- src = 192.168.10.63
- dst = 192.30.252.153
- \options \
- ###[ TCP ]###
- sport = 9898
- dport = http
- seq = 0
- ack = 0
- dataofs = None
- reserved = 0
- flags = S
- window = 8192
- chksum = None
- urgptr = 0
- options = {}
###[ IP ]###
- version = 4L
- ihl = 5L
- tos = 0x0
- len = 44
- id = 0
- flags = DF
- frag = 0L
- ttl = 46
- proto = tcp
- chksum = 0xc52c
- src = 192.30.252.153
- dst = 192.168.10.63
- \options \
- ###[ TCP ]###
- sport = http
- dport = 9898
- seq = 3181249471
- ack = 1
- dataofs = 6L
- reserved = 0L
- flags = SA
- window = 28720
- chksum = 0xb805
- urgptr = 0
- options = [('MSS', 1436)]
sr1()
Bu fonksiyonumuz ise paket gönderip sadece dönen cevabı bir değişkene atama işlemini gerçekleştirmektedir. Yani bir ICMP paketi gönderdiniz, eğer başarılı bir şekilde paketiniz gitti ise dönen ICMP reply paketini bir değişkende saklayabilirsiniz. Yok başarılı bir şekilde gitmedi ise bundan haberdar da olamazsınız. Çünkü sr() fonksiyonunda olduğu gibi bir unans değeri döndürmez. Aşağıdaki örneği inceleyelim.
Bu fonksiyonumuz ise paket gönderip sadece dönen cevabı bir değişkene atama işlemini gerçekleştirmektedir. Yani bir ICMP paketi gönderdiniz, eğer başarılı bir şekilde paketiniz gitti ise dönen ICMP reply paketini bir değişkende saklayabilirsiniz. Yok başarılı bir şekilde gitmedi ise bundan haberdar da olamazsınız. Çünkü sr() fonksiyonunda olduğu gibi bir unans değeri döndürmez. Aşağıdaki örneği inceleyelim.
- recieved = sr1(IP(dst="google.com")/ICMP())
- recieved.show()
###[ IP ]###
- version = 4L
- ihl = 5L
- tos = 0x0
- len = 28
- id = 0
- flags =
- frag = 0L
- ttl = 54
- proto = icmp
- chksum = 0xfb52
- src = 172.217.17.206
- dst = 192.168.10.63
- \options \
- ###[ ICMP ]###
- type = echo-reply
- code = 0
- chksum = 0x0
- id = 0x0
- seq = 0x0
sniff()
Yazının sonlarına doğru değinmezsem içimde kalır dediğim bir fonksiyondur sniff() fonksiyonu. Bu fonksiyon sayesinde ağ kartınıza gelen paketleri dinleyip bir değişkene çok kolay bir şekilde atayabilirsiniz. İçerisine gireceğiniz çeşitli filtreler ile spesifik paketleri dinleyebilirsiniz. Örnekleri inceleyelim.
- pkts = sniff(filter="arp", count=5)
- pkts.summary()
- Ether / ARP who has 192.168.10.147 says 192.168.10.1 / Padding
- Ether / ARP who has 192.168.10.148 says 192.168.10.1 / Padding
- Ether / ARP who has 192.168.10.149 says 192.168.10.1 / Padding
- Ether / ARP who has 192.168.10.150 says 192.168.10.1 / Padding
- Ether / ARP who has 192.168.10.151 says 192.168.10.1 / Padding
- pkts = sniff(filter="arp", count=5)
- pkts[0].show()
Basit Scapy Komutları
Using Scapy’s powerful packet crafting facilities we can quick replicate classic TCP Scans. For example, the following string will be sent to simulate an ACK Scan:
- >>> ans, unans = sr(IP(dst="www.slashdot.org")/TCP(dport=[80,666],flags="A"))
- >>> for s,r in ans: ... if s[TCP].dport == r[TCP].sport: ... print str(s[TCP].dport) + " is unfiltered"
- >>> for s in unans: ... print str(s[TCP].dport) + " is filtered"
Xmas Scan can be launched using the following command:
- >>> ans, unans = sr(IP(dst="192.168.1.1")/TCP(dport=666,flags="FPU") )
IP Scan
A lower level IP Scan can be used to enumerate supported protocols:
- >>> ans, unans = sr(IP(dst="192.168.1.1",proto=(0,255))/"SCAPY",retry=2)
The fastest way to discover hosts on a local ethernet network is to use the ARP Ping method:
- >>> ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.1.0/24"),timeout=2)
- >>> ans.summary(lambda (s,r): r.sprintf("%Ether.src% %ARP.psrc%") )
- >>> arping("192.168.1.*")
Classical ICMP Ping can be emulated using the following command:
- >>> ans, unans = sr(IP(dst="192.168.1.1-254")/ICMP())
- >>> ans.summary(lambda (s,r): r.sprintf("%IP.src% is alive") )
In cases where ICMP echo requests are blocked, we can still use various TCP Pings such as TCP SYN Ping below:
- >>> ans, unans = sr( IP(dst="192.168.1.*")/TCP(dport=80,flags="S") )
- >>> ans.summary( lambda(s,r) : r.sprintf("%IP.src% is alive") )
If all else fails there is always UDP Ping which will produce ICMP Port unreachable errors from live hosts. Here you can pick any port which is most likely to be closed, such as port 0:
- >>> ans, unans = sr( IP(dst="192.168.*.1-10")/UDP(dport=0) )
- >>> ans.summary( lambda(s,r) : r.sprintf("%IP.src% is alive") )
Malformed packets:
- >>> send(IP(dst="10.1.1.5", ihl=2, version=3)/ICMP())
- >>> send( fragment(IP(dst="10.0.0.5")/ICMP()/("X"*60000)) )
- >>> send(IP(dst=target, id=42, flags="MF")/UDP()/("X"*10)) >>> send(IP(dst=target, id=42, frag=48)/("X"*116)) >>> send(IP(dst=target, id=42, flags="MF")/UDP()/("X"*224))
- >>> send(IP(src=target,dst=target)/TCP(sport=135,dport=135))
Karakter Karşılastırma
# coding: utf-8 # In[28]: import matplotlib.pyplot as plt import numpy as np aList = [] img1 = plt.imread("a1.jpg") img1.ndim, img1.shape img2 = plt.imread("a2.jpg") img2.ndim, img2.shape img3 = plt.imread("a3.jpg") img3.ndim, img3.shape img4 = plt.imread("a4.jpg") img4.ndim, img4.shape img5 = plt.imread("a5.jpg") img5.ndim, img5.shape img6 = np.zeros(img1.shape[0:2]) img6.shape threshold = 120 aList.append(img1) aList.append(img2) aList.append(img3) aList.append(img4) aList.append(img5) for k in aList: for i in range(k.shape[0]): for j in range(k.shape[1]): n = k[i,j,0]/3 + k[i,j,1]/3 + k[i,j,2]/3 if n > threshold: k[i,j] = 255 else: k[i,j] = 0 plt.subplot(1,5,1), plt.imshow(aList[0]) plt.subplot(1,5,2), plt.imshow(aList[1]) plt.subplot(1,5,3), plt.imshow(aList[2]) plt.subplot(1,5,4), plt.imshow(aList[3]) plt.subplot(1,5,5), plt.imshow(aList[4]) plt.show() aList[0].shape myArray = np.array(aList[0],np.int32).reshape(1,30810) #hata print(myArray)
Linux dünyasında bir çok işlem konsol üzerinden gerçekleştiriliyor. Bu yazımda da konsol üzerinden metin dosyası oluşturma, metin dosyasına metin ekleme, düzenlemesi
, silme ve dosyaları birleştirme işlemlerinden bahsedeceğim.
Dosya Oluşturma
- touch dosya_ismi
komutu ile ev dizinimizde bir dosya oluşturabiliriz.
Dosyaya Metin Ekleme
- vi dosya_ismi
komutu ile ev dizinimizde verdiğimiz isimde bulunan dosya açılacaktır. Daha sonra açılan dosyaya istediğimiz metni yazabiliriz.
- ctrl + c
Yazma işlemimiz bittikten sonra yukarıdaki tuşlara basarak çıkış moduna giriyoruz.
- :w
Daha sonra bu modda yukarıdaki komutu yazarak dosyayı kaydediyoruz.
- :q
Daha sonra dosyadan çıkmak için yine aynı şekilde yukarıdaki komutu yazarak enter tuşuna basıyoruz.
Mesafe ve Ortalama
Traceroute açık kaynak kodlu bir ağ analizi yazılımıdır. Traceroute programı 1987 yılında Van Jacobson tarafından yazılmıştır. Traceroute programı, TCP/IP ağlarında kaynak bilgisayardan hedef bilgisayara giden paketlerin hangi rotayı takip ettiğinin anlaşılması ve bu rotalardan geçerken meydana gelen gecikmelerin görülebilmesini sağlayan bir ağ aracıdır. Traceroute programı tüm unix/Linux ve Microsoft Windows tabanlı işletim sistemlerinde bulunur. Microsoft Windows işletim sistemlerinde bu aracın adı "tracert" olarak geçmektedir. Traceroute programın çalışabilmesi için veri paketinin üzerinden geçtiği hostlarda herhangi ek özelliğin bulunmasına gerek yoktur. IPv6 desteği (traceroute6) vardır.
Traceroute; IP başlığındaki TTL (time-to-live) alanını ve ICMP (Internet Control Message Protocol) kullanır.
TTL, IP başlığının (IP header) dokuzuncu baytında yer alır ve 8 bitlik bir alana sahiptir. TTL'in başlangıç değeri, IP paketinin oluşturulduğu işletim sistemi tarafından belirlenir. TTL değeri işletim sisteminden işletim sistemine farklılık göstermektedir. TTL değeri, IP paketinin üzerinden geçtiği her hop tarafından "bir" azaltılır. IP başlığındaki TTL alanının amacı, IP paketlerinin ağlarda sonsuz dolaşımının önüne geçmektir. Bir yönlendirici, TTL alanı 0 ya da 1 olan bir IP paketi almış ise bu paketi düşürür, başka bir yere yönlendirmez ve kaynak bilgisayara "ICMP TTL time exceeded” mesajı gönderir. "TTL time exceeded" mesajı ICMP başlığında "Type 11" ve "Code 0" değerlerini alacak şekilde tanımlanmıştır.
Linux işletim sistemine sahip olan bilgisayarlarda "traceroute" komutu, hedef bilgisayara UDP datagramları gönderir. Linux işletim sistemine sahip bilgisayarlar bunun yanı sıra, hedef bilgisayarlara "ICMP Echo Request" mesajları ya da TCP SYN segmentleri de gönderebilirler. Windows işletim sistemine sahip olan bilgisayarlar hedef bilgisayarlara UDP datagramları yerine "ICMP Echo Request" mesajları gönderirler.
"Traceroute" programı, hedef bilgisayara ilk olarak TTL alan değeri "1" olan üç adet paket gönderir. TTL değeri "1" yapılmış olan IP paketlerini alan birinci yönlendirici, bu paketleri bir sonraki -ikinci- yönlendiriciye göndermez, düşürür ve kaynak IP adresine "ICMP TTL time exceeded” (Type 11, Code 0) mesajını gönderir. "ICMP TTL time exceeded" mesajını alan kaynak bilgisayar bu sefer TTL değeri "2" olan üç adet IP paketini hedef bilgisayara gönderir. Bu paketleri alan birinci yönlendirici TTL değerini "1" düşürerek "1" yaparak ikinci yönlendiriciye iletir. İkinci yönlendirici TTL değeri "1" olan IP paketlerini bir sonraki yönlendiriciye göndermez, düşürür ve kaynak IP adresine "ICMP TTL time exceeded” (Type 11, Code 0) mesajını gönderir. Kaynak bilgisayar bu sefer TTL değer "3" olan üç adet paketi hedefe gönderir. İlk iki yönlendirici, yine TTL değerlerini "1" düşürerek IP paketlerini üçüncü yönlendiriciye iletir. Üçüncü yönlendirici yönlendirici TTL değeri "1" olan IP paketlerini bir sonraki yönlendiriciye göndermez, düşürür ve kaynak IP adresine "ICMP TTL time exceeded” (Type 11, Code 0) mesajını gönderir. Bu durum hedef bilgisayara ulaşana kadar TTL değeri "1" artırılarak devam eder. Kaynak bilgisayar tarafından üretilen üç adet IP paketi son olarak hedefe ulaştığında bu sefer hedef bilgisayar kaynak bilgisayar tarafından gönderilmiş olan bu IP paketlerine cevap verir. Bu şekilde hedef bilgisayara ulaşana kadar hangi "hop"lardan geçildiği "traceroute" ile tespit edilir.
Kaynak bilgisayar Windows işletim sistemine sahipse hedef bilgisayara "ICMP Echo Request" mesajları göndermiştir. (Type: 8, Code:0) Bu ICMP mesajları hedef bilgisayara ulaştığında hedef bilgisayar bu mesajlara ICMP Echo Reply mesajıyla cevap verir. (Type: 0, Code:0)[8]
Kaynak bilgisayar Linux işletim sistemine sahipse hedef bilgisayara, hedef portunun kullanılmadığı düşünülen bir UDP datagram'ı gönderir. (Örneğin 29082 numaralı UDP portu hedef port olarak belirlenir.) Hedef bilgisayar bu UDP datagram'ını alır. 29082 numaralı portu açık olmadığı için de kaynak bilgisayara "ICMP Destination Port Unreachable" mesajını göndrerir. (Type: 3, Code: 3)
TTL, IP başlığının (IP header) dokuzuncu baytında yer alır ve 8 bitlik bir alana sahiptir. TTL'in başlangıç değeri, IP paketinin oluşturulduğu işletim sistemi tarafından belirlenir. TTL değeri işletim sisteminden işletim sistemine farklılık göstermektedir. TTL değeri, IP paketinin üzerinden geçtiği her hop tarafından "bir" azaltılır. IP başlığındaki TTL alanının amacı, IP paketlerinin ağlarda sonsuz dolaşımının önüne geçmektir. Bir yönlendirici, TTL alanı 0 ya da 1 olan bir IP paketi almış ise bu paketi düşürür, başka bir yere yönlendirmez ve kaynak bilgisayara "ICMP TTL time exceeded” mesajı gönderir. "TTL time exceeded" mesajı ICMP başlığında "Type 11" ve "Code 0" değerlerini alacak şekilde tanımlanmıştır.
Linux işletim sistemine sahip olan bilgisayarlarda "traceroute" komutu, hedef bilgisayara UDP datagramları gönderir. Linux işletim sistemine sahip bilgisayarlar bunun yanı sıra, hedef bilgisayarlara "ICMP Echo Request" mesajları ya da TCP SYN segmentleri de gönderebilirler. Windows işletim sistemine sahip olan bilgisayarlar hedef bilgisayarlara UDP datagramları yerine "ICMP Echo Request" mesajları gönderirler.
"Traceroute" programı, hedef bilgisayara ilk olarak TTL alan değeri "1" olan üç adet paket gönderir. TTL değeri "1" yapılmış olan IP paketlerini alan birinci yönlendirici, bu paketleri bir sonraki -ikinci- yönlendiriciye göndermez, düşürür ve kaynak IP adresine "ICMP TTL time exceeded” (Type 11, Code 0) mesajını gönderir. "ICMP TTL time exceeded" mesajını alan kaynak bilgisayar bu sefer TTL değeri "2" olan üç adet IP paketini hedef bilgisayara gönderir. Bu paketleri alan birinci yönlendirici TTL değerini "1" düşürerek "1" yaparak ikinci yönlendiriciye iletir. İkinci yönlendirici TTL değeri "1" olan IP paketlerini bir sonraki yönlendiriciye göndermez, düşürür ve kaynak IP adresine "ICMP TTL time exceeded” (Type 11, Code 0) mesajını gönderir. Kaynak bilgisayar bu sefer TTL değer "3" olan üç adet paketi hedefe gönderir. İlk iki yönlendirici, yine TTL değerlerini "1" düşürerek IP paketlerini üçüncü yönlendiriciye iletir. Üçüncü yönlendirici yönlendirici TTL değeri "1" olan IP paketlerini bir sonraki yönlendiriciye göndermez, düşürür ve kaynak IP adresine "ICMP TTL time exceeded” (Type 11, Code 0) mesajını gönderir. Bu durum hedef bilgisayara ulaşana kadar TTL değeri "1" artırılarak devam eder. Kaynak bilgisayar tarafından üretilen üç adet IP paketi son olarak hedefe ulaştığında bu sefer hedef bilgisayar kaynak bilgisayar tarafından gönderilmiş olan bu IP paketlerine cevap verir. Bu şekilde hedef bilgisayara ulaşana kadar hangi "hop"lardan geçildiği "traceroute" ile tespit edilir.
Kaynak bilgisayar Windows işletim sistemine sahipse hedef bilgisayara "ICMP Echo Request" mesajları göndermiştir. (Type: 8, Code:0) Bu ICMP mesajları hedef bilgisayara ulaştığında hedef bilgisayar bu mesajlara ICMP Echo Reply mesajıyla cevap verir. (Type: 0, Code:0)[8]
Kaynak bilgisayar Linux işletim sistemine sahipse hedef bilgisayara, hedef portunun kullanılmadığı düşünülen bir UDP datagram'ı gönderir. (Örneğin 29082 numaralı UDP portu hedef port olarak belirlenir.) Hedef bilgisayar bu UDP datagram'ını alır. 29082 numaralı portu açık olmadığı için de kaynak bilgisayara "ICMP Destination Port Unreachable" mesajını göndrerir. (Type: 3, Code: 3)
Kullanım Yerleri
Trauceroute ağda sorun gidermek için kullanılır. Kaynak IP adresinden hedef IP adresine doğru gidilecek rota üzerinde yönlendirme problemlerinin tespit edilmesini sağlar. Ayrıca hedef IP adresine doğru giderken geçilen hostlara verilen IP adreslerini görmeye ve ağ altyapısı hakkında bilgi sahibi olmak için kullanılır.
Trauceroute ağda sorun gidermek için kullanılır. Kaynak IP adresinden hedef IP adresine doğru gidilecek rota üzerinde yönlendirme problemlerinin tespit edilmesini sağlar. Ayrıca hedef IP adresine doğru giderken geçilen hostlara verilen IP adreslerini görmeye ve ağ altyapısı hakkında bilgi sahibi olmak için kullanılır.
Yük dengeleme; işi, iki ya da daha fazla bilgisayar, işlemci, sabit disk ya da diğer kaynaklar arasında paylaştırma teknolojisidir. Bu teknolojiyi kullanarak en iyi kaynak kullanımı, en yüksek işlem hacmi, en düşük cevap süresi sağlanabilir; oluşabilecek aşırı yüklemeden (overload) kurtulunabilir.
Tek bileşen kullanmak yerine, yük dengeleme ile birden fazla bileşen kullanımı yedekleme (redundancy) sayesinde güvenilirliği artırabilir.
Yük dengeleme genellikle adanmış bir yazılım ya da donanım aygıtı (DNS, Multilayer switch vb.) kullanılarak sağlanır.
Yük dengeleme genellikle bilgisayar grupları (computer cluster) arasındaki iç iletişimi sağlamak amacıyla kullanılır.
Yük dengeleme kullanılan birden fazla bileşen ile yedekliliği sağlar. Bir yönlendirici (router) belirli bir ağ için birden fazla rota öğrendiğinde, yönlendirme tablosundaki (routing table) en düşük yönetimsel uzunluk (Administrative Distance - AD) değerine sahip rotayı seçer. Yönetimsel uzunlukların eşit olması durumunda ise metriklere bakacaktır. Yönetimsel uzunluk ve metrik değerlerinin eşit olması durumunda 3. Katman yük dengeleme oluşur. Ayrıca IGRP (Interior Gateway Routing Protocol - Dahili Ağ Geçidi Yönlendirme Protokolü) ve EIGRP (Enhanced Interior Gateway Routing Protocol - Geliştirilmiş Dahili Ağ Geçidi Yönlendirme Protokolü) protokoller eşit maliyetli (cost) olmayan yük dengelemeyi de destekler.
Etherchannel Yük Dengeleme Yöntemi
Birincil ve yedek hatlar mantıksal olarak tek bir hat gibi kullanıldığı yük dengeleme yöntemi “etherchannel”dır. İki ağ cihazı arasındaki hat kapasitesini artırmaya yarar. Ağ cihazlarının etherchannel yaptırılan portları tek port gibi kullanılır.Etherchannel yapılan portlarda verinin hangi yolu tercih edeceğini belirlemek için iki yöntem vardır:
- Yalnızca tek bir değişkene göre belirlenebilir. (Kaynak mac adresi, hedef mac adresi, kaynak IP (InternetProtocol - İnternet Protokolü) adresi, hedef IP adresi, kaynak port, hedef port)
- İki değişkene göre belirlenebilir. (Kaynak/hedef mac adresi, kaynak/hedef IP adresi, kaynak/hedef port)
3. Katmanda Yük Dengeleme
3. katmanda yük dengeleme iki şekilde uygulanabilir:
3. katmanda yük dengeleme iki şekilde uygulanabilir:
- Hedefe göre (per- destination) : Yönlendirici paketleri hedef adreslerine göre dağıtır. Aynı ağa 2 yol olması durumunda o ağdaki hedef1 için gelen bütün paketler ilk yoldan, hedef2 için gelen bütün paketler de diğer yoldan gönderilir ve böyle devam eder. Aynı ağdaki farklı kullanıcılar için farklı rotalar kullanılmış olur. Hedef adreslerinin fazla olması bağlantıların eşit kullanılmasını sağlar. Her adres için rota önbellek girdisi (route-cache entry) hazırlanır. Bu nedenle hedefe göre yük dengelemede hafıza ve işlem gereksinimi çok fazla olur; binlerce kullanıcıya trafik taşıyan yönlendiriciler için uygun değildir.
- Pakete göre (per-packet) : Pakete göre yük dengelemede yönlendiriciye hedef1 için gelen ilk paket ilk yoldan, ikinci paket de ikinci yoldan vb. şekilde gönderilir. Her paketin iletim sürecinde çıkış arayüzüne bakılır ve en az kullanılmış bağlantı yönlendirme tablosundan seçilir. Bu linklerin eşit kullanımını sağlar fakat işlemci üzerinde yoğun görev ve iletim performansında düşmeye yol açar. Ayrıca paketlerin hedefe, farklı gecikme süreleri nedeniyle sırası bozulmuş olarak varmasına neden olabilir. Bu tür yük dengeleme yüksek hızlı olması gereken arayüzler için uygun değildir.
İnternet Servislerinde Yük Dengeleme
Yük dengelemenin en genel kullanım alanı sunucu çiftliği olarak bilinen, birçok sunucu kullanarak bir tane internet servisi sağlamaktır. Bu internet servisi genellikle popüler web siteleri, yüksek bant genişliğine sahip dosya aktarım iletişim kuralı siteleri, NNTP sunucusu, DNS sunucusu, mali işlemler gibi çalışması kritik uygulamalardır.
Yük dengeleyici genellikle bir yazılımdır. İstemcilerle iletişime geçer ve gelen isteği cevap vermesi için herhangi bir zamanlama algoritması kullanarak seçtiği arka uç sunucusuna iletir. Sanal ip adrese (VIPs) sahiptir. Bu yöntemde istemciler arka uç sunucularla direk iletişime geçmediği için ağ yapısı ve diğer portlar üzerinde koşan bağımsız servisler üzerine gelebilecek saldırılar engellenir.
Yük dengeleyici kullanılarak oluşturulan yük dengeleme sisteminde, arka uç sunucularından birinde bir problem olduğunda sistem çalışmasına devam ederken; yük dengeleyicide bir problem olduğunda sistem tamamen çalışmaz hale gelir.
Çözümlerden bir diğeri, Round Robind DNS olarak adlandırılan, adanmış yazılım ya da donanım gerektirmeyen metotdur. Tek bir Alan adı (www.example.org) ile birden çok IP adresi eşleştirilerek gerçekleştirilir. DNS sunucusu gelen isteklere, Round Robin algoritmasını kullanarak tanımlanan sunuculardan bir tanesini atar. İstemci arka uç sunucuların varlığını bildiğinden dolayı teknolojiden haberdardır. Teknoloji DNS nin getirdiği tüm avantaj ve dezavantajlara sahiptir.
Kalıcı Veriler
Bir kullanıcının istekleri boyunca oturum bilgilerinin nasıl tutulacağı önemlidir. Eğer bilgiler yerel olarak arka uç sunuculardan birinde tutulursa, izleyen istekte diğer bir arka uç sunucusuna gittiğinde bilgiler bulunamaz. Bu, tekrar kullanılacak bilgileri saklama gereksinimini ortaya çıkarır.
Çözümlerden biri, "Persistence" olarak da bilinen aynı istemciden gelen tüm istekleri aynı sunucuya yönlendirmektir. Fakat arka uç sunucularından birinde bir problem oluştuğunda o sunucu üstündeki tüm verileri tüm veriler kaybedilir.
Diğer çözüm oturum bilgilerini veritabanında tutmaktır. Veri tabanı yükü arttıkça performans düşüşü oluştuğundan dolayı veriler kısa süreli tutulacaksa tercih edilir.