Socks4-5,http simple proxy server source

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Ky3bMu4, 20 Jan 2008.

  1. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    это socks5 без авторизации, он не проверяет ошибок как следует и вообще прост как двери. Но он работает. Я его писал на делфи под винду, компилится и фри паскалем
     
  2. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Да я вообще-то подумал, что ты хочешь размер бинарника маленький, что бы следуя манифестам хэкеров, вырезать нахер CRT, использовать осенблерные вставки в самых неподходящих местах (для понта), и т.п. А зачем тебе нужен маленький исходник - это ещё более неясно. Какая разница какой будет размер исходного кода, если он будет расширяем, правильно работать, будут средства отладки и тп?*
     
  3. reversys

    reversys Elder - Старейшина

    Joined:
    21 Nov 2007
    Messages:
    139
    Likes Received:
    57
    Reputations:
    7
    по-чи-та-ть в свободные 30 минут на работе.

    PS мне показалось или я это уже написал?

    PPS а если тебе интересны ещё какиелибо причины моих действий добро пожаловать ко мне в аську :)
     
    #23 reversys, 22 Jan 2008
    Last edited: 22 Jan 2008
  4. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    Исходник простейшего прокси от мя
    Code:
    #include <winsock2.h>
    #include <windows.h>
    #include <stdio.h>
    
    #pragma comment(lib,"ws2_32")
    
    #define SLISTEN_PORT         8080 //ïîðò
    #define MESSAGE_BYF			 2048 
    #define LISTEN_BACKLOG       5   
    
    
    ////////////////////////////////////////////////////////////////////////
    int GetHeader(int socket, char *buf, int maxlen)  // ÷èòàåì  õåäåð áåç ïîñòà. (äî \n\n èëè \r\n\r\n )
    {
    	int len, i=0, f=0;
    	char c;
    	while(f != 2 && i < maxlen)
    	{
    		len = recv(socket, &c, 1, 0);
    		if(len==0 || len==-1) 
    			break;	
    		if(c == '\n')
    			f++;
    		else if(c != '\r')
    			f=0;
    		buf[i] = c;
    		i++;	
    	}
    	buf[i]='\0';
    	
    	char *p = strstr(buf, "HTTP/1.0"); 
    	if(p != NULL)
    	*(p+7)='1';
    	
    	return i;
    }
    
    ////////////////////////////////////////////////////////////////////////
    
    int GetHost(char *buf, char *host, int maxlen)  /// ïàðñèì èìÿ õîñòà ñ õåäåðà
    {
    	char *p = strstr(buf, "Host: ");
    
    	if( p == NULL )
    		return 0;
    
    	p+=6;
    	int i;
    	for(i=0; *(p+i)!='\0' && *(p+i)!='\n' && *(p+i)!='\r' && *(p+i)!=':' && *(p+i)!=' ' && i<maxlen; i++)
    		host[i] = *(p+i);
    
    	if( i == maxlen )
    		return 0;
    	host[i] = '\0';
    	return i;
    }
    
    ////////////////////////////////////////////////////////////////////////
    
    int GetContLeng(char *buf)       /// ïàðñèì äëèííó POST äàííûõ
    {
    	char *p = strstr(buf, "Content-Length: ");
    	if( p == NULL )
    		return 0;
    
    	p+=16;
    	char len[8];
    	int i;
    	for(i=0; *(p+i)!='\0' && *(p+i)!='\n' && *(p+i)!='\r' && *(p+i)!=' ' && i<8; i++)
    		len[i] = *(p+i);
    
    	if( i == 8 )
    		return 0;
    	len[i]='\0';
    	return atoi(len);
    }
    
    ////////////////////////////////////////////////////////////////////////
    
    SOCKET SocketConnect(char *host)   /// ïîäñîåäåíÿåìñÿ ê ñåðâåðó
    {
    		SOCKET ksocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    		struct hostent *Ip;
    		Ip = gethostbyname(host);
    
    		sockaddr_in clientService; 
    		clientService.sin_family = AF_INET;
    		clientService.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)Ip->h_addr)));
    		clientService.sin_port = htons(80);
    
    		if(connect( ksocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR)
    			 return SOCKET_ERROR;
    
    		 return ksocket;
    }
    
    //////***************************************************************************************************/////
    
    DWORD  WINAPI SocketListen(LPVOID AcceptSocket)
    {
    		int len;
    		char recvbuf[MESSAGE_BYF], host[256];
    
    		if( GetHeader((int)AcceptSocket, recvbuf, MESSAGE_BYF) == SOCKET_ERROR )  //ïîëó÷àåì õåäåð îò áðàóçåðà
    			return false;
    
    		//printf("%s", recvbuf);
    
    		if( !GetHost(recvbuf, host, 256) )  /// ïàðñèì õîñò èç õåäåðà
    		{
    			char message[]="Proxy error. Host not found in header.";
    			send((int)AcceptSocket, message, strlen(message), 0);	
    			closesocket((int)AcceptSocket);	
    			return false;
    		}
    		 
    		SOCKET ConnectSocket = SocketConnect(host);  // ïäñîåäåíÿåìñÿ ê ñåðâåðó	
    		if(ConnectSocket == SOCKET_ERROR)                               
    		{
    			char message[]="Proxy error.Cannot connect to host.";
    			send((int)AcceptSocket, message, strlen(message), 0);	
    			closesocket((int)AcceptSocket);	
    			return false;
    		}
    
    		if( send((int)ConnectSocket,recvbuf,strlen(recvbuf),0) == SOCKET_ERROR) // îòïðàâëÿåì äàííûé íà ñåðâåð
    		{
    			char message[]="Proxy error. Cannot send data to host.";
    			send((int)AcceptSocket, message, strlen(message), 0);	
    			closesocket((int)AcceptSocket);	
    			return false;
    		}
    
    		len = GetContLeng(recvbuf);  // ïàðñèì ðàçìåð POST äàííûõ
    		char contbuf[128];
    		int recvlen;
    
    		while(len > 0)  /// ïîëó÷àåì îò áðàóçåðà è îòïàâëÿåì POST äàííûå íà ñåðâåð
    		{
    			recvlen = recv((int)AcceptSocket, contbuf, 128, 0);	
    			if(recvlen == SOCKET_ERROR) 
    				break;
    			send((int)ConnectSocket,contbuf,recvlen,0);
    			len-=recvlen;
    		}
    
    		while(1) ///  ïîëó÷àåì äàííûå îò ñåâåðà è îòïðàâëÿåì áðàóçåðó                                                    
    		{
    			len = recv((int)ConnectSocket, recvbuf, MESSAGE_BYF, 0);	
    			if(len == 0 || len == SOCKET_ERROR) 
    				break;
    			send((int)AcceptSocket,recvbuf,len,0);
    		}
    
    		closesocket((int)AcceptSocket);	
    		return true;
    }
    
    //***************************************************************************************************************************//
    
    int main()
    {
    
    	WSADATA wsaData;
    	if (WSAStartup(MAKEWORD(2,2), &wsaData) != NO_ERROR)
    	{
    		printf("Error at WSAStartup()\n");
    		return 0;
    	}
    
    	SOCKET ListenSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    	if (ListenSocket == INVALID_SOCKET) 
    	{
    		printf("Error at socket(): %ld\n", WSAGetLastError());
    		WSACleanup();
    		return 0;
    	}
    
    
    	SOCKADDR_IN sa = {0};
    	int len = sizeof(sa);
    
    	sa.sin_family = AF_INET;
    	sa.sin_addr.s_addr = INADDR_ANY;
    	sa.sin_port = htons( SLISTEN_PORT );
    
    
    	if( bind( ListenSocket, (sockaddr*)&sa, len ) == SOCKET_ERROR )
    	{
    		printf("bind() failed.\n");
    		closesocket(ListenSocket);
    		return 0;
    	}
    
    	if( listen( ListenSocket, LISTEN_BACKLOG ) == SOCKET_ERROR )
    	{
    		printf("Error listening on socket.\n");
    		closesocket(ListenSocket);
    		return 0;
    	}
    
    	printf("Server start at port: %d \nWaiting...\n",SLISTEN_PORT );
    	SOCKET AcceptSocket;
    	DWORD thID;
    
    	while( (AcceptSocket = accept( ListenSocket, (sockaddr*)&sa, &len )) != -1 )
    	{
    		printf("Connection from %s:%d AcceptID=%d\n", inet_ntoa(sa.sin_addr), htons(sa.sin_port), AcceptSocket );
    		CreateThread(0, 0, SocketListen, (LPVOID)AcceptSocket, 0, &thID); 
    	}
    
    	return 1;
    }
    
     
    2 people like this.
  5. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    на работе надо читать Пушкина, а не исходники сокс-серверов, написаные кое-как
     
  6. Alexsis f

    Alexsis f New Member

    Joined:
    11 Feb 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    На slil.ru и webfile.ru файлов уже нет, что не удивительно(((. Может новую ссылку дадите?