#Sharp.Net - Suat Tuncer

3/8/2007 - Dış Dünyayla Proxy Server Üzerinden Konuşmak

Kategori: CSharp

 

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

 

 

EkleBunu Sosyal Paylaşım Butonu
Yorum yaz!

2009-10-01 16:22:01 - Çok teşekkürler

Yazan: Serdar
Allah razı olsun. Türkçe böyle bir kaynak bulmak çok güzel.
Bağlantı

2008-05-19 17:31:12 - app.config

Yazan: isimsiz
Dediğiniz gibi bir app.config dosyası sorunumu çözdü çok teşekkürler.
Bağlantı

2008-05-05 15:04:13 - RE: proxy

Yazan: suattuncer
Selam,

Uygulamanın tamamında geçerli olmasını istediğin bir proxy sunucun varsa bunun için uygulamana bir app.config dosyası ekleyipşu tagleri yazmalısın;

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy usesystemdefault="True"/>
</defaultProxy>
</system.net>
</configuration>

bu sayede uygulamanda herhangi bir şekilde bir kaynağa erişmek istediğinde sistemdeki varsayılan proxy ayarları kullanılacaktır

Bağlantı

2008-04-11 08:56:17 - proxy

Yazan: MYILDIRIM
bu arada kodu vb.net e çervirdim eğer bir farklılık olacaksa yönlendirmenizde

Imports System

Imports System.Collections.Generic

Imports System.Text



Imports System.Net



Namespace ConsoleApplication1


Class Program


Private Shared Sub Main(ByVal args As String())


Dim client As New WebClient()



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

Dim kimlik As New NetworkCredential()

kimlik.Domain = "sirket.com"

kimlik.UserName = "suat.tuncer"

kimlik.Password = "password"



'Proxy server tanımlanıyor

Dim proxyServer As 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")

End Sub

End Class

End Namespace

şeklinde oldu dediğim gibi amacım bir dosya indirmek değilde listview itemlerine xml deki itemleri yerleştirmek.
mail: kodarsiv@gmail.com
Bağlantı

2008-04-11 07:34:48 - proxy

Yazan: MYILDIRIM
proxy ile ilgili makalenizde client.download.file olarak kullandığınız durumu bir rss reader da xml i okuyup listviewe aktarması için nasıl kullanabilirim xml okuma işlemini "******** rssoku" olarak tanımladım yardımlarınız için şimdiden çok teşekürler.
Bağlantı

<- Son Sayfa :: Sonraki Sayfa ->

Hakkımda

.Net teknolojileri, # Sharp Dilleri ve olan biten ne varsa

Kategoriler

Arkadaşlarım

hepgittik