socks5 代理可以看 rfc 1928
socks5 的用户名口令认证方法看 rfc 1929
http 代理可以看 rfc2616
socks5 代理可以支持 tcp 和 udp 而 http 只支持 tcp
所以这个代理转换器只支持 tcp
写作原因
很多软件都有 socks5 认证方法 但是它们不支持 http 认证方法
而从原理上可以使用 http 认证方法(因为它们没有使用 udp)
所以写这个软件可以方便的使其它程序可以使用 http 代理
如联众 或是 foxmail
CODE
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#define
INIT_SOCKET(){WSADATA wsadata;WSAStartup(MAKEWORD(2,2),&wsadata)
;}
#define CLOSESOCKET(x) closesocket(x)
#define CLEAN_SOCKET() {WSACleanup();}
// http.c 实现 http 代理功能
#define PROTO_EXCHANGE_TIMEOUT 15
#define PROTO_RECVRESP_TIMEOUT 75
#define PROTO_SENDRESP_TIMEOUT 10
#define WAIT_AND_RECV(sd,buf,len,waittime,recvflags) do{\
struct fd_set sset;\
struct timeval waited;\
waited.tv_sec = waittime;waited.tv_usec = 0;\
FD_ZERO(&sset);FD_SET(sd,&sset);\
if(select(sd+1,&sset,NULL,NULL,&waited) != 1 || (len = recv(sd,buf,len,recvflags))
== -1 )\
len = -1;\
}while(0);
#define DEBUG_DUMP printf
static int httpproxy_connect(const char*proxyaddr,int proxyport,
const char*dstaddr,int dstport)
{
int proxysd = -1;
char buf[2048];
int len;
char *ptoken;
int status;
评论0