Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
у кого есть исходник сокса 5? |

23.02.2006, 14:58
|
|
Новичок
Регистрация: 22.02.2006
Сообщений: 12
Провел на форуме: 39733
Репутация:
3
|
|
у кого есть исходник сокса 5?
если не сложно выложите исходник пятого сокса под win С++. я искал, так и не смог найти.
|
|
|

23.02.2006, 15:06
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
приведи в нормальное состояние. надеюсь ты понял что Socks5_Opt структуры тут нет, но она и не нужна в общем случае.
и ещё тут API ф-ии с префиксами "_". потомучто у меня вручную адреса их находяться. ты можешь убрать эти _
только не спрашивай потом почему "я его скомпилил но появились ошибки"
Код:
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include "InitAPI.h" // это все мое
#include "RegSave.h" // тоже
#include "Socks5.h" // ну там тоже
Socks5_Opt Opt_Socks5;
struct socks5_method_request
{
unsigned char version;
unsigned char nmethods ;
unsigned char methods[255];
};
typedef struct tag_socks5_method_response
{
unsigned char version;
unsigned char method;
} socks5_method_response;
typedef struct tag_socks5_request
{
unsigned char version;
unsigned char command;
unsigned char reserved;
unsigned char atype;
DWORD addr;
WORD port;
} socks5_request;
typedef struct tag_SOCKS4_REQUEST
{
unsigned char ucVersion;
unsigned char ucCommand;
WORD wDestPort;
DWORD dwDestIp;
} SOCKS4_REQUEST;
#define _try int loop = 0; while(loop++ == 0)
#define _leave break
#define Cl_SendMessage(x) Client_SendMessage(x,Opt_Socks5.CLIENT)
DWORD WINAPI Socks5HandlerTreadProc( LPVOID pParam )
{
SOCKET s = (SOCKET)pParam;
SOCKET tunnelSock = 0;
int loop = 0;
while (loop++ == 0 && Opt_Socks5.started)
{
int iConnectResult = 0;
SOCKS4_REQUEST socks4Request, socks4Response;
int iReceiveRes = 0, iSendRes = 0, iSelectRes = 0, iCtlRes = 0;
SOCKADDR_IN remoteAddr = {0};
u_long ulVal = 1;
int iBytesReceived = 0;
fd_set fds_read;
int iSocketsSet = 0;
FD_ZERO( &fds_read );
FD_SET(s, &fds_read);
TIMEVAL tv = {0};
tv.tv_sec = 30;
char cSocksVersion = 0;
int iSelectResult = _select(0, &fds_read, NULL, NULL, &tv);
if (iSelectResult == SOCKET_ERROR || !iSelectResult) break;
ulVal = 0;
iCtlRes = _ioctlsocket(s, FIONBIO , &ulVal);
iReceiveRes = _recv(s, &cSocksVersion, 1, MSG_PEEK);
if (cSocksVersion == 5)
{
socks5_method_request s5method = {0};
socks5_method_response s5methodResponse = {0};
socks5_request s5Request = {0};
iReceiveRes = _recv(s, ((char*)&s5method.version), 1, 0);
iReceiveRes = _recv(s, ((char*)&s5method.nmethods), 1, 0);
iReceiveRes = _recv(s, ((char*)&s5method.nmethods), s5method.nmethods, 0);
s5methodResponse.version = 5;
s5methodResponse.method = 0;
iSendRes = _send(s, (char*)&s5methodResponse, sizeof(s5methodResponse), 0);
iReceiveRes = _recv(s, (char*)&s5Request, sizeof(s5Request), 0);
if (s5Request.atype != 1){
s5Request.command = 8;
iSendRes = _send(s, (char*)&s5Request, sizeof(s5Request), 0);
break;
}
if (s5Request.command == 1)
{
remoteAddr.sin_family = AF_INET;
memcpy(&(remoteAddr.sin_addr),&(s5Request.addr), sizeof(remoteAddr.sin_addr));
remoteAddr.sin_port = s5Request.port;
tunnelSock = _socket(AF_INET, SOCK_STREAM, 0);
iConnectResult = _connect(tunnelSock, (struct sockaddr*) &remoteAddr,
sizeof(remoteAddr));
if (iConnectResult != SOCKET_ERROR)
{
s5Request.command = 0;
iSendRes = _send(s, (char*)&s5Request, sizeof(s5Request), 0);
}
else
{
s5Request.command = 1;
iSendRes = _send(s, (char*)&s5Request, sizeof(s5Request), 0);
break;
}
} else break;
} else break;
ulVal = 0;
iCtlRes = _ioctlsocket(tunnelSock, FIONBIO , &ulVal);
iCtlRes = _ioctlsocket(s , FIONBIO , &ulVal);
char swapBuffer[4096*16];
int iSendResult, i_recvResult;
tv.tv_sec = 2;
while (Opt_Socks5.started)
{
FD_ZERO(&fds_read);
FD_SET(s, &fds_read);
FD_SET(tunnelSock, &fds_read);
iSocketsSet = _select(0, &fds_read, NULL, NULL, &tv);
if (iSocketsSet > 0)
{
if (_WSAFDIsSet( s, &fds_read ) )
{
i_recvResult = _recv(s, swapBuffer, sizeof(swapBuffer), MSG_PEEK);
if (i_recvResult == 0) _leave;
else i_recvResult = _recv(s, swapBuffer, sizeof(swapBuffer), 0);
if (i_recvResult != SOCKET_ERROR && i_recvResult > 0 )
iSendResult = _send(tunnelSock, swapBuffer, i_recvResult, 0);
else break;
}
if (_WSAFDIsSet(tunnelSock, &fds_read)){
i_recvResult = _recv(tunnelSock, swapBuffer, sizeof(swapBuffer), MSG_PEEK);
if (i_recvResult == 0) break;
else i_recvResult = _recv(tunnelSock, swapBuffer, sizeof(swapBuffer), 0);
if (i_recvResult != SOCKET_ERROR && i_recvResult > 0 )
iSendResult = _send(s, swapBuffer, i_recvResult, 0);
else break;
}
}
}
}
if (s) _closesocket( s );
if (tunnelSock) _closesocket( tunnelSock );
return 0;
}
DWORD WINAPI Socks5_Thread( LPVOID port )
{
DWORD dwThreadId;
CLIENT_MESSAGE temp;
sprintf( temp.to, "%s", Opt_Socks5.privmsg_to );
Opt_Socks5.s = _socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if (Opt_Socks5.s == INVALID_SOCKET)
{
Opt_Socks5.started = 0;
sprintf( temp.text, "SOCKS5: Couldnot create main socket" );
if (!Opt_Socks5.ignore_send) Cl_SendMessage( temp );
return 0;
}
SOCKADDR_IN sock5;
sock5.sin_family = AF_INET;
sock5.sin_port = _htons( (unsigned int)Opt_Socks5.port );
sock5.sin_addr.s_addr = INADDR_ANY;
if (_bind( Opt_Socks5.s, (sockaddr*)&sock5, sizeof( sock5 ) )
== SOCKET_ERROR)
{
Opt_Socks5.started = 0;
_closesocket( Opt_Socks5.s );
sprintf( temp.text, "SOCKS5: Couldnot bind main socket" );
if (!Opt_Socks5.ignore_send) Cl_SendMessage( temp );
return 0;
}
if (_listen( Opt_Socks5.s, 0xff ) == SOCKET_ERROR) return 0;
sprintf( temp.text, "Socks5 started" );
if (!Opt_Socks5.ignore_send) Cl_SendMessage( temp );
/* save state */
Socks5_SaveState( TRUE, Opt_Socks5.port );
/* accept/createthread loop */
while (Opt_Socks5.started)
_CreateThread( 0, 0, Socks5HandlerTreadProc, (LPVOID)_accept( Opt_Socks5.s, 0, 0 ), 0, &dwThreadId );
return 1;
}
/* start/stop functions */
int Socks5_StartThread( unsigned int port, char *privmsg_to, int CLIENT )
{
DWORD dwThreadId;
sprintf( Opt_Socks5.privmsg_to, "%s", privmsg_to );
if (Opt_Socks5.started) return 2;
Opt_Socks5.ignore_send = ignore_send;
Opt_Socks5.port = port;
Opt_Socks5.started = 1;
Opt_Socks5.CLIENT = CLIENT;
Opt_Socks5.hSocks5Thread = _CreateThread( NULL, NULL,
Socks5_Thread, NULL, NULL, &dwThreadId );
return 1;
}
int Socks5_StopThread( int savestate )
{
if (!Opt_Socks5.started) return 2;
Opt_Socks5.started = 0;
_closesocket( Opt_Socks5.s );
_TerminateThread( Opt_Socks5.hSocks5Thread, 0 );
if (savestate) Socks5_SaveState( FALSE, 0 );
return 1;
}
int Socks5_GetStatus( void )
{
return Opt_Socks5.started;
}
unsigned int Socks5_GetCurrentPort( void )
{
return Opt_Socks5.port;
}
int Socks5_SaveState( BOOL started, unsigned int port )
{
Reg_SaveValue( "socks5_state", &started, REG_DWORD );
if (port) Reg_SaveValue( "socks5_port", &port, REG_DWORD );
return 1;
}
вырвано из бота...
Последний раз редактировалось KEZ; 23.02.2006 в 15:08..
|
|
|

23.02.2006, 20:22
|
|
Новичок
Регистрация: 22.02.2006
Сообщений: 12
Провел на форуме: 39733
Репутация:
3
|
|
сенкс. думаю я разберусь
|
|
|

24.02.2006, 02:20
|
|
Green member - Level 3
Регистрация: 08.10.2005
Сообщений: 396
Провел на форуме: 400609
Репутация:
239
|
|
Dr0ne
я бы посоветовал Вам поискать RFC - там все очень просто.
__________________
Никому нельзя верить...
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|