Chief Brodie: Tcp-Verbindung über Http-Tunnel in C#

moinsen!

ich schreibe gerade einige umfangreichere klassen, die verschiedene webdienste ermöglichen sollen - das ganze in C#.
unter anderem gehört dazu eine klasse, die eine whois-abfrage ermöglichen soll.

nun will ich aber auch berücksichtigen, dass die funktionen, die eine socket-verbindung aufbauen müssen (s.o.), auch über einen http-proxy lauffähig sein sollen.

ich habe mir dazu bereits einen ansatz gebastelt, der eine proxy-passage ermöglicht (mit anmeldung oder ohne), über den ich nun web-requests ausführen kann.

  
using System;  
using System.Net;  
using System.IO;  
  
public class MyClass  
{  
  
  public static void Main(string[] args)  
  {  
    MyClass test = new MyClass();  
    test.DoRequest("http://forum.de.selfhtml.org", "proxy:8080");  
  }  
  
  public void DoRequest(string sAddr, string sProxy)  
  {  
    string sRes;  
    string sUser = "user";  
    string sPass = "pass";  
    WebProxy oProxy = new WebProxy();  
    oProxy.Address = new Uri(sProxy);  
    oProxy.BypassProxyOnLocal = true;  
    oProxy.Credentials = new NetworkCredential(sUser, sPass);  
    WebRequest oRequest = HttpWebRequest.Create(sAddr);  
    oRequest.Proxy = oProxy;  
    try  
    {  
      WebResponse oResponse = oRequest.GetResponse();  
      using (StreamReader sr = new StreamReader(oResponse.GetResponseStream()))  
      {  
        sRes = sr.ReadToEnd();  
        sr.Close();  
      }  
      Console.WriteLine(sRes);  
    }  
    catch (Exception e)  
    {  
      Console.WriteLine(e.Message);  
    }  
  }  
  
}  

hat jemand eine idee, wie ich evtl. darüber (oder auch auf anderem wege) einen http-tunnel ermöglichen kann, den ich für socket-verbindungen nutzbar machen kann?

ich bin für jede anregung dankbar :-)

grtz
chief

  1. Moin Moin !

    TCP/IP over HTTP ist möglich, keine Frage. Aber dafür brauchst Du eine passende "Gegenstelle", die das TCP/IP wieder aus dem HTTP auspackt und ins Internet einspeist.

    Kurz: Geht nicht.

    Vielleicht funktioniert CONNECT, wenn der "im Weg stehende" Proxy relativ unsicher konfiguriert ist. Aber darauf kannst Du Dich nicht verlassen.

    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
  2. Moin!

    nun will ich aber auch berücksichtigen, dass die funktionen, die eine socket-verbindung aufbauen müssen (s.o.), auch über einen http-proxy lauffähig sein sollen.
    hat jemand eine idee, wie ich evtl. darüber (oder auch auf anderem wege) einen http-tunnel ermöglichen kann, den ich für socket-verbindungen nutzbar machen kann?

    Grundsätzlich kann man alles über alles andere tunneln. Dazu benötigt man aber in der Regel zwei zueinander passende Gegenstellen, nicht nur eine.

    Dein Programm kann, wenn es HTTP spricht und mit HTTP Webseiten abrufen will, einen HTTP-Proxy benutzen. TCP ist aber ein Protokoll, was wesentlich unterhalb von HTTP angeordnet ist. Dein Vorhaben ist also im Prinzip total unsinnig.

    Wenn du TCP über einen Proxy erlauben willst, mußt du SOCKS4 oder SOCKS5 unterstützen. Ich schätze, die Unterstützung geht dann nicht mehr so schmerzfrei wie die für einen HTTP-Proxy (da muß man ja im Prinzip nur die volle URL inkl. Server schicken, anstatt die URL ohne Server).

    - Sven Rautenberg

    --
    Signatur oder nicht Signatur - das ist hier die Frage!