xscDevBlog – LastSharp & Co.

Der xscheme-DevelopmentBlog

Proxy-Server verwenden (C#)

without comments

Einen Proxy kann man sich als Zwischenstation vorstellen: man schickt ihm eine Anfrage (z.B.: “Hole die Website XY”), er speichert das entsprechende Ergebnis (z.B. die Seite XY) und überträgt es an den Anfragenden (Client).

Ein ganz klarer Vorteil hiervon ist der Schutz des Clients: ein Proxy-Server bietet aufgrund seines einfacheren Aufbaus viel weniger Angriffsfläche als der eigentlich anfragende Rechner – man denke nur an die regelmäßig auftretenden Sicherheitslücken in populären Betriebssystemen – und garantiert außerdem ein gewisses Maß an Anonymität, da nur die IP des Proxies nach außen hin sichtbar ist.

Nachteile wiederum sind, dass man sich nicht sicher sein kann, was der Server protokolliert und speichert, und ob die Daten, die bei einem selbst ankommen, nicht auf dem Weg (vom Proxy) modifiziert wurden. Des weiteren werden viele Proxies von einer großen Anzahl Anwendern genutzt, was einen Geschwindigkeitsverlust im Vergleich zu “normalen” Verbindungen bedeuten kann. Ein ebenso großes Problem kann es sein, wenn Funktionen fehlen (z.B. die Möglichkeit, Daten zu übertragen oder Dateien herunterzuladen) oder wenn der Server eine Inkompatibilität zum verwendeten Programm aufweist. (z.B. Server des CoDeeN-Networks zu .NET-Programmen)

Trotzdem, genug des Geplänkels, die Verwendung eines Proxies im eigenen Programm ist nicht sonderlich schwer.

Das WebProxy-Objekt

Erster Schritt hierbei ist die Erstellung eines Objektes der Klasse System.Net.WebProxy. Hierzu brauchen wir die Adresse des Servers (ggf. seine IP) und den Port, über den er erreicht werden kann:

System.Net.WebProxy proxy =
    new System.Net.WebProxy("http://<Adresse>:<Port>", true);

Der zweite Parameter des Konstruktors gibt an, ob der Proxy für lokale Verbindungen (z.B. zu Testzwecken auf “http://localhost/”) umgangen werden soll.

Authentifizierung

Für die Authentifizierung, also für alle nicht-anonymen Proxies, muss ein System.Net.NetworkCredential-Objekt mit den entsprechenden Zugangsdaten erstellt und dem Proxy-Objekt zugewiesen werden:

System.Net.NetworkCredential auth =
    new System.Net.NetworkCredential("<Benutzername>", "<Passwort>");
proxy.Credentials = auth;

Mithilfe eines so konfigurierten Proxy-Objektes kann man nun entweder mithilfe der HttpWebRequest-Klasse HTTP-Anfragen senden, oder mithilfe der WebClient-Klasse Dateien herunterladen – beides über die von uns gewählte Zwischenstation.

HTTP-Requests über einen Proxy

System.Net.HttpWebRequest request =
    (System.Net.HttpWebRequest) System.Net.WebRequest.Create("<URI>");
request.Proxy = proxy;
System.Net.HttpWebResponse response =
    (System.Net.HttpWebResponse) request.GetResponse();
...

Datei-Download mit Proxy

System.Net.WebClient client = new System.Net.WebClient();
client.Proxy = proxy;
client.DownloadFile("<URI>", "<lokaler Pfad>");
...

Aus.

Ich hoffe, ich habe mit diesem kurzen Beitrag all jenen geholfen, die ihre Programme um Proxy-Funktionalität erweitern wollen.

Written by xsc

Oktober 7th, 2008 at 12:14 am

Posted in C#, HowTo

Tagged with , , ,

Leave a Reply