4.04.2018

Powershell'de fonksiyon hangi modülden geliyor

Bir yanlışlık yapıp oluşturduğum fonksiyon'a var olan bir başka fonksiyon ile aynı ismi vermişim. Aslında böyle bir fonksiyon bile olduğunu bilmiyordum, tesadüfen öğrenmiş oldum.

Peki bir fonksiyonun hangi modülden geldiğini nasıl bulurum? Get-Command cmdlet'i ile.
Get-Command Test-DNSServer
CommandType  Name                 Version    Source
-----------  ----                 -------    ------
Function     Test-DnsServer       2.0.0.0    DnsServer

Görüldüğü gibi Source altında DnsServer adında bir modül adı yazıyor.
Peki benim yanlışlıkla aynı ismi verip sonradan düzelttiğim fonksiyon hangi modülden?

Get-Command Test-DNSServerResponse
CommandType  Name                   Version    Source
-----------  ----                   -------    ------
Function     Test-DnsServerResponse 2.0.0.0    Local
Bu fonksiyon, görüldüğü gibi kendi yazdığım ve adı local olan başka bir modülden.

Get-Command ayrıca adını tam bilmediğimiz cmdlet veya fonksiyonları da aramak için faydalı:
get-command Get-Net*IP*
Veya test ile başlayan tüm cmdlet'leri aramak için:
get-command -Verb test
Ya da tireden sonraki ikinci kısmında connection olan cmdlet'leri aramak için:
get-command -Noun connection

3.04.2018

DNS ve Cloudflare

İnternet sitelerine siber saldırılara karşı savunma hizmeti veren Cloudflare firması, herkese açık yeni DNS sunucularını duyurdu. DNS konusu hem önemli hem de hassas bir konu. Bir dönem ülkemizde de DNS sunucu değişikliği halk arasında bayağı popüler bir konuydu. Yeni DNS'in duyurulduğu sayfada da Türkiye'deki bu duruma atıflar yapılmış.

Neyse, ben işin teknik tarafındayım. En başta OpenDNS vardı, 208.67.220.220 ve 208.67.222.222 gibi iki sunucu ile hizmet veriyordu. Daha sonra Google da halka açık DNS'lerini duyurdu: 8.8.8.8 ve 8.8.4.4. Google'ın bütün hizmetleri gibi DNS'lerinin IP'leri de kolay ve akılda kalıcıydı. Google, hizmetlerinin hızlı olacağını da taahhüt ediyordu.

Ve nihayet Cloudflare'in DNS sunucuları da duyuruldı: 1.1.1.1 ve 1.0.0.1. IP adresleri çok havalı, değil mi? Firmanın blog'unda yazdığına göre bu IP adresleri uzun süredir reserve durumdaydı. Ancak muhtemelen kontrolsüzce her yere girilmiş olduğundan dolayı önlenemez bir trafik yüzünden hiçbir yere atanamıyordu. Cloudflare bununla baş edebileceğini düşünmüş. Bu adreslere gelen gereksiz trafiği süzüp, sadece DNS trafiğini cevaplayarak bu güzel IP adreslerini kullanıma açmışlar.

Bir süre önce 3. parti programlarla DNS sunucuların performansını ölçmüştüm. Ama bunu artık Powershell ile yapabilirim düşüncesiyle yaptığım bir aramada şu sayfaya ulaştım. Kaynağı belli olmayan bir exe dosyasına göre basit bir Powershell betiği her zaman tercih edilir. Script çok basit. Measure-Command ile Resolve-DNS'in çoklu sorgularını ölçüyor. Ben biraz daha değiştirip bir fonksiyon haline getirdim:

function Test-DNSServerResponse
{
    [CmdletBinding()]
    Param
    (
        [string]$Query = "wwww.bing.com",
        [string]$DNSserver = "8.8.8.8",
        [int]$numberoftests = 20
    )
   
    $totalmeasurement = 0

    $i = 0

    while ($i -ne $numberoftests)

    {
        $measurement = (Measure-Command {Resolve-DnsName $Query -Server $dnsserver –Type A}).TotalSeconds
        $totalmeasurement += $measurement
        $i += 1
    }

    Write-Output "DNS Sunucu: $dnsserver"
    Write-Output "Deneme sayısı: $numberoftests"
    Write-Output "Toplam süre: $totalmeasurement seconds"
    Write-Output "Ortalama süre: $($totalmeasurement/$numberoftests) seconds/test"
}


Denemeleri de her bir DNS sunucu için şu şekilde yaptım:
Test-DNSServerResponse -DNSserver 1.1.1.1
Hedef olarak Google'ın DNS sunucularını, OpenDNS'in sunucularını ve CloudFlare'in sunucularını seçtim. Karşılaştırabilmek için Türk Telekom'un DNS sunucularını kullandım. Testleri hem ICMP hem de DNS protokolü ile yaptım. ICMP'yi de dahil etme sebebim, nispeten sunucu yoğunluğu hakkında bir bilgi verebilme ihtimali.

100 dk kadar (saniyede 1 ping, 32 byte, toplamda 6061 paket) ping attıktan sonra durum şu şekilde oldu (ortalama ping süresine göre artan sıralama):

SunucuKayıp Paket (adet)Başarılı (adet)Ortalama süre (ms)
195.175.39.39060614
195.175.39.40160604
8.8.8.87605435
1.0.0.10606164
208.67.220.2209605265
208.67.222.22210605169
1.1.1.1347571468
8.8.4.41179488267

Ek 24.10.2018: Aynı tablonun 5000 ping sonrası oluşturulmuşu:
SunucuKayıp Paket (adet)Başarılı (adet)Ortalama süre (ms)
195.175.39.39949915
195.175.39.40549955
8.8.4.410499026
8.8.8.815498532
1.0.0.13499755
208.67.220.2205499557
1.1.1.13499758
208.67.222.2223499759

Ek 31.01.2019: Aynı tablonun 1500 ping sonrası oluşturulmuşu:
SunucuKayıp Paket (adet)Başarılı (adet)Ortalama süre (ms)
195.175.39.40015004
195.175.39.39114994
8.8.8.80150019
8.8.4.40150019
208.67.222.2220150047
1.0.0.12149848
208.67.220.2202148950
1.1.1.11149956

Ek 09.12.2019: Aynı tablonun 5121 ping sonrası oluşturulmuşu (CloudFlare gelişme kaydetmiş):
SunucuKayıp Paket (adet)Başarılı (adet)Ortalama süre (ms)
195.175.39.39551164
195.175.39.40651154
1.1.1.16511516
1.0.0.16511518
8.8.8.85511619
8.8.4.45511521
208.67.220.2202511954
208.67.222.2224511754

Buradan anlaşılan, Türk Telekom'un 195.175.39.39 IP adresine sahip DNS sunucusu bana gayet yakın bir sunucu. 6061 ping paketinden hiçbiri kaybolmamış ve ortalama ICMP cevap süresi de 4 ms. Cloudflare'in 1.0.0.1 sunucusuna gönderilen paketlerde de kayıp yok, ama bu sunucunun ortalama cevap süresi 64 ms. Öte yandan Cloudflare'in diğer 1.1.1.1 sunucusu ise şu anda oldukça yoğun gözüküyor. Bu sunucuya gönderilen 347 paket kayıp. Ortalama cevap süresi ise aynı. Yalnız bu cevap, ICMP cevabı. DNS cevabı değil.

DNS sorgularını cevaplama bakımından ise durum biraz farklı (ortalama çözüm süresine göre artan sıralama):

SunucuOrtalama Çözümleme Süresi (ms)
195.175.39.396,18
195.175.39.407,30
1.0.0.160,39
1.1.1.167,02
208.67.222.22279,12
208.67.220.220123,01
8.8.4.4129,61
8.8.8.8213,38

Ek 24.10.2018: Aynı tablonunun tekrar oluşturulmuşu (50'şer sorgu ile):
SunucuOrtalama Çözümleme Süresi (ms)
195.175.39.396,7
195.175.39.406,9
8.8.8.840,9
1.1.1.150,6
1.0.0.151,6
208.67.222.22254,7
208.67.220.22055,0
8.8.4.461,6

Ek 31.01.2019: Aynı tablonunun tekrar oluşturulmuşu (50'şer sorgu ile):
SunucuOrtalama Çözümleme Süresi (ms)
195.175.39.393,8
195.175.39.404,7
8.8.4.439,9
8.8.8.840,7
1.0.0.143,0
208.67.220.22043,8
208.67.222.22244,0
1.1.1.144,2

Ek 09.12.2019: Aynı tablonunun tekrar oluşturulmuşu (50'şer sorgu ile; ClouldFlare sorgularda da gelişme kaydetmiş):
SunucuOrtalama Çözümleme Süresi (ms)
195.175.39.393,7
195.175.39.404,7
1.0.0.113,1
1.1.1.113,8
8.8.4.435,0
8.8.8.835,8
208.67.222.22240,9
208.67.220.22041,3

Ortalamaları hesaplarken günün farklı iki saatinde 20'şer sorgu yapıp ortalamalarını aldım.

Özet olarak, Cloudflare'in ikinci DNS sunucusu (1.0.0.1), bana en yakın Türk Telekom DNS'lerinden sonra en iyi durumda olanı. Özellikle Google DNS sunucularının performansı pek parlak değil.

Zamanla 1.1.1.1 veya 1.0.0.1 IP adreslerine gelen yoğun istenmeyen trafik miktarında bir değişiklik olur da cevap süreleri düzelir mi, göreceğiz.

Ek 24.10.2018: Zamanla sonuçlar biraz değişmiş. Sanırım ilk denemelerimi yaptığım gün yoğun bir gündü, çözümleme süreleri olağan dışı uzunmuş. İkinci denememde Google üstünlüğü geri almış görünüyor.