Ergebnis 1 bis 3 von 3

Thema: Socks5 - Client - C++

  1. #1
    Registered User
    Registriert seit
    Mar 2009
    Beiträge
    70
    Renommee
    39

    Socks5 - Client - C++

    Moin -
    ich hoffe einer kennt sich mit diesem Thema hier aus.. Und zwar möchte ich eine Verbindung zu einem Socks5 Proxy aufnehmen mit Benutzer/Passwort Authentifizierung aufbauen... nur Antwortet der Server nicht so wie gedacht..
    Spoiler:

    Code:
    int nHostPort=ntohs(saddr.sin_port);
    char* p=inet_ntoa(saddr.sin_addr);
    //printf("Connect PoE: %s:%i through Proxy: %s:%i\n\tAuth: %s:%s\n", p, nHostPort, IP, Port, Benutzer, Passwort);
    if(!p)throw MAKELONG(SOCKS_CONNECT_ERROR,0);
    char lpszHostAddress[80];
    strcpy(lpszHostAddress,p);
    
    bs.Connect(IP,Port);
    
    bs.Write("\x05\x01\x02",3);
    
    char s[256];
    bs.Read(s,2);
    
    if (s[0]!=5 || (s[1]!=0 && s[1]!=2)) 
    	throw MAKELONG(SOCKS_CONNECT_ERROR,0);
    printf("Version: %i\tAuthMethode: %i\n", s[0], s[1]);
    
    if (s[1]==2) 
    {
    	char c=s[0];
    	bs.Write(&c,1);
    
    	c=(char)strlen(Benutzer);
    	bs.Write(&c,1);
    	bs.Write(Benutzer,strlen(Benutzer));
    
    	c=(char)strlen(Passwort);
    	bs.Write(&c,1);
    	bs.Write(Passwort,strlen(Passwort));
    
    	bs.Read(&c,1);
    	printf("ConnectionState: %i\n", c);
    	if (c!=5)
    	{
    		throw MAKELONG(SOCKS_CONNECT_ERROR,0);
    	}
    
    	bs.Read(&c,1);
    	if (c!=0) 
    	{
    		printf("Proxy-Auth fehlgeschlagen!\n");
    			throw MAKELONG(SOCKS_AUTH_ERROR,0);
    	}
    	bs.Write("\x05\x00\x00\x03",4);
    
    	printf("lpszHostAddress: %s\n", lpszHostAddress);
    	int i=strlen(lpszHostAddress);
    	bs.Write((char*)&i,1);
    	bs.Write(lpszHostAddress,i);
    	bs.Write(((char*)&nHostPort)+1,1);
    	bs.Write(((char*)&nHostPort),1);
    
    	bs.Read(s,4);
    	if (s[0]!=5||s[1]!=0) throw MAKELONG(SOCKS_CONNECT_ERROR,0);
    	switch (s[3]) {
    		case 1: i=4;  break;
    		case 4: i=16; break;
    		case 3: bs.Read(s,1);
    				i=(BYTE)*s;
    				break;
    		default:
    			throw MAKELONG(SOCKS_CONNECT_ERROR,0);
    	}
    	bs.Read(s,i+2);
    }

    Mein Problem ist, dass er sich nicht verbinden will.. er steigt schon beim "printf("ConnectionState: %i\n", c);" aus da nicht mitgeteilt wird das Version 5 verwendet wird...

    MfG

  2. #2
    Registered User
    Registriert seit
    Feb 2001
    Beiträge
    371
    Renommee
    42

    AW: Socks5 - Client - C++

    Also socks kenne ich nicht, aber guck doch mal auf den --> rfc zu User/Pwd:
    Die Sub-Version hier ist fix 1 ( X'01', nicht 5, wie Du sie übergibst).
    Als Antwort ist dann auch eine Version = 1 zu erwarten, vor dem Status-Byte.

  3. #3
    Registered User
    Registriert seit
    Mar 2009
    Beiträge
    70
    Renommee
    39

    AW: Socks5 - Client - C++

    Ah sry. mein Fehler sollte natürlich eine '1' stehen.. hier kurz überarbeitet...

    Code:
    char ReceiveBuffer[256];
    char SendBuffer[256];
    int nHostPort=ntohs(saddr.sin_port);
    char* lpszHostAddress = inet_ntoa(saddr.sin_addr);
    CBlockingSocket bs(ProxySocket);
    bs.Connect(IP,Port);
    
    if(!lpszHostAddress) throw MAKELONG(SOCKS_CONNECT_ERROR,0);
    
    bs.Write("\x05\x01\x02",3); // Client accept Methoden nur Benutzer/Passwort Auth.
    
    bs.Read(ReceiveBuffer,2);
    
    printf("Version: %i\tAuthMethode: %i\n", ReceiveBuffer[0], ReceiveBuffer[1]);
    
    if (ReceiveBuffer[0]==5 && ReceiveBuffer[1]==2) 
    {
    	SendBuffer[0] = 1;
    	bs.Write(SendBuffer,1);
    
    	SendBuffer[0] = strlen(Benutzer);
    	bs.Write(SendBuffer,1);
    	bs.Write(Benutzer,strlen(Benutzer));
    
    	SendBuffer[0] = strlen(Passwort);
    	bs.Write(SendBuffer,1);
    	bs.Write(Passwort,strlen(Passwort));
    
    	bs.Read(SendBuffer,1);
    	printf("ConnectionState: %i\n", SendBuffer[0]);
    	if (SendBuffer[0]!=1) throw MAKELONG(SOCKS_CONNECT_ERROR,0);
    
    	bs.Read(SendBuffer,1);
    	if (SendBuffer[0] != 0) 
    	{
    		printf("Proxy-Auth fehlgeschlagen!\n");
    			throw MAKELONG(SOCKS_AUTH_ERROR,0);
    	}
    	bs.Write("\x05\x01\x00\x03", 4);
    
    	int i=strlen(lpszHostAddress);
    	bs.Write((char*)&i,1);
    	bs.Write(lpszHostAddress,i);
    	bs.Write(((char*)&nHostPort)+1,1);
    	bs.Write(((char*)&nHostPort),1);
    
    	bs.Read(ReceiveBuffer,4);
    	if (ReceiveBuffer[0]!=5||ReceiveBuffer[1]!=0) throw MAKELONG(SOCKS_CONNECT_ERROR,0);
    	switch (ReceiveBuffer[3]) 
    	{
    		case 1: i=4;  break;
    		case 3: bs.Read(ReceiveBuffer,1);
    				i=(BYTE)*ReceiveBuffer;
    				break;
    		case 4: i=16; break;
    		default:
    			throw MAKELONG(SOCKS_CONNECT_ERROR,0);
    	}
    	bs.Read(ReceiveBuffer,i+2);
    }

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Socks5 Server
    Von blOxx im Forum C / C++
    Antworten: 4
    Letzter Beitrag: 19.06.2010, 14:38
  2. Traffic über SOCKS5 leiten?
    Von Linsnif im Forum C / C++
    Antworten: 4
    Letzter Beitrag: 02.06.2006, 18:45
  3. Netware XP Client - Netware Download Client
    Von Drake im Forum Netzwerktopologie & Technik
    Antworten: 4
    Letzter Beitrag: 05.11.2004, 16:53
  4. Antworten: 1
    Letzter Beitrag: 10.04.2003, 12:48
  5. FTP Client =!
    Von 13pixelchen im Forum Technisches Off-Topic
    Antworten: 1
    Letzter Beitrag: 21.09.2001, 16:56

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •