ATLVisual C++ 7.1Visual C++ 8.0COMVisual C++ 7.0Windows 2003Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
Socks 包装器






1.88/5 (9投票s)
2005年1月19日
1分钟阅读

80281

4298
通过 Socks 代理版本 4 和版本 5 建立套接字。
引言
什么是 Socks 包装器?
Socks 组件/包装器是一个 C++ 类,可帮助通过 Socks 代理为基于 TCP 的客户端建立套接字连接。
它有什么用?
此包装器可用于在 Socks 代理后建立套接字连接。它支持 Socks 版本 4.0 和版本 5.0。它支持通过防火墙的 TCP 代理。
它解决的问题
Socks 在防火墙主机上中继 TCP 会话,以便允许应用程序用户透明地跨防火墙访问。这可用于许多不同的服务,例如 telnet、FTP、finger、whois、gopher、WWW 等。可以在每个 TCP 会话开始时应用访问控制;此后,服务器只需在客户端和应用程序服务器之间中继数据,从而产生最小的处理开销。它还应该易于适应使用加密来保护其流量免受窥探的应用程序。
包装类
class CSocks
{
public:
CSocks();
~CSocks();
CSocks(char *in_szSocksAddress, int in_ScoksPort,
char *in_szDestinationAddress , int in_DestinationPort);
//Set Methods
void SetSocksPort(int in_Port);
void SetDestinationPort(int in_Port);
void SetSocksAddress(char *in_szSocksAddress);
void SetDestinationAddress(char *in_szDestinationAddress);
int Connect();
void SetVersion(int in_Version);
void SetUserName(char* in_szUserName);
void SetPassword(char* in_szPassword);
void SetSocksInterval(int in_MilliSeconds);
//Get Methods
char *GetUserName();
char *GetPassword();
int GetVersion();
char *GetLastErrorMessage();
private:
int ConnectToSocksFour( SOCKET in_Socket,
const struct sockaddr FAR *in_szName,
int nameLen,
const struct sockaddr FAR *in_Socks,
int socksLen,
const char *szUserId );
int ConnectToSocksFive( SOCKET in_Socket,
const struct sockaddr FAR *in_szName,
int nameLen,
const struct sockaddr FAR *in_Socks,
int socksLen,
const char *szUserId );
int InitiateSocket();
// Member Variables
public :
BOOL m_Authentication;
int m_Interval;
BOOL m_IsError;
private:
int m_Version;
int m_Socket;
int m_SocksPort;
int m_DestinationPort;
char m_SocksAddress[25];
char m_DesitnationAddress[25];
char m_UserName[100];
char m_Password[100];
char m_szErrorMessage[255];
};
参考
- RFC:SOCKS5 访问:RFC 1928 (RFC1928)
Using the Code
本文可以在任何支持 Socks 协议的基于 TCP 的客户端应用程序中使用。在 C++ 应用程序中,您可以简单地将 Socks.h 文件和 Socks.cpp 文件附加到您的项目/解决方案中。您可以按如下方式实现它
CSocks cs;
Socket socketId;
cs.SetVersion(SOCKS_VER4);
cs.SetSocksPort(1080);
cs.SetDestinationPort(1001);
cs.SetDestinationAddress("128.0.0.1");
cs.SetSocksAddress("192.0.0.1");
//cs.SetVersion(SOCKS_VER5); // If you want to connecto Ver 5.0
//cs.SetSocksAddress("192.0.0.1");
socketId = cs.Connect();
// if failed
if (cs.m_IsError)
{
printf( "\n%s", cs.GetLastErrorMessage());
getch();
return 0;
}
// send packet for requesting to a server
if(socketId > 0)
{
// you can continue with your application
}
else
{
//Socks Server / Destination Server not started..
}
closesocket(socketId);
历史
- 2005 年 1 月 19 日:初始版本
许可证
本文没有明确的许可证附加到它,但可能包含文章文本或下载文件本身中的使用条款。如有疑问,请通过下面的讨论区联系作者。作者可能使用的许可证列表可以在 此处 找到。