Wie wie verbinde ich einen Socket Client zu einem Server über eine Proxy in C#?
Ich code einem Socket Client und würde gerne einen Proxy Support hinzufügen.
udpClient = new UdpClient(address.AddressFamily);
udpClient.Connect(address);
Würde mich auf eine Lösung freuen.
1 Antwort
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
MIt einem UdpClient-Objekt: Afaik gar nicht.
Was du aber machen kannst, wenn es dir um UDP geht: Mit einem TcpClient zu einem Socks5-Proxy verbinden und für die Verbindungsart 0x03 (UDP-Weiterleitung) verwenden.
Siehe dazu auch: https://de.wikipedia.org/wiki/SOCKS#Das_SOCKS-5-Protokoll
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
Für ne UDP-Verbindung weiss ich das leider nicht, hab das bisher nur für TCP gemacht.
Da müsstest du evtl. mal schauen, ob du irgenwo nähere Infos darüber findest, wie genau UDP über Socks funktioniert.
![](https://images.gutefrage.net/media/default/user/12_nmmslarge.png?v=1551279448000)
Könntest du dann zeigen wie es für TCP geht weil das ist egal dann code ich es halt mit tcp wenn es so leichter ist.
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
In dem Fall:
1) Pack diese Datei unter dem Namen SocksForSharp.cs in dein Projekt: https://pastebin.com/wbfhzS4w
2) Füge in deiner Klasse die using-Direktive using SocksForSharp; hinzu.
3) Verwende anstelle von TcpClient.Connect die Erweiterungsmethode TcpClient.ConnectProxy.
Anwendungsbeispiel:
using System;
using SocksForSharp;
public class Test{
public static void Main(string[] args){
TcpClient client = new TcpClient();
Proxy proxy = new Proxy(){
Type = ProxyType.Socks5,
EndPoint = new IPEndPoint(
IPAddress.Parse("12.34.56.78"),
1080
)
};
try{
client.ConnectProxy("example.com", 80, proxy);
}
catch(SocksError err){
Console.Error.WriteLine("SocksError: {0}", err.Message);
}
//TODO: Kommunikation zwischen Client und Server
client.Close();
}
}
Und wie würde man das dann machen müssen?