linuxsocks5:Linux平台socks5代理来源: 发布时间:星期六, 2009年9月12日 浏览:61次 评论:0
by 云舒
2008-1-25 http://www.ph4nt0m.org 前几天MSN老上不去我还以为是公司做了防火墙限制于是把去年这个时候写得个代理改了改拿出来用结果发现MSN是微软问题鄙视啊…… 写得比较急这个只支持TCP代理UDP我没写MSN用不上这个代码可以随意修改分发不过最好能给我份 这是头文件: /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Socks5代理头文件定义协议相关数据包结构 // 版本 0.1作者 云舒 // 2007年1月9日凌晨1点15分GF回家已经11天了 // 2008年1月25日修改今年GF直在我身边哈哈 // // 参考: // http://www.rfc-editor.org/rfc/rfc1928.txt // http://www.rfc-editor.org/rfc/rfc1929.txt /////////////////////////////////////////////////////////////////////////////////////////////////////////////// #ndef SOCKS5_H # SOCKS5_H # VERSION 0x05 # CONNECT 0x01 # IPV4 0x01 # DOMAIN 0x03 # IPV6 0x04 typedef struct _method_select_response // 协商思路方法服务器响应 { char version; // 服务器支持Socks版本0x04或者0x05 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; // 第 3个字段用户名长度个字节最长为0xff char name[255]; // 用户名 char pwd_len;// 第 4个字段密码长度个字节最长为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为0x01,IP V6为0x04域名为0x03 char address_port[1]; // 如果address_type为域名此处第字节为域名长度其后为域名本身无0结尾,域名后为Socks代理服务器绑定端口 }SOCKS5_RESPONSE; typedef struct _SOCKS5_REQUEST // 客户端请求连接真实主机 { char version; // 客户端支持Socks版本0x04或者0x05 char cmd; // 客户端命令CONNECT为0x01BIND为0x02UDP为0x03般为0x01 char reserved; // 保留位恒定位0x00 char address_type; // 客户端请求真实主机地址类型IP V4为0x00,IP V6为0x04域名为 0x03 char address_port[1]; // 如果address_type为域名此处第字节为域名长度其后为域名本身无0结尾,域名后为真实主机绑定端口 }SOCKS5_REQUEST; #end 主来了: /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Socks5只支持TCP代理 // 版本 0.1作者 云舒 // 2007年1月9日凌晨1点15分GF回家已经11天了 // 2008年1月25日修改今年GF直在我身边哈哈 // // 参考: // http://www.rfc-editor.org/rfc/rfc1928.txt // http://www.rfc-editor.org/rfc/rfc1929.txt //编译: // gcc -o socks5 -O2 Socks5.c -lpthread( RedHat AS5测试 ) /////////////////////////////////////////////////////////////////////////////////////////////////////////////// # <stdio.h> # <netinet/in.h> # <netdb.h> # <sys/time.h> # <sys/types.h> # <unistd.h> # <stdlib.h> # <signal.h> # <pthread.h> # <errno.h> # <.h> # <sys/.h> # <arpa/inet.h> # "Socks5.h" # MAX_USER 10 # BUFF_SIZE 1024 # AUTH_CODE 0x02 # TIME_OUT 6000000 # USER_NAME "yunshu" # PASS_WORD "ph4nt0m" // Select auth method, 0 success, -1 failed SelectMethod( sock ) { char recv_buffer[BUFF_SIZE] = { 0 }; char reply_buffer[2] = { 0 }; METHOD_SELECT_REQUEST *method_request; METHOD_SELECT_RESPONSE *method_response; // recv METHOD_SELECT_REQUEST ret = recv( sock, recv_buffer, BUFF_SIZE, 0 ); ( ret <= 0 ) { perror( "recv error" ); close( sock ); -1; } 0
相关文章读者评论发表评论 |