100分求socks5客户端程序 我的服务器装了CCProxy.exe这个软件,需要帐号密码验证我想在客户机上通过监听一个端口把数据包通过CCProxy服务器转发出去求类似的VC源码 控制台/mfc都可以邮箱:jifeng520#yahoo.cn 请讲#替换成@ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.koders.com/cpp/fid8EB202FB22C3B4326805D6E368D1365705435801.aspx?s=socks5http://www.koders.com/cpp/fid35160C548233B1F63A7FDC54004F18635E4C2441.aspx?s=socks5http://www.koders.com/cpp/fid0329AB19D66F7D45FE32EFD651D1004E695A5BA0.aspx?s=socks5http://www.koders.com/cpp/fidC12057F7D3AE6777E4906ABE812A28E1EBE4B83D.aspx?s=socks5 SOURCE CODE:http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=901http://www.vchelp.net/vchelp/type.asp?class_id=1&type_id=36 http://www.codeproject.com/internet/casyncproxysocket.asphttp://www.codeproject.com/internet/casyncsocketex.asp http://www.codeproject.com/internet/casyncproxysocket.asp 这个是代理到FTP服务器撒我要得不是这样的哦内网主机A:192.168.0.1 用CCProxy开放socks5代理 8080端口(这台机有外网)在内网的 192.168.0.X 都要通过192.168.0.1开放socks5代理上外网是在192.168.0.X 每台电脑上到安装一个客户端监听端口例如监听1080 QQ代理设置127.0.0.1:1080然后客户端转发到 CCProxy上然后在转发出去 我要这样的VC代码 可能是我没有表达清楚我求CCProxy客户端的VC源代码谢谢 是不是这个:http://topic.csdn.net/t/20011120/13/379218.html 楼主是要二级代理的客户端吧?本地监听某个端口,再通过CCProxy的代理服务器转发这样的工具很多,包括CCProxy也可以做前台的代理。你在客户端安装CCProxy,开启Sock5服务,监听某端口然后在高级设置中设置二级代理就可以了,二级代理的地址就输入你的Sock5服务器地址即可实际上你要的源码应该是支持二级代理的Sock5或者HTTP协议的代理源码。 开发;卓越呼叫中心、三农热线”语音农业综合信息服务平台、卓越办公自动化软件、卓越电厂MIS系统、卓越客户关系管理系统、卓越网站制作、卓越医疗信息管理系统;沈阳卓越科技有限公司;http://www.excellence-tech.com 问大家一个问题:我用sock5做了个客户端的程序:代理服务器的IP:67.151.147.66 端口1080 unsigned int g_sock; int err; struct sockaddr_in addr; g_sock = socket (AF_INET, SOCK_STREAM, 0); if(g_sock == INVALID_SOCKET) { return 0; } memset (&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("67.151.147.66"); addr.sin_port = htons(1080); err = connect(g_sock, (struct sockaddr*) &addr, sizeof(addr)); char buff[600]; struct sock5req1 *m_proxyreq1; m_proxyreq1 = (struct sock5req1 *)buff; m_proxyreq1->Ver = 5; //m_proxyreq1->nMethods = 0; m_proxyreq1->nMethods = 2; //后面数据包的长度 m_proxyreq1->Methods[0] = 0; //无验证请求 m_proxyreq1->Methods[1] = 2; int rc = 0; rc = send(g_sock,buff,4,0); //g_sock.Send(buff,4); struct sock5ans1 *m_proxyans1; m_proxyans1 = (struct sock5ans1 *)buff; memset(buff,0,600); //g_sock.Receive(buff,600); rc = recv(g_sock,buff,4,0); if(m_proxyans1->Ver != 5 || (m_proxyans1->Method!=0 && m_proxyans1->Method!=2)) { return FALSE; } char chuser[32] = {0}; char chpass[32] = {0}; if(m_proxyans1->Method == 2) { } struct sock5req2 *m_proxyreq2; m_proxyreq2 = (struct sock5req2 *)buff; m_proxyreq2->Ver = 5; //----------------------------------------------- //TCP m_proxyreq2->Cmd = 1; //tcp连接 m_proxyreq2->Rsv = 0; m_proxyreq2->Atyp = 1; //address type:Ip V4 ; unsigned long tmpLong = inet_addr("202.165.102.205"); yahoo的WEB服务器的地址 unsigned short port = ntohs(80); memcpy(m_proxyreq2->other,&tmpLong,4); memcpy(m_proxyreq2->other+4,&port,2); rc = send(g_sock,buff,sizeof(struct sock5req2)+5,0); struct sock5ans2 *m_proxyans2; memset(buff,0,600); m_proxyans2 = (struct sock5ans2 *)buff; rc = recv(g_sock,buff,600,0); if(m_proxyans2->Ver != 5 || m_proxyans2->Rep != 0) { return FALSE; } //认证成功 int iResult; long lResult; char strSubAddr[100], strBuffer[100]; strcpy(strSubAddr, "GET /08-05-/1037/2j4l6.html \r\n"); iResult = send(g_sock, strSubAddr,strlen(strSubAddr),0); do { iResult = recv(g_sock,strBuffer,100,0); 如果我用代理就收不到数据 如果我直接用连到远端的就能收到数据 }while (iResult != 0); 我用的是联代理服务器的SOCK句柄 发的实际数据看文档说有绑定的ip和port但我没有看到 #ifndef _BASESOCKET_H#define _BASESOCKET_H#include <WinSock.h>#pragma pack(push) #pragma pack (1) /*指定按1字节对齐*/typedef struct _sock4req1{ char VN; char CD; unsigned short Port; unsigned long IPAddr; char other[1];}sock4req1;typedef struct _sock4ans1{ char VN; char CD;}sock4ans1;typedef struct _sock5req1{ char Ver; char nMethods; char Methods[255];}sock5req1;typedef struct _sock5ans1{ char Ver; char Method;}sock5ans1;typedef struct _sock5req2{ char Ver; char Cmd; char Rsv; char Atyp; unsigned long IPAddr; unsigned short Port;}sock5req2;typedef struct _sock5ans2{ char Ver; char Rep; char Rsv; char Atyp; unsigned long IPAddr; unsigned short Port;}sock5ans2;typedef struct _authans{ char Ver; char Status;}authans;#pragma pack(pop) #include "BaseSocket.h"#include "LogSys.h"#include "Common.h"#pragma comment(lib, "ws2_32.lib")BaseSocket::BaseSocket(){ m_ConnectSocket = INVALID_SOCKET ; WSADATA wsaData ; WSAStartup(MAKEWORD(2,2), &wsaData) ;}BaseSocket::~BaseSocket(){ if (m_ConnectSocket != INVALID_SOCKET) { closesocket(m_ConnectSocket) ; } WSACleanup() ;}bool BaseSocket::Create(){ m_bOpen = false ; m_ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) ; if (m_ConnectSocket == INVALID_SOCKET) { return false ; } int nNetTimeout = 5000 ; setsockopt(m_ConnectSocket, SOL_SOCKET, SO_SNDTIMEO, (char *)&nNetTimeout, sizeof(int)) ; return true ;}bool BaseSocket::Connect(const char* szHostName, const unsigned short u16Port){ memset(&m_peer, 0, sizeof(sockaddr_in)) ; m_peer.sin_family = AF_INET ; m_peer.sin_addr.s_addr = inet_addr(szHostName) ; m_peer.sin_port = htons(u16Port) ; if (connect(m_ConnectSocket, (SOCKADDR*)&m_peer, sizeof(m_peer)) == SOCKET_ERROR) { return false ; } m_bOpen = true ; return true ;}bool BaseSocket::Socks4Connect(const char *szHostAddress,unsigned short nHostPort,const char *szPoxyIP,unsigned short usPoxyPort){ int rc; SOCKADDR_IN addr; memset(&addr,0,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(szPoxyIP); addr.sin_port = htons(usPoxyPort); rc = connect(m_ConnectSocket,(SOCKADDR *)&addr, sizeof(addr)); if(rc == SOCKET_ERROR) { closesocket(m_ConnectSocket); return false; } char buff[256]; memset(buff,0,sizeof(buff)); sock4req1 *m_proxyreq; m_proxyreq = (sock4req1 *)buff; m_proxyreq->VN = 4; m_proxyreq->CD = 1; m_proxyreq->Port = ntohs(nHostPort); m_proxyreq->IPAddr = inet_addr("szHostAddress"); strcpy(m_proxyreq->other , ""); rc = send(m_ConnectSocket,(const char*)buff,9,0); if(rc == SOCKET_ERROR) { closesocket(m_ConnectSocket); return false; } sock4ans1 *m_proxyans; m_proxyans = (sock4ans1 *)buff; memset(buff,0,sizeof(buff)); rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0); if(rc == SOCKET_ERROR) { closesocket(m_ConnectSocket); return false; } if(m_proxyans->VN != 0 || m_proxyans->CD != 90) { closesocket(m_ConnectSocket); return false; } return true;}bool BaseSocket::Socks5Connect(const char *szHostAddress,unsigned short nHostPort,const char *szPoxyIP,unsigned short usPoxyPort, const char *szUserName,const char *szPassWord,unsigned int iUserNameLongth,unsigned int iPassWordLongth){ // TODO: Add your control notification handler code here int rc; SOCKADDR_IN addr; memset(&addr,0,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(szPoxyIP); addr.sin_port = htons(usPoxyPort); rc = connect(m_ConnectSocket,(SOCKADDR *)&addr, sizeof(addr)); if(rc == SOCKET_ERROR) { closesocket(m_ConnectSocket); return false; } char buff[512]; memset(buff,0,sizeof(buff)); sock5req1 *m_proxyreq1; m_proxyreq1 = (sock5req1 *)buff; m_proxyreq1->Ver = 5; m_proxyreq1->nMethods = 2; m_proxyreq1->Methods[0] = 0; m_proxyreq1->Methods[1] = 2; rc = send(m_ConnectSocket,(const char*)buff,4,0); if(rc == SOCKET_ERROR) { closesocket(m_ConnectSocket); return false; } sock5ans1 *m_proxyans1; m_proxyans1 = (sock5ans1 *)buff; memset(buff,0,sizeof(buff)); rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0); if(rc == SOCKET_ERROR) { closesocket(m_ConnectSocket); return false; } if(m_proxyans1->Ver != 5 || (m_proxyans1->Method!=0 && m_proxyans1->Method!=2)) { closesocket(m_ConnectSocket); return false; } if(m_proxyans1->Method == 2) { memset(buff,0,sizeof(buff)); buff[0] = 5; buff[1] = iUserNameLongth; memcpy( &buff[2], szUserName, iUserNameLongth); buff[2+ iUserNameLongth] = iPassWordLongth; memcpy( &buff[3 + iUserNameLongth], szPassWord, iPassWordLongth ); if( send( m_ConnectSocket, (const char*)buff, (3+ iUserNameLongth + iPassWordLongth ), 0 ) == SOCKET_ERROR ) { closesocket(m_ConnectSocket); return false; } authans *m_authans; m_authans = (authans *)buff; memset(buff,0,sizeof(buff)); rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0); if(rc == SOCKET_ERROR) { closesocket(m_ConnectSocket); return false; } if(m_authans->Ver != 5 || m_authans->Status != 0) { closesocket(m_ConnectSocket); return false; } } sock5req2 *m_proxyreq2; m_proxyreq2 = (sock5req2 *)buff; m_proxyreq2->Ver = 5; m_proxyreq2->Cmd = 1; m_proxyreq2->Rsv = 0; m_proxyreq2->Atyp = 1; m_proxyreq2->IPAddr = inet_addr(szHostAddress); m_proxyreq2->Port = ntohs(nHostPort); if( send( m_ConnectSocket, (const char*)buff, sizeof(sock5req2), 0 ) == SOCKET_ERROR ) { closesocket(m_ConnectSocket); return false; } sock5ans2 *m_proxyans2; memset(buff,0,sizeof(buff)); m_proxyans2 = (sock5ans2 *)buff; rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0); if(rc == SOCKET_ERROR) { closesocket(m_ConnectSocket); return false; } if(m_proxyans2->Ver != 5 || m_proxyans2->Rep != 0) { closesocket(m_ConnectSocket); return false; } m_bOpen = true ; return true;}int BaseSocket::Close(){ m_bOpen = false ; return closesocket(m_ConnectSocket) ;}int BaseSocket::Send(const unsigned char* pBuf, const unsigned u32Len){ int ret = send(m_ConnectSocket, (const char*)pBuf, u32Len, 0) ; if (ret <= 0) {#if DEBUG_DATA_OUT LogSys::Instance().LOG_FILE("Send error : %d\r\n", WSAGetLastError()) ;#endif Close() ; } return ret ;}int BaseSocket::Receive(unsigned char* pBuf, const unsigned u32Len){ int ret = recv(m_ConnectSocket, (char*)pBuf, u32Len, 0) ; if (ret <= 0) {#if DEBUG_DATA_OUT LogSys::Instance().LOG_FILE("Recv error : %d\r\n", WSAGetLastError()) ;#endif Close() ; } return ret ;}bool BaseSocket::GetIPBySocket( char* strIP ){ struct sockaddr_in localAddr; int namelen = sizeof( localAddr ); if( getsockname( m_ConnectSocket, (struct sockaddr *)&localAddr, &namelen ) == SOCKET_ERROR ) return false; memcpy(strIP,inet_ntoa((struct in_addr )localAddr.sin_addr),namelen); return true;}bool BaseSocket::GetPortBySocket(unsigned short *port ){ struct sockaddr_in localAddr; int namelen = sizeof( localAddr ); if( getsockname( m_ConnectSocket, (struct sockaddr *)&localAddr, &namelen ) == SOCKET_ERROR ) return false; *port = ntohs(localAddr.sin_port); return true;} 简单呀.在本机装个ccproxy,做成串联代理,下一层代理设置为网关的ccproxy代理就是你想要的了. 谁能给我个使用VC ADO连接MYSQL的连接字符串啊 jpg图像缩放显示 OnDraw()中调用下面的语句, 各位大家好!我想学vc,请帮帮我,谢谢了! Picture Ctrol可不可以直接读取一张位图然后显示???? 谁能介绍一下CListCtrlEx类? 什么地方有《列宁在十月》的那个配音版的电影下载。 求救:CTime能否得到毫秒数??? 类 与 成员的问题 有誰知道如何在Runtime時將ComboBox的DropdownList和Dropdown風格進行轉換的? opengl在windows下怎样提高速度 获取硬盘物理序列号的程序,在intel 965芯片的主板上为什么失败?
http://www.koders.com/cpp/fid35160C548233B1F63A7FDC54004F18635E4C2441.aspx?s=socks5
http://www.koders.com/cpp/fid0329AB19D66F7D45FE32EFD651D1004E695A5BA0.aspx?s=socks5
http://www.koders.com/cpp/fidC12057F7D3AE6777E4906ABE812A28E1EBE4B83D.aspx?s=socks5
http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=901
http://www.vchelp.net/vchelp/type.asp?class_id=1&type_id=36
http://www.codeproject.com/internet/casyncsocketex.asp
这个是代理到FTP服务器撒
我要得不是这样的哦
内网主机A:192.168.0.1 用CCProxy开放socks5代理 8080端口(这台机有外网)
在内网的 192.168.0.X 都要通过192.168.0.1开放socks5代理上外网
是在192.168.0.X 每台电脑上到安装一个客户端监听端口例如监听1080 QQ代理设置127.0.0.1:1080然后客户端转发到 CCProxy上然后在转发出去
我要这样的VC代码
我求CCProxy客户端的VC源代码
谢谢
http://topic.csdn.net/t/20011120/13/379218.html
这样的工具很多,包括CCProxy也可以做前台的代理。你在客户端安装CCProxy,开启Sock5服务,监听某端口
然后在高级设置中设置二级代理就可以了,二级代理的地址就输入你的Sock5服务器地址即可
实际上你要的源码应该是支持二级代理的Sock5或者HTTP协议的代理源码。
我用sock5做了个客户端的程序:
代理服务器的IP:67.151.147.66 端口1080
unsigned int g_sock;
int err;
struct sockaddr_in addr;
g_sock = socket (AF_INET, SOCK_STREAM, 0);
if(g_sock == INVALID_SOCKET)
{
return 0;
}
memset (&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("67.151.147.66");
addr.sin_port = htons(1080);
err = connect(g_sock, (struct sockaddr*) &addr, sizeof(addr)); char buff[600];
struct sock5req1 *m_proxyreq1;
m_proxyreq1 = (struct sock5req1 *)buff;
m_proxyreq1->Ver = 5;
//m_proxyreq1->nMethods = 0;
m_proxyreq1->nMethods = 2; //后面数据包的长度
m_proxyreq1->Methods[0] = 0; //无验证请求
m_proxyreq1->Methods[1] = 2;
int rc = 0;
rc = send(g_sock,buff,4,0); //g_sock.Send(buff,4);
struct sock5ans1 *m_proxyans1;
m_proxyans1 = (struct sock5ans1 *)buff;
memset(buff,0,600);
//g_sock.Receive(buff,600);
rc = recv(g_sock,buff,4,0); if(m_proxyans1->Ver != 5 || (m_proxyans1->Method!=0 && m_proxyans1->Method!=2))
{
return FALSE;
}
char chuser[32] = {0};
char chpass[32] = {0};
if(m_proxyans1->Method == 2)
{ }
struct sock5req2 *m_proxyreq2;
m_proxyreq2 = (struct sock5req2 *)buff;
m_proxyreq2->Ver = 5; //-----------------------------------------------
//TCP
m_proxyreq2->Cmd = 1; //tcp连接
m_proxyreq2->Rsv = 0;
m_proxyreq2->Atyp = 1; //address type:Ip V4 ; unsigned long tmpLong = inet_addr("202.165.102.205"); yahoo的WEB服务器的地址
unsigned short port = ntohs(80);
memcpy(m_proxyreq2->other,&tmpLong,4);
memcpy(m_proxyreq2->other+4,&port,2);
rc = send(g_sock,buff,sizeof(struct sock5req2)+5,0);
struct sock5ans2 *m_proxyans2;
memset(buff,0,600);
m_proxyans2 = (struct sock5ans2 *)buff;
rc = recv(g_sock,buff,600,0);
if(m_proxyans2->Ver != 5 || m_proxyans2->Rep != 0)
{
return FALSE;
}
//认证成功 int iResult;
long lResult;
char strSubAddr[100], strBuffer[100];
strcpy(strSubAddr, "GET /08-05-/1037/2j4l6.html \r\n");
iResult = send(g_sock, strSubAddr,strlen(strSubAddr),0); do
{
iResult = recv(g_sock,strBuffer,100,0); 如果我用代理就收不到数据 如果我直接用连到远端的就能收到数据
}while (iResult != 0);
看文档说有绑定的ip和port但我没有看到
#define _BASESOCKET_H#include <WinSock.h>#pragma pack(push)
#pragma pack (1) /*指定按1字节对齐*/
typedef struct _sock4req1
{
char VN;
char CD;
unsigned short Port;
unsigned long IPAddr;
char other[1];
}sock4req1;typedef struct _sock4ans1
{
char VN;
char CD;
}sock4ans1;typedef struct _sock5req1
{
char Ver;
char nMethods;
char Methods[255];
}sock5req1;typedef struct _sock5ans1
{
char Ver;
char Method;
}sock5ans1;typedef struct _sock5req2
{
char Ver;
char Cmd;
char Rsv;
char Atyp;
unsigned long IPAddr;
unsigned short Port;
}sock5req2;typedef struct _sock5ans2
{
char Ver;
char Rep;
char Rsv;
char Atyp;
unsigned long IPAddr;
unsigned short Port;
}sock5ans2;typedef struct _authans
{
char Ver;
char Status;
}authans;
#pragma pack(pop)
#include "Common.h"#pragma comment(lib, "ws2_32.lib")BaseSocket::BaseSocket()
{
m_ConnectSocket = INVALID_SOCKET ; WSADATA wsaData ;
WSAStartup(MAKEWORD(2,2), &wsaData) ;
}BaseSocket::~BaseSocket()
{
if (m_ConnectSocket != INVALID_SOCKET)
{
closesocket(m_ConnectSocket) ;
}
WSACleanup() ;
}bool BaseSocket::Create()
{
m_bOpen = false ; m_ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) ;
if (m_ConnectSocket == INVALID_SOCKET)
{
return false ;
} int nNetTimeout = 5000 ;
setsockopt(m_ConnectSocket, SOL_SOCKET, SO_SNDTIMEO, (char *)&nNetTimeout, sizeof(int)) ; return true ;
}bool BaseSocket::Connect(const char* szHostName, const unsigned short u16Port)
{
memset(&m_peer, 0, sizeof(sockaddr_in)) ;
m_peer.sin_family = AF_INET ;
m_peer.sin_addr.s_addr = inet_addr(szHostName) ;
m_peer.sin_port = htons(u16Port) ; if (connect(m_ConnectSocket, (SOCKADDR*)&m_peer, sizeof(m_peer)) == SOCKET_ERROR)
{
return false ;
} m_bOpen = true ; return true ;
}bool BaseSocket::Socks4Connect(const char *szHostAddress,unsigned short nHostPort,const char *szPoxyIP,unsigned short usPoxyPort)
{
int rc;
SOCKADDR_IN addr;
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(szPoxyIP);
addr.sin_port = htons(usPoxyPort);
rc = connect(m_ConnectSocket,(SOCKADDR *)&addr, sizeof(addr));
if(rc == SOCKET_ERROR)
{
closesocket(m_ConnectSocket);
return false;
} char buff[256];
memset(buff,0,sizeof(buff));
sock4req1 *m_proxyreq;
m_proxyreq = (sock4req1 *)buff;
m_proxyreq->VN = 4;
m_proxyreq->CD = 1;
m_proxyreq->Port = ntohs(nHostPort);
m_proxyreq->IPAddr = inet_addr("szHostAddress");
strcpy(m_proxyreq->other , "");
rc = send(m_ConnectSocket,(const char*)buff,9,0);
if(rc == SOCKET_ERROR)
{
closesocket(m_ConnectSocket);
return false;
}
sock4ans1 *m_proxyans;
m_proxyans = (sock4ans1 *)buff;
memset(buff,0,sizeof(buff));
rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0);
if(rc == SOCKET_ERROR)
{
closesocket(m_ConnectSocket);
return false;
}
if(m_proxyans->VN != 0 || m_proxyans->CD != 90)
{
closesocket(m_ConnectSocket);
return false;
}
return true;
}bool BaseSocket::Socks5Connect(const char *szHostAddress,unsigned short nHostPort,const char *szPoxyIP,unsigned short usPoxyPort,
const char *szUserName,const char *szPassWord,unsigned int iUserNameLongth,unsigned int iPassWordLongth)
{
// TODO: Add your control notification handler code here
int rc;
SOCKADDR_IN addr;
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(szPoxyIP);
addr.sin_port = htons(usPoxyPort);
rc = connect(m_ConnectSocket,(SOCKADDR *)&addr, sizeof(addr));
if(rc == SOCKET_ERROR)
{
closesocket(m_ConnectSocket);
return false;
}
char buff[512];
memset(buff,0,sizeof(buff));
sock5req1 *m_proxyreq1;
m_proxyreq1 = (sock5req1 *)buff;
m_proxyreq1->Ver = 5;
m_proxyreq1->nMethods = 2;
m_proxyreq1->Methods[0] = 0;
m_proxyreq1->Methods[1] = 2;
rc = send(m_ConnectSocket,(const char*)buff,4,0);
if(rc == SOCKET_ERROR)
{ closesocket(m_ConnectSocket);
return false;
}
sock5ans1 *m_proxyans1;
m_proxyans1 = (sock5ans1 *)buff;
memset(buff,0,sizeof(buff));
rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0);
if(rc == SOCKET_ERROR)
{ closesocket(m_ConnectSocket);
return false;
}
if(m_proxyans1->Ver != 5 || (m_proxyans1->Method!=0 && m_proxyans1->Method!=2))
{ closesocket(m_ConnectSocket);
return false;
}
if(m_proxyans1->Method == 2)
{
memset(buff,0,sizeof(buff));
buff[0] = 5;
buff[1] = iUserNameLongth;
memcpy( &buff[2], szUserName, iUserNameLongth);
buff[2+ iUserNameLongth] = iPassWordLongth;
memcpy( &buff[3 + iUserNameLongth], szPassWord, iPassWordLongth );
if( send( m_ConnectSocket, (const char*)buff, (3+ iUserNameLongth + iPassWordLongth ), 0 ) == SOCKET_ERROR )
{ closesocket(m_ConnectSocket);
return false;
} authans *m_authans;
m_authans = (authans *)buff;
memset(buff,0,sizeof(buff));
rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0);
if(rc == SOCKET_ERROR)
{ closesocket(m_ConnectSocket);
return false;
}
if(m_authans->Ver != 5 || m_authans->Status != 0)
{ closesocket(m_ConnectSocket);
return false;
}
}
sock5req2 *m_proxyreq2;
m_proxyreq2 = (sock5req2 *)buff;
m_proxyreq2->Ver = 5;
m_proxyreq2->Cmd = 1;
m_proxyreq2->Rsv = 0;
m_proxyreq2->Atyp = 1;
m_proxyreq2->IPAddr = inet_addr(szHostAddress);
m_proxyreq2->Port = ntohs(nHostPort);
if( send( m_ConnectSocket, (const char*)buff, sizeof(sock5req2), 0 ) == SOCKET_ERROR )
{ closesocket(m_ConnectSocket);
return false;
}
sock5ans2 *m_proxyans2;
memset(buff,0,sizeof(buff));
m_proxyans2 = (sock5ans2 *)buff;
rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0);
if(rc == SOCKET_ERROR)
{ closesocket(m_ConnectSocket);
return false;
}
if(m_proxyans2->Ver != 5 || m_proxyans2->Rep != 0)
{ closesocket(m_ConnectSocket);
return false;
}
m_bOpen = true ;
return true;
}
int BaseSocket::Close()
{
m_bOpen = false ;
return closesocket(m_ConnectSocket) ;
}int BaseSocket::Send(const unsigned char* pBuf, const unsigned u32Len)
{
int ret = send(m_ConnectSocket, (const char*)pBuf, u32Len, 0) ;
if (ret <= 0)
{
#if DEBUG_DATA_OUT
LogSys::Instance().LOG_FILE("Send error : %d\r\n", WSAGetLastError()) ;
#endif
Close() ;
}
return ret ;
}int BaseSocket::Receive(unsigned char* pBuf, const unsigned u32Len)
{
int ret = recv(m_ConnectSocket, (char*)pBuf, u32Len, 0) ;
if (ret <= 0)
{
#if DEBUG_DATA_OUT
LogSys::Instance().LOG_FILE("Recv error : %d\r\n", WSAGetLastError()) ;
#endif
Close() ;
}
return ret ;
}
bool BaseSocket::GetIPBySocket( char* strIP )
{
struct sockaddr_in localAddr;
int namelen = sizeof( localAddr ); if( getsockname( m_ConnectSocket, (struct sockaddr *)&localAddr, &namelen ) == SOCKET_ERROR )
return false; memcpy(strIP,inet_ntoa((struct in_addr )localAddr.sin_addr),namelen);
return true;
}
bool BaseSocket::GetPortBySocket(unsigned short *port )
{
struct sockaddr_in localAddr;
int namelen = sizeof( localAddr ); if( getsockname( m_ConnectSocket, (struct sockaddr *)&localAddr, &namelen ) == SOCKET_ERROR )
return false;
*port = ntohs(localAddr.sin_port);
return true;
}