我写的只支持tcp的connect方法的简单Socks5 proxy的问题
我前些时候,过年那段时间开始写个简单的socks5代理,空余时间慢慢做完了。但是测试的时候遇到一些bug,很多网页显示不全,显示一半就停止了,不知道是哪里不对。代码如下,一个头文件,一个cpp文件:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Socks5代理头文件,定义协议相关数据包结构
// 版本 0.1,作者 云舒
// 2007年1月9日凌晨1点15分,GF回家已经11天了。
//
// 参考:
// http://www.rfc-editor.org/rfc/rfc1928.txt
// http://www.rfc-editor.org/rfc/rfc1929.txt
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef SOCKS5_H
#define SOCKS5_H
#define VERSION 0x05 // 代理协议版本
#define CONNECT 0x01 // connect方法
#define IPV4 0x01
#define DOMAIN 0x03
#define IPV6 0x04
typedef struct _method_select_response // 协商方法服务器响应
{
char version; // 服务器支持的Socks版本,0x04或者0x05
unsigned char select_method; // 服务器选择的方法,0x00为匿名,0x02为密码认证
} METHOD_SELECT_RESPONSE;
typedef struct _method_select_request // 协商方法服务端请求
{
char version; // 客户端支持的版本,0x04或者0x05
char number_methods; // 客户端支持的方法的数量
char methods[255]; // 客户端支持的方法类型,最多255个,0x00为匿名,0x02为密码认证
} METHOD_SELECT_REQUEST;
typedef struct _AUTH_RESPONSE // 用户密码认证服务端响应
{
char version; // 版本,此处恒定为0x01
char result; // 服务端认证结果,0x00为成功,其他均为失败
} AUTH_RESPONSE;
typedef struct _AUTH_REQUEST // 用户密码认证客户端请求
{
char version; // 版本,此处恒定为0x01
char name_len; // 第三个字段用户名的长度,一个字节,最长为0xff
char name[255]; // 用户名
char pwd_len; // 第四个字段密码的长度,一个字节,最长为0xff
char pwd[255]; // 密码
} AUTH_REQUEST;
typedef struct _SOCKS5_RESPONSE // 连接真实主机,Socks代理服务器响应
{
char version; // 服务器支持的Socks版本,0x04或者0x05
char reply; // 代理服务器连接真实主机的结果,0x00成功
char reserved; // 保留位,恒定位0x00
char address_type; // Socks代理服务器绑定的地址类型,IP V4为0x00,IP V6为0x04,域名 //为0x03
char address_port[1]; // 如果address_type为域名,此处第一字节为域名长度,其后为域名本 //身,无0字符结尾
}SOCKS5_RESPONSE; // 身,域名后为Socks代理服务器绑定端口
typedef struct _SOCKS5_REQUEST // 客户端请求连接真实主机
{
char version; // 客户端支持的Socks版本,0x04或者0x05
char cmd; // 客户端命令,CONNECT为0x01,BIND为0x02,UDP为0x03,一般为0x01
char reserved; // 保留位,恒定位0x00
char address_type; // 客户端请求的真实主机的地址类型,IP V4为0x00,IP V6为0x04,域名 //为0x03
char address_port[1]; // 如果address_type为域名,此处第一字节为域名长度,其后为域名本 //身,无0字符结尾
}SOCKS5_REQUEST; // 身,域名后为真实主机绑定端口
#endif
...全文
相关推荐
proxysocket:可移植的C库,用于使用标准SOCKET支持代理客户端。-开源
跨平台的C库,可使用代理建立TCP连接。 支持不同的连接方法:-无代理(可选地允许绑定到本地地址和/或端口)-HTTP代理:仅CONNECT方法,仅不具有身份验证或基本身份验证-SOCKS4:不具有IDENT功能-SOCKS5(RFC 1928):仅不带身份验证或用户名/密码的功能:-当前仅支持IPv4 TCP连接。 -返回标准操作系统SOCKET,可以通过诸如send()和recv()之类的标准操作系统函数来操纵该SOCKET。 -支持菊花链多个代理。 -也可以用于直接连接(不带代理),可以选择绑定到本地地址和/或端口。
Python袜子
Python袜子
代理服务器基础知识
详细介绍了代理服务器的工作原理、分类和使用。
squid 多ip出口认证
squid 多ip出口openssl认证一步一步命令很相信不会有错,我从一个菜鸟搭配好的
代理服务器
服务器基础应用, 代理服务器的基础知识



