[C++] Socks5 Server Schreiben

hi,

ich bin gerade dabei einen Socks5 Server zu schreibe scheitere jedoch schon direkt am Anfang. :(

Bisher habe ich Einen Ganz Normalen Tcp Server und lasse dadrauf Firefox per Proxy Funktion verbinden.

Firefox sendet mir:
, danach habe ich einfach
vom Server Senden lassen, damit der anonymouslogin benutzt wird.

Danach passiert nichts mehr und Firefox meldet irgentwann, dass der Server zu lange zum antworten braucht.

Wo ist nun das Problem, habe ich etwas falsch in der Dokumentation verstanden oder ist vll. mein Code falsch?

buf[0] = 0x05;
buf[1] = 0x00;
send(s,buf,2,0);

Mfg KaiserKronos ;(
 
Hallo KaiserKronos,
Original von KaiserKronos
hi,

ich bin gerade dabei einen Socks5 Server zu schreibe scheitere jedoch schon direkt am Anfang. :(

Bisher habe ich Einen Ganz Normalen Tcp Server und lasse dadrauf Firefox per Proxy Funktion verbinden.

Firefox sendet mir:
, danach habe ich einfach
vom Server Senden lassen, damit der anonymouslogin benutzt wird.
Ohne das jetzt geprüft zu haben....
Zunächst einmal entpricht die Anfrage von Firefox nicht der rfc Norm. Das zweite bzw. dritte Oktet 0d,oa sieht mir nach einem Zeilenschaltung, Wagenrücklauf aus.
Zulässig wäre im zweiten Oktet die Anzahl verfügbarer Authentifizierungsmethoden und im dritten Oktet die Methode. Dies ist nicht valide da Du eine Methode (0a) bekommst obwohl X'od': 13 Methoden definiert! Alles Weitere ist klar..

Original von KaiserKronos
Danach passiert nichts mehr und Firefox meldet irgentwann, dass der Server zu lange zum antworten braucht.
Bist Du denn sicher, dass Firefox keine Struktur sendet, die da definiert ist wie :
+----+-----+-------+------+----------+----------+
|VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
+----+-----+-------+------+----------+----------+
| 1 | 1 | X'00' | 1 | Variable | 2 |
+----+-----+-------+------+----------+----------+

[EDIT] Da ich gute Beiträge leisten möchte, habe ich mal eben einen socks5 accept geschrieben, allerdings in c# hoffe es stört nicht.
Der funktioniert wuederbar, firefox version 3.0.13

Code:
class Program
    {
        static TcpListener server;
        static void Main(string[] args)
        {
            server = new TcpListener(1080);
            server.Start();
            TcpClient client = server.AcceptTcpClient();
            Console.WriteLine(
                "tcp connection at " +
                client.Client.RemoteEndPoint.ToString());
            NetworkStream ns = client.GetStream();
            byte[] auth_header = new byte[2];
            ns.Read(auth_header, 0, 2);
            Console.WriteLine(string.Format
("received auth envelope: version {0} methods {1}",
                auth_header[0], auth_header[1]));
            byte[] methods = new byte[auth_header[1]];
            ns.Read(methods, 0, methods.Length);
            byte[] auth_reply = { 5, 0 };
            ns.Write(auth_reply, 0, 2);
            byte[] request_envelope = new byte[4];
            ns.Read(request_envelope, 0, 4);
            Console.WriteLine("client request for an address of socks type " 
                + request_envelope[3].ToString());
            Console.Read();
        }
    }
 
Original von KaiserKronos
Danke schön für deine Mühe!

ja Firefox sendet genau das, ich habe es einfach in eine Datei schreiben lassen!

mfg KaiserKronos

Da ich eine Glaskugel besitze, kann ich ahnen was passiert.
Du liest nur ein Byte und schreibst es dann mit einem Zeilenumbruch in die Datei, oder Du hast den Zeilenumbruch nachträglich, vieleicht aus Versehen dort eingefügt!
Dein Fehler geschieht nach dem ersten byte ?
 
Zurück
Oben