C++使用Socks5协议进行代理上网(一)

网上已经有很多文档详细介绍了协议内容以及怎么去使用,最近在做这个项目,已经完成了TCP协议的全部部分,在这里做下笔记顺便和大家分享下,如果有需要的同志们可以用我这个作为模板,已经精通这些的大神们希望看到问题能给我提出来,我也有几个地方是一知半解,其中有些我遇到的注意事项我会单独注明,防止自己后再犯同样的错误。。。
下面是协议第一部分代码(注意,和代理服务器的连接在这一部分已经完成,这里只贴出了关于通信协议的主要代码,C++中怎么样和代理服务器进行连接如果不了解的话,可以参考我的另一篇博客:https://blog.csdn.net/hu421160052/article/details/87262226)

	int index = 0;
	byte Msg1[100];

	//socks5协议部分(1.发送数据至服务器)
	//|--------|-------------|-------------|  
	//|  VER   |   NMETHOD   |   METHODS   |  
	//|--------|-------------|-------------|
	//|   1	   |	  1      |    1-255    |
	//|--------|-------------|-------------|
	//	VER是SOCKS版本,这里应该是0x05.
	//	NMETHODS是METHODS部分的长度.
	//  METHODS是客户端支持的认证方式列表,每个方法占1字节。当前的定义是: 
	//		0x00 不需要认证
	//		0x01 GSSAPI
	//		0x02 用户名、密码认证
	//		0x03 - 0x7F由IANA分配(保留)
	//		0x80 - 0xFE为私人方法保留
	//		0xFF 无可接受的方法

	Msg1[index++] = 0x05;	//Version 版本号
	Msg1[index++] = 0x01;	//Method 方法
	Msg1[index++] = 0x02;	//Username/Password 认证用户名/认证密码

	//第一次发送数据
	send(sockClient, (const char*)Msg1, index, 0);
	char Send_Msg[100];
	sprintf(Send_Msg, "VER:0x%d%d\r\n METHOD:0x%d%d\r\n Method:0x%d%d\r\n", (Msg1[0] / 16),(Msg1[0] % 16), (Msg1[1] / 16), (Msg1[1] % 16), (Msg1[2] / 16), (Msg1[2] % 16));
	MessageBoxA(NULL, (const char*)Send_Msg, "发送数据:", NULL);

	byte RecvMsg1[10];
	numl=recv(sockClient, (char*)RecvMsg1, sizeof((const char*)RecvMsg1), 0);
	int q00 = (RecvMsg1[0] / 16),q01= (RecvMsg1[0] % 16);
	int q10 = (RecvMsg1[1] / 16), q11 = (RecvMsg1[1] % 16);  
	char result[1024];
	
	//socks5协议部分(2.服务器响应数据)
	//|--------|-------------|
	//|  VER   |   METHOD    |
	//|--------|-------------|
	//|   1	   |	 1       |
	//|--------|-------------|
	//VER是SOCKS版本,这里应该是0x05;
	//METHOD是服务端选中的方法。如果返回0xFF表示没有一个认证方法被选中,客户端需要关闭连接。

	sprintf(result,"Length:%d\r\n VER:0x%d%d\r\nMETHOD:0x%d%d\r\n", numl,q00,q01,q10,q11);
	MessageBoxA(NULL, result, "服务器返回结果:", NULL);

C++使用Socks5协议进行代理上网(一)_第1张图片
C++使用Socks5协议进行代理上网(一)_第2张图片
在这里,接受完数据后,socks5第一部分协议内容就算完成了,因为我选择的是账号密码认证方式,也只给服务器发送了那种连接方式,所以服务器最后返回我了一个5和2,如果是没有账号密码的认证方式,可以仔细看下协议内容这一部分是怎么发送消息。
下面是第二部分:
https://blog.csdn.net/hu421160052/article/details/88870940

你可能感兴趣的:(c++,网络编程)