#Sharp.Net - Suat Tuncer


Dış Dünyayla Proxy Server Üzerinden Konuşmak

Kategori: CSharp | Tarih: 3/8/2007

 

Büyük şirketlerde ve kurumsal yapılar içersinde ISA server olmazsa olmaz yapılardan biridir. Her türlü network trafiğini kontrol altında tutmak için en ideal yoldur. Amaç tüm network trafiğini izlemek ve denetim elde tutumak olunca işin içne kaçınılmaz olan güvenlik girmektedir.

 

Bir çoğumuzun bildiği gibi ISA Client nesnesi üzerinden dışarıyla konuşmak için üyesi olduğumuz networkte geçerli bir Kullancı Adı ve şifreye sahip olmak şarttır suat.tuncer@sirket.com gibi.

 

Böyle bir networkte dışarıya çıkmanın tek yolu proxy serverı kullanmaktır. Bunu yapmak için Internet Explorer’ın connection kısmında proxy server adresini girmek yeterlidir.

 

IE 7.0’da ISA Client’ın Yapılandırdığı Proxy Ayarları

 

Fakat yazdığımız uygulamalarda bu yeterli değil. Güvenliğin arttılıdığı ve kısıtlamaların arttığı WAN’larda özellikle dışarıya çıkmak isteyen uygulamalar söz konusuysa bu işi bizim yapmamız gerekir.

 

Bu yazıda kısaca bu problemin nasıl aşılacağını anlatacağım. Öncelikle basitce webden bir dosya almaya çalışalım.

 

using System;

using System.Collections.Generic;

using System.Text;

 

using System.Net; //webclient nesnesi için

 

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            WebClient client = new WebClient();

            client.DownloadFile("http://img.blogcu.com/uploads/suattuncer_20051018.jpg", "c:\\dosya.jpg");

        }

    }

}

 

Yukarıdaki dosya alınmaya çalışıldığında aşağıdaki gibi bir hatayla karşılaşmaktayım, Bu arada hemen belirteyim bu hatayı, ancak ISA Server bulunan ve Proxy Authentication isteyen bir NetWorkde görebilirsiniz

 

 

Bu problemi aşmanın yolu Domain hesabımızı kullanmak olacaktır. WebClient nesnesi incelendiğinde bu gibi sorunları aşması için Credential gibi bir özelliğe sahip olduğunu göreceksiniz, .Net’de,  System.Net altında yeralan bir çok sınıfın Credential özelliği bulunmaktadır. Bir ağ kimliği oluşturarak Proxy üzerinden yada herhangi bir network üzerinden dışarıya çıkmak için kullanılmaktadır.

 

 NetworkCredential Nedir ?

 

Network üzerinde geçerli olan bir kimlik gibi düşünülebilir. Kısıtlanmış ve Authentication’a bağlı noktalarda uyugulamayı kullanan kişinin kendini doğrulamak için çıkartıp göstereceği kimliktir.  Tıpkı yukarıdaki hata mesajında bahsedildiği gibi : “Proxy Authentication Required”

 

Yukarıdaki kodu aşağıdaki gibi revize edip tekrar çalıştırdığımızda sorunsuz çalıştığını göreceksiniz.

 

using System;

using System.Collections.Generic;

using System.Text;

 

using System.Net;

 

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            WebClient client = new WebClient();

 

            //networkde geçerli bir limlik tanımlaması yapılıyor

            NetworkCredential kimlik = new NetworkCredential();

            kimlik.Domain = "sirket.com";

            kimlik.UserName = "suat.tuncer";

            kimlik.Password = "password";

 

            //Proxy server tanımlanıyor

            WebProxy proxyServer = new WebProxy("10.1.0.100", 8080);

 

            //proxy sunucu üzerinden doğrulanacak kimlik

            proxyServer.Credentials = kimlik;

 

            //WebClient nesnesinin dışarıya hangi sunucu üzerinden çıkacağı belirtiliyor

            client.Proxy = proxyServer;

 

            // artık güvenliğe takılmadan dosya indirilebilir

            client.DownloadFile("http://img.blogcu.com/uploads/suattuncer_20051018.jpg", "c:\\dosya.jpg");

        }

    }

}

 

NetworkCredential        : Network üzerinde doğrulanacak bir kimlik tanımlamak için kullnılır

WebProxy                          : Konu başında anlattığım Proxy Server’ın ta kendisi kodumuzdaki, Network trafiğinin hangi sunucu üzerinden gerçekleşeceğini belirtir.

 

Belki her durumda değil ama sıkı güvenlik kurallarının olduğu NetWorklerde ihtiyaç duyduğum bir yapıydı.

Soru ve Önerileriniz için

suattuncer@hotmail.com   .::.   http://suattuncer.bloguc.com

 

 



Neden Herşey Sıfırdan Başlar

Kategori: LLP | Tarih: 30/5/2007

 

Hiç düşündünüz mü, neden dizilerde indexler sıfırdan başlar ?

Aslında oldukça basit; int tipinde 5 elemanlı bir dizinin elemanlarını dolaşmak için genellikle aşağıdaki kod kullanılır

 

int main(){ 
     int rakamlar[5]; 
     for(int i=0;i<5;i++){
          //istenilen kodlar buraya
     
     return 0;
}

 

Yukarıdaki dizinin herhangi bir elemanına erişmek demek, aslında dizinin o elemanının RAM'deki adresine erişmek demekdir şöyleki ;
     int rakamlar[5];  //int tipi bellekte 4 Byte yer tutar
RAM'de bu diznin yerleşimini şöyle olacaktır

 

rakamlar dizisi
1. Eleman [0] 80100 data
80101 data
80102 data
80103 data
2. Eleman [1] 80104 data
80105 data
80106 data
80107 data
3. Eleman [2] 80108 data
80109 data
80110 data
80111 data
4.Eleman [3] 80112 data
80113 data
80114 data
80115 data
5.Eleman [4] 80116 data
80117 data
80118 data
80119 data

 

Dizinin 4. Elemanına erişmek için 3 nolu index kullanılır, buda bizi 3 nolu elemanın RAM'de saklandığı bloğun başlangıç adresine erişmek edemektir. Hemen hesaplayalım.


dizinin başlangıç adresi + (dizi tipinin adres büyüklüğü * erişilmek istenilen indeks)

yani :
80100 + (4*3) = 80112 > yani 4. elemanın (3 indeks numaralı elemanın) başlangıç adresi

 

şimdi 0'dan başlamadığını düşünüp hesaplayın, hiç bir zaman ilk elemana erişilemezdi :-)



Bjarne Stroustrup'dan Öğütler

Kategori: Gelisim Sureci | Tarih: 26/5/2007

Şu sıralar C++ ile ilgileniyorum. Dilin geliştiricisi olan B.Stroustrup'un kitabından bir Advice kısmını paylaşmak istedim

 

  1. When you program, you create a concrete representation of the ideas in your solution to some problem. Let the structure of the program reflect those ideas as directly as possible:
    a. If you can think of ‘‘it’’ as a separate idea, make it a class.
    b. If you can think of ‘‘it’’ as a separate entity, make it an object of some class.
    c. If two classes have a common interface, make that interface an abstract class.
    d. If the implementations of two classes have something significant in common, make that commonality a base class.
    e. If a class is a container of objects, make it a template.
    f. If a functıon implements an algorithm for a container, make it a template functıon implementing the algorithm for a family of containers.
    g. If a set of classes, templates, etc., are logically related, place them in a common namespace.
  2. When you define either a class that does not implement a mathematical entity like a matrix or a complex number or a lowlevel type such as a linked list:
    a. Don’t use global data (use members).
    b. Don’t use global functıons.
    c. Don’t use public data members.
    d. Don’t use friends, except to avoid [a] or [c].
    e. Don’t put a ‘‘type field’’ in a class; use virtual functıons.
    f. Don’t use inline functıons, except as a significant optimization.

 



İstanbul Pek Güzel

Kategori: Karikaturler | Tarih: 16/3/2007

İstanbul pek güzel ama sahipleri pek yaman

 



VB.Net Kartı

Kategori: Gunluk | Tarih: 11/3/2007

Vakti evvelden yazmış olduğum bir yeni yıl kartı, büyütmek için tıklayın

 


« Önceki | 1 / 11 | Sonraki »