Uygulama geliştiriciler ya da erişemediğiniz siteler için, şahsi DNS sunucusu

Çeşitli amaçlar için birçoğumuz bilgisayarlarımızın DNS ayarları ile oynamışızdır. Bazen DNS sorunları nedeni ile erişemediğimiz siteler, eğer uygulama geliştiricisi isek kendi bilgisayarımızda web sitesi çalıştırmak gibi sebepler ile DNS ayarlarını kurcalamışızdır.

Bu konuda en çok kullanılan ama pek de konforlu olmayan bir yöntem “hosts” dosyasını düzenlemektir. Windows altında genelde “C:\Windows\System32\drivers\etc\hosts” dosyası olarak bulunan bu dosyaya istediğimiz alan adı ve IP karşılıklarını yazarak istediğimizi elde edebiliriz. Ama Vista ve Windows 7’de bulunan UAC denetimi, bu doyayı düzenlemeyi gayet zor hale getirmektedir. Ayrıca erişmemiz gereken ve TTNET DNS sunucuları tarafından engellenmiş tüm sunucuları bu dosyaya yazmaya zaten ömür yetmez. Biz de bu sebeple genelde ikinci bir yönteme başvururuz. Halka açık olarak hizmet veren DNS sunucularını kullanırız.

Bu sunucuların en bilinenleri;

  • Google DNS sunucuları : 8.8.8.8, 8.8.4.4
  • OpenDNS sunucuları : 208.67.222.222, 208.67.220.220

Bu iki yöntemi birleştiren çözüm ise, ŞAHSİ DNS SUNUCULARI‘dır. Kısaca izah etmek gerekirse, şahsi bilgisayarınızda ya da rahatlıkla erişip düzenleyebileceğiniz bir yerde çalışan DNS sunucuları…

Bu iş için uygun olduğunu düşündüğüm 3 adet yazılım bulunmakta.

  • Simple DNS Plus : Basitlik ve kullanışlılık açısından en çok beğendiğim ve GUI desteği olan bu yazılım maalesef ücretli. Yaklaşık $80 civarından başlayan fiyatı ise basit bir işlev arayanlar için biraz fazla. Ama kolay kullanım ve basitliği ile diğer rakiplerinin çok önünde.
    http://www.simpledns.com/ adresinden bulabileceğiniz bu yazılımın 14 günlük deneme sürümü de var.
  • BIND : Bekeley Internet Name Domain sunucusu, uygun bir konfigürasyonla, windows üzerinde tek başına ya da servis olarak çalışabiliyor. Uygulamalarını USB diske atıp her yere taşımayı sevenler için, tek başına çalışan bir yapılandırma yapmak daha faydalı olacaktır. Fakat BIND, DNS ile ilgili tüm standartların bir arada toplandığı bir platform olduğundan konfigürasyonu çok kolay değil ve hayli kapsamlı.
    http://www.isc.org/software/bind adresinden BIND yazılımının indirme linklerine erişebilirsiniz.
  • MaraDNS : Basit görünümlü fakat yetenekli bir DNS sunucu olan MaraDNS sunucusu benim favori tercihim. Açık kaynak kodlu, ücretsiz, yeterince basit ve görevini yapıyor. 2.0 sürümünde recursive(Deadwood) ve authoritative(MaraDNS) olarak ikiye ayrıldığı için en son 1.4 sürümünü kullanmak gerekiyor. Böylece tek bir uygulama ile Internet alan adları için recursive sorgular ve kendi lokal makinanızdaki test web siteleriniz için authoritative sorgular yapabiliyorsunuz.
    http://www.maradns.org/ adresinde bulunan MaraDNS’in en son 1.4 windows sürümüne buradan erişebilirsiniz.

Yukarıda bahsettiğim uygulamaları kullanırken, DNS sunucusunu “localhost” ya da “127.0.0.1” adresinde dinleyecek şekilde yapılandırıyorum ve Ağ ayarlarından DNS sunucusu olarak “127.0.0.1” olarak kendi localhost adresimi verdiğim zaman şahsi DNS sunucum nereye gidersem gideyim devamlı çalışabilecek şekilde ayarlanmış oluyor.

MaraDNS sunucusuna ait kendi yapılandırmamı ve bazı olası örnekleri yakında burada bulabilirsiniz.

Türkiyede İnternet Yasakları

İnternet kullanıcısı olan bizler, elbette Türkiyede çok konuşulan bir konu olan İnternet yasaklarını bir çok defa duymuşuzdur. İlk olarak 22 Ağustos 2011’de uygulanacağı söylenen ve daha sonra teknik sıkıntılar nedeni ile 22 Kasım 2011’e ertelenen filtreleme uygulaması genel hatları ile nedir?

Geçmişi aslında biraz daha eski olan bu uygulamanı temeli, 5651 nu’lu İnternet Suçları ile ilgili kanundur.

23 Mayıs 2007 tarihinde Resmi gazetede yayınlandıktan sonra yürürlüğe girmiş olan ve İnternet ortamında yapılan yayınların düzenlenmesi ve bu yayınlar yoluyla işlenen suçlarla mücadele edilmesi hakkındaki kanun, esas itibarı ile 22 Ağustos’un temelini teşkil etmektedir. Orjinaline “http://www.tk.gov.tr/mevzuat/kanunlar/dosyalar/5651 internetsuclari.pdf” adresinden ulaşabileceğiniz bu kanun temel olarak aşağıdakileri içermektedir:

  • Bu kanunun yaptırım mercii, Ulaştırma Bakanlığı bünyesindeki Telekomünikasyon Kurumu, İletişim Başkanlığı’dır.
  • Bu kanun genel olarak intihara yönlendirme, çocukların cinsel istismarı, uyuşturucular, sağlık yönünden tehlikeli maddelerin temini, müstehcenlik, fuhuş, kumar ve Atatürk’e hakaret içeren internet sitelerini yasaklı katagorisine almaktadır.
  • İnternet servis sağlayıcılar ve çalışanlarına internet bağlantısı sağlayan firmalar(yani kısaca her firma…), internet bağlantılarını kayıt altında tutma ve istendiği takdirde bu kayıtları verme konusunda sorumlu tutulmaktadır.
  • İnternet’e bağlanma hizmeti veren tüm firmalar(İnternet Servis Sağlayıcılar ve hatta İnternet kafeler) olşturulmuş olan yasaklı siteler listesini güncel tutup, kullanıcıları için bu yasakları uygulamak konusunda sorumlu tutulmaktadırlar.

İlk bakışta bütün bu yasaklar silsilesinin başlangıç noktası gibi gözüken 5651 kanununa aslında başka bir açıdan da bakmakta fayda vardır. Bu kanundan önce, İnternet Suçları ile ilgili doğru dürüst bir tanımlama yapılmamış olduğundan, işine gelmeyen siteleri kanundaki açıklardan faydalanarak defalarca kapattırma, zor durumda bırakma gibi çok gerekli işlerle ilgilenen şahısların önündeki kapı biraz kapanmış durumdadır.

Bütün bunlara rağmen Türkiye’de İnternet yasakları gibi bir gerçek vardır ve 5651 kanunu bunun önemli bir parçasıdır.

Günümüzde geldiğimiz noktada ise internet yasakları uygulanmaya devem etmekte ve önceki duruma göre bir değişiklik olmamış gibi gözükmektedir. Ama teknolojik altyapının güçlenmesi, aslında yasaklama yapılmasından ziyade insanların nerelere girdiğini devamlı gözlemleyen devasa bir veritabanı oluşturmakta. Ve bunun sonuçlarını görmek için ise henüz biraz erken…

Windows BATCH dosyalarında tarih(DATE, DAY, MONTH, YEAR v.b.) bilgisinin bölgesel ayarlardan bağımsız olarak Gnuwin32 araçları ile formatlanması

Windows(2000, XP, 2003, Vista, 2008, Windows7) üzerinde BATCH dosyalar ile uğraşmak zorunda iseniz eninde sonunda Tarih bilgisine bağımlı olarak bir işlem yaptırmak zorunda kalmışsınızdır. Fakat eninde sonunda farkettiğiniz üzere DOS, Tarih bilgisinin Ay, Gün, Yıl, Saat, Saniye gibi spesifik bölümlerini ayrı ayrı göstermek için doğal metotlara sahip değildir. Bu durum da, örneğin 15 günden önceki bir tarihi seçmek gibi özel durumlarda çok ciddi sıkıntılara yol açmaktadır.

Ayrıca Bölgesel ayarları birbirinden farklı olan makinalarda, Tarih bilgisine bağımlı olan BATCH dosyaları çalıştırdığınız zaman sıkıntı daha da artmaktadır. Çünkü komut satırı üzerinden aldığınız tarih bilgisi tamamen bölgesel ayarlara bağımlıdır.

echo %date% komutunu Türkçe bölgesel ayarlara sahip bir Windows makina üzerinde çalıştırdığınızda aşağıdaki formatta çıktı alınmaktadır.
DD.MM.YYYY

Aynı komut İngilizce(Amerika) bölgesel ayarlara sahip bir Windows makina üzerinde çalıştırdığınızda ise aşağıdaki formatta çıktı alınmaktadır.
MM/DD/YYYY

Bu durumda, örneğin 15 günden önceki bir tarihi seçmek gibi bir işlemi birbirinden ayrı bölgesel ayarlara sahip makinalar üzerinde yapmak içinden tamamen çıkılmaz bir hal almaktadır.

Ama linux’un çok gelişmiş komut satırına ait birçok aracın windows versiyonlarını kullanarak bu sıkıntıyı aşabilmek mümkündür. Gerekli “date.exe” komutunu içeren açık kaynak kodlu GNU coreutils paketi bileşenleri aşağıdaki adreslerden indirilebilir.

http://sourceforge.net/projects/gnuwin32/files/coreutils/5.3.0/coreutils-5.3.0-bin.zip/download
http://sourceforge.net/projects/gnuwin32/files/coreutils/5.3.0/coreutils-5.3.0-dep.zip/download

Aslında bizim şimdilik sadece coreutils-5.3.0-bin.zip içerisinden “date.exe” komut satırı programına, coreutils-5.3.0-dep.zip içerisindende “libiconv2.dll” ve “libintl3.dll” kütüphanelerine ihtiyacımız bulunmaktadır.

GNU date komutu 1970 senesinden, içinde bulunulan ana kadar geçen saniyeleri gösteren(EPOCH) bir çıktı formatına sahiptir. Aşağıdaki BATCH file ile(test.bat diyelim…) istenilen sayıda gün öncesinin tarih bilgisine erişmek bu sayede son derece kolay olacaktır.

@echo off
for /f "tokens=*" %%a in ('date.exe +%%s') do set /a EPOCHTODAY=%%a
set /a MAXDAYS=%EPOCHTODAY%/86400
if "%1" == "" (
  echo No Parameter specified...
  GOTO EXIT
)
if %1 GTR 0 (
  if %1 LSS %MAXDAYS% (
    set /a OLDDAYS=%1
  ) else (
    echo "%1" is not between 0 - %MAXDAYS% ^>%MAXDAYS% 
    GOTO EXIT
  )
) else (
  echo "%1" is not between 0 - %MAXDAYS% ^<0
  GOTO EXIT
)
set /a DAYSEC=86400*%OLDDAYS%
set /a EPOCHTHATDAY=%EPOCHTODAY%-%DAYSEC%
for /f "tokens=1,2,3* delims=-" %%A in ('date.exe -d @%EPOCHTHATDAY% +"%%d-%%m-%%Y"') do (
  set THATDAY=%%A
  set THATMONTH=%%B
  set THATYEAR=%%C
)
echo %OLDDAYS% Gun once :
echo YIL : %THATYEAR%
echo AY  : %THATMONTH%
echo GUN : %THATDAY%
:EXIT

Bu BATCH dosyasını parça parça incelersek:

@echo off

Bu satır komuların doğrudan ekrana basılmasını engellemekte sadece komut çıktılarını görmemizi sağlamaktadır.

for /f "tokens=*" %%a in ('date.exe +%%s') do set /a EPOCHTODAY=%%a

date.exe +%%s komutunun çıktısı, saniye cinsinden içinde bulunduğumuz anın EPOCH değerini(1970’den itibaren geçen süreyi) göstermektedir. date.exe +%%s komutunun çıktısı %%a değişkenine atanmakta, %%a değişkeni ise set /a EPOCHTODAY=%%a ile sayısal olarak EPOCHTODAY değişkenine atanmaktadır. Sayısal olarak atama yapmaz isek, değişken STRING tipinde varsayılıp bizim işlem yapmamızı olanaksız hale getirecektir. Dolayısı ile EPOCHTODAY değişkeninin içeriği, 1970 senesinden şu ana kadar olan geçen toplam saniyedir.

set /a MAXDAYS=%EPOCHTODAY%/86400

1970 senesinden şu ana kadar olan geçen toplam saniyeyi, bir gündeki toplam saniye olan 86400 değerine bölersek, bu script ile geriye doğru gidebileceğimiz maksimum gün sayısını bulmuş oluruz.

if "%1" == "" (
  echo No Parameter specified...
  GOTO EXIT
)
if %1 GTR 0 (
  if %1 LSS %MAXDAYS% (
    set /a OLDDAYS=%1
  ) else (
    echo "%1" is not between 0 - %MAXDAYS% ^>%MAXDAYS% 
    GOTO EXIT
  )
) else (
  echo "%1" is not between 0 - %MAXDAYS% ^<0
  GOTO EXIT
)

if “%1” == “” satırı ile batch dosyasının parametre ile çağırılıp çağrılmadığı, if %1 GTR 0 satırı ile parametrenin “0”dan büyük olup olmadığı, if %1 LSS %MAXDAYS% satırı ile parametrenin geriye gidebileceğimiz maksimum gün sayısından büyük olup olmadığı kontrol edilmektedir. Eğer her şart sağlanmış ise set /a OLDDAYS=%1 satırı ile, girdiğimiz parametre sayısal olarak OLDDAYS değişkenine atanmaktadır.

set /a DAYSEC=86400*%OLDDAYS%
set /a EPOCHTHATDAY=%EPOCHTODAY%-%DAYSEC%

set /a DAYSEC=86400*%OLDDAYS% satırı ile geriye doğru gidilecek gün sayısı saniye cinsinden hesaplanır. set /a EPOCHTHATDAY=%EPOCHTODAY%-%DAYSEC% satırı ile de saniye cinsinden ulaşmak istediğimiz güne ait EPOCH değerine ulaşmış ve EPOCHTHATDAY değişkenine sayısal olarak atamış oluruz.

for /f "tokens=1,2,3* delims=-" %%A in ('date.exe -d @%EPOCHTHATDAY% +"%%d-%%m-%%Y"') do (
  set THATDAY=%%A
  set THATMONTH=%%B
  set THATYEAR=%%C
)

date.exe -d @%EPOCHTHATDAY% +”%%d-%%m-%%Y” komutu, EPOCHTHATDAY değişkeninin değerini +”%%d-%%m-%%Y” ile formatlayarak, yani “DD-MM-YYYY” şeklinde formatlayarak göstermektedir. “delims=-“ ile bu çıktıyı “-” delimiteri ile ayırıp “tokens=1,2,3*” ile 3(* ve daha fazla) değişkene atayacağımızı belirtmiş oluruz. Değişken isimleri %%A ile başlayıp %%B, %%C … gibi sıra ile devam etmektedir. set THATDAY=%%A, set THATMONTH=%%B ve set THATYEAR=%%C satırları ile de “DD-MM-YYYY” şeklinde formatlayarak gösterdiğimiz tarihi parçalara ayırıp atama işlemini tamamlamış oluruz.

echo %OLDDAYS% Gun once :
echo GUN : %THATDAY%
echo AY  : %THATMONTH%
echo YIL : %THATYEAR%

Bulunan değerler, yukarıdaki satırlar ile ekrana basılmaktadır.

:EXIT

GOTO EXIT yönergesi kullanılarak hiç bir işlem yapmadan batch dosyasından çıkabilmek için bu :EXIT etiketi kullanılmıştır.

Aslında aşağıdaki 4 satır ile istenilen sonuca ulaşılmış oluyor fakat tabii ki şekillendirmek için ekstra kod kullanılması gerekli olmaktadır.

for /f "tokens=*" %%a in ('date.exe +%%s') do set /a EPOCHTODAY=%%a
set /a DAYSEC=86400*%OLDDAYS%
set /a EPOCHTHATDAY=%EPOCHTODAY%-%DAYSEC%
date.exe -d @%EPOCHTHATDAY% +"%%d-%%m-%%Y"

Fakat internette yapılan kısa bir arama ile bile GnuWin32 date komutunu kullanmadan, bu işlemi yapmanın en azından onlarca satır süreceğini rahatlıkla söyleyebiliriz. Ayrıca GnuWin32 date komutunu kullanmadan bölgesel ayarlar sorunu da tam olarak çözülebilmiş olmamaktadır.