快速业务通道

Linux平台socks5代理

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-21

导读:
  前几天MSN老上不去,我还以为是公司做了防火墙限制.于是把去年这个时候写得一个代理程序改了改,拿出来用.结果发现MSN是微软的问题,鄙视啊……
  写得比较急,这个只支持TCP代理,UDP的我没写,MSN用不上.这个代码可以随意修改分发,不过最好能给我一份.
  这是头文件:

  1.   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2.   // Socks5代理头文件,定义协议相关数据包结构
  3.   // 版本 0.1,作者 云舒
  4.   // 2007年1月9日凌晨1点15分,GF回家已经11天了.
  5.   // 2008年1月25日修改,今年GF一直在我身边,哈哈
  6.   //
  7.   // 参考:
  8.   // http://www.rfc-editor.org/rfc/rfc1928.txt
  9.   // http://www.rfc-editor.org/rfc/rfc1929.txt
  10.   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  11.   #ifndef SOCKS5_H
  12.   #define SOCKS5_H
  13.   #define VERSION 0x05
  14.   #define CONNECT 0x01
  15.   #define IPV4 0x01
  16.   #define DOMAIN 0x03
  17.   #define IPV6 0x04
  18.   typedef struct _method_select_response // 协商方法服务器响应
  19.   {
  20.   char version; // 服务器支持的Socks版本,0x04或者0x05
  21.   char select_method;// 服务器选择的方法,0x00为匿名,0x02为密码认证
  22.   } METHOD_SELECT_RESPONSE;
  23.   typedef struct _method_select_request // 协商方法服务端请求
  24.   {
  25.   char version; // 客户端支持的版本,0x04或者0x05
  26.   char number_methods; // 客户端支持的方法的数量
  27.   char methods[255]; // 客户端支持的方法类型,最多255个,0x00为匿名,0x02为密码认证
  28.   } METHOD_SELECT_REQUEST;
  29.   typedef struct _AUTH_RESPONSE // 用户密码认证服务端响应
  30.   {
  31.   char version;// 版本,此处恒定为0x01
  32.   char result;// 服务端认证结果,0x00为成功,其他均为失败
  33.   } AUTH_RESPONSE;
  34.   typedef struct _AUTH_REQUEST //用户密码认证客户端请求
  35.   {
  36.   char version; // 版本,此处恒定为0x01
  37.   char name_len; // 第三个字段用户名的长度,一个字节,最长为0xff
  38.   char name[255]; // 用户名
  39.   char pwd_len;// 第四个字段密码的长度,一个字节,最长为0xff
  40.   char pwd[255]; // 密码
  41.   } AUTH_REQUEST;
  42.   typedef struct _SOCKS5_RESPONSE // 连接真实主机,Socks代理服务器响应
  43.   {
  44.   char version; // 服务器支持的Socks版本,0x04或者0x05
  45.   char reply; // 代理服务器连接真实主机的结果,0x00成功
  46.   char reserved; // 保留位,恒定位0x00
  47.   char address_type; // Socks代理服务器绑定的地址类型,IP V4为0x01,IP V6为0x04,域名为0x03
  48.   char address_port[1]; // 如果address_type为域名,此处第一字节为域名长度,其后为域名本身,无0字符结尾,域名后为Socks代理服务器绑定端口
  49.   }SOCKS5_RESPONSE;
  50.   typedef struct _SOCKS5_REQUEST // 客户端请求连接真实主机
  51.   {
  52.   char version; // 客户端支持的Socks版本,0x04或者0x05
  53.   char cmd; // 客户端命令,CONNECT为0x01,BIND为0x02,UDP为0x03,一般为0x01
  54.   char reserved; // 保留位,恒定位0x00
  55.   char address_type; // 客户端请求的真实主机的地址类型,IP V4为0x00,IP V6为0x04,域名为 0x03 char address_port[1]; // 如果address_type为域名,此处第一字节为域名长度,其后为域名本身,无0字符结尾,域名后为真实主机绑定端口
  56.   }SOCKS5_REQUEST;
  57.   #endif
  58.   主程序来了:
  59.   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  60.   // Socks5程序,只支持TCP代理
  61.   // 版本 0.1,作者 云舒
  62.   // 2007年1月9日凌晨1点15分,GF回家已经11天了.
  63.   // 2008年1月25日修改,今年GF一直在我身边,哈哈
  64.   //
  65.   // 参考:
  66.   // http://www.rfc-editor.org/rfc/rfc1928.txt
  67.   // http://www.rfc-editor.org/rfc/rfc1929.txt
  68.   //编译:
  69.   // gcc -o socks5 -O2 Socks5.c -lpthread( RedHat AS5测试 )
  70.   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  71.   #include
  72.   #include
  73.   #include
  74.   #include
  75.   #include
  76.   #include
  77.   #include
  78.   #include
  79.   #include
  80.   #include
  81.   #include
  82.   #include
  83.   #include
  84.   #include "Socks5.h"
  85.   #define MAX_USER 10
  86.   #define BUFF_SIZE 1024
  87.   #define AUTH_CODE 0x02
  88.   #define TIME_OUT 6000000
  89.   #define USER_NAME "yunshu"
  90.   #define PASS_WORD "ph4nt0m"
  91.   // Select auth method, return 0 if success, -1 if failed
  92.   int SelectMethod( int sock )
  93.   {
  94.   char recv_buffer[BUFF_SIZE] = { 0 };
  95.   char reply_buffer[2] = { 0 };
  96.   METHOD_SELECT_REQUEST *method_request;
  97.   METHOD_SELECT_RESPONSE *method_response;
  98.   
  99.   // recv METHOD_SELECT_REQUEST
  100.   int ret = recv( sock, recv_buffer, BUFF_SIZE, 0 );
  101.   if( ret <= 0 )
  102.   {
  103.   pthread_detach( work_thread );
  104.   }
  105.   }
  106.   }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号