社区
网络编程
帖子详情
急!!!来者有分! 直接使用socket访问一个HTTP服务器上的一个Web Page, 如何使用SOCKS代理呀
huang_yi_cn
2005-05-23 01:07:27
我手上的代码直接使用socket, 不使用WinINet API访问一个URL, GET一个Page, 可以使用HTTP代理, 但是却不能使用SOCKS代理. 请问, 要使用SOCKS代理有什么不同呢, 要如何做呢?
谢谢!
...全文
255
11
打赏
收藏
急!!!来者有分! 直接使用socket访问一个HTTP服务器上的一个Web Page, 如何使用SOCKS代理呀
我手上的代码直接使用socket, 不使用WinINet API访问一个URL, GET一个Page, 可以使用HTTP代理, 但是却不能使用SOCKS代理. 请问, 要使用SOCKS代理有什么不同呢, 要如何做呢? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sct
2005-08-24
打赏
举报
回复
关注
goodboyws
2005-06-10
打赏
举报
回复
gz
fisker0303
2005-06-10
打赏
举报
回复
我认为,使用socks代理也是可以实现的。
但你的程序就不能使用专门用与http协议或与http协议密切相关的函数了。
http是一个tcp协议的上层应用层协议,socks的原理很简单,你连接socks,socks再去连接web server,然后把GET/POST的请求结果返回给你。
因为你的程序可能向socks发送的不是普通的TCP请求,而是特别的http请求,所以失败了。
myhaocat
2005-05-24
打赏
举报
回复
up
zhangjinlin218
2005-05-24
打赏
举报
回复
up
一起努力
zhangjinlin218
2005-05-24
打赏
举报
回复
up
一起努力
indexroot
2005-05-24
打赏
举报
回复
up
继续努力
etre
2005-05-23
打赏
举报
回复
在网络程序设计过程中,我们经常要与各种类型的代理服务器打交道,比如在企业内部网通过代理去访问Internet网上的服务器等等,一般代理服务器支持几种常见的代理协议标准,如Socks4,Socks5,Http代理,其中Socks5需要用户验证,代理相对复杂。我在查阅RFC文档和相关资料后,特总结一些TCP协议穿透代理服务器的程序片断,希望对大家有所帮助。
//使用到的结构
struct sock4req1
{
char VN;
char CD;
unsigned short Port;
unsigned long IPAddr;
char other[1];
};
struct sock4ans1
{
char VN;
char CD;
};
struct sock5req1
{
char Ver;
char nMethods;
char Methods[255];
};
struct sock5ans1
{
char Ver;
char Method;
};
struct sock5req2
{
char Ver;
char Cmd;
char Rsv;
char Atyp;
char other[1];
};
struct sock5ans2
{
char Ver;
char Rep;
char Rsv;
char Atyp;
char other[1];
};
struct authreq
{
char Ver;
char Ulen;
char Name[255];
char PLen;
char Pass[255];
};
struct authans
{
char Ver;
char Status;
};
//通过Socks4方式代理
if( !ClientSock.Connect( g_ProxyInfo.m_strProxyIP,g_ProxyInfo.m_nProxyPort) )
{
m_sError = _T("不能连接到代理服务器!");
ClientSock.Close();
return FALSE;
}
char buff[100];
memset(buff,0,100);
struct sock4req1 *m_proxyreq;
m_proxyreq = (struct sock4req1 *)buff;
m_proxyreq->VN = 4;
m_proxyreq->CD = 1;
m_proxyreq->Port = ntohs(GetPort());
m_proxyreq->IPAddr = inet_addr(GetServerHostName());
ClientSock.Send(buff,9);
struct sock4ans1 *m_proxyans;
m_proxyans = (struct sock4ans1 *)buff;
memset(buff,0,100);
ClientSock.Receive(buff,100);
if(m_proxyans->VN != 0 || m_proxyans->CD != 90)
{
m_sError = _T("通过代理连接主站不成功!");
ClientSock.Close();
return FALSE;
}
//通过Socks5方式代理
if( !ClientSock.Connect( g_ProxyInfo.m_strProxyIP,g_ProxyInfo.m_nProxyPort) )
{
m_sError = _T("不能连接到代理服务器!");
ClientSock.Close();
return FALSE;
}
char buff[600];
struct sock5req1 *m_proxyreq1;
m_proxyreq1 = (struct sock5req1 *)buff;
m_proxyreq1->Ver = 5;
m_proxyreq1->nMethods = 2;
m_proxyreq1->Methods[0] = 0;
m_proxyreq1->Methods[1] = 2;
ClientSock.Send(buff,4);
struct sock5ans1 *m_proxyans1;
m_proxyans1 = (struct sock5ans1 *)buff;
memset(buff,0,600);
ClientSock.Receive(buff,600);
if(m_proxyans1->Ver != 5 || (m_proxyans1->Method!=0 && m_proxyans1->Method!=2))
{
m_sError = _T("通过代理连接主站不成功!");
ClientSock.Close();
return FALSE;
}
if(m_proxyans1->Method == 2)
{
int nUserLen = strlen(g_ProxyInfo.m_strProxyUser);
int nPassLen = strlen(g_ProxyInfo.m_strProxyPass);
struct authreq *m_authreq;
m_authreq = (struct authreq *)buff;
m_authreq->Ver = 1;
m_authreq->Ulen = nUserLen;
strcpy(m_authreq->Name,g_ProxyInfo.m_strProxyUser);
m_authreq->PLen = nPassLen;
strcpy(m_authreq->Pass,g_ProxyInfo.m_strProxyPass);
ClientSock.Send(buff,513);
struct authans *m_authans;
m_authans = (struct authans *)buff;
memset(buff,0,600);
ClientSock.Receive(buff,600);
if(m_authans->Ver != 1 || m_authans->Status != 0)
{
m_sError = _T("代理服务器用户验证不成功!");
ClientSock.Close();
return FALSE;
}
}
struct sock5req2 *m_proxyreq2;
m_proxyreq2 = (struct sock5req2 *)buff;
m_proxyreq2->Ver = 5;
m_proxyreq2->Cmd = 1;
m_proxyreq2->Rsv = 0;
m_proxyreq2->Atyp = 1;
unsigned long tmpLong = inet_addr(GetServerHostName());
unsigned short port = ntohs(GetPort());
memcpy(m_proxyreq2->other,&tmpLong,4);
memcpy(m_proxyreq2->other+4,&port,2);
ClientSock.Send(buff,sizeof(struct sock5req2)+5);
struct sock5ans2 *m_proxyans2;
memset(buff,0,600);
m_proxyans2 = (struct sock5ans2 *)buff;
ClientSock.Receive(buff,600);
if(m_proxyans2->Ver != 5 || m_proxyans2->Rep != 0)
{
m_sError = _T("通过代理连接主站不成功!");
ClientSock.Close();
return FALSE;
}
//通过HTTP方式代理
if( !ClientSock.Connect( g_ProxyInfo.m_strProxyIP,g_ProxyInfo.m_nProxyPort) )
{
m_sError = _T("不能连接到代理服务器!");
ClientSock.Close();
return FALSE;
}
char buff[600];
sprintf( buff, "%s%s:%d%s","CONNECT ",GetServerHostName(),GetPort()," HTTP/1.1\r\nUser-Agent: MyApp/0.1\r\n\r\n");
ClientSock.Send(buff,strlen(buff)); //发送请求
memset(buff,0,600);
ClientSock.Receive(buff,600);
if(strstr(buff, "HTTP/1.0 200 Connection established") == NULL) //连接不成功
{
m_sError = _T("通过代理连接主站不成功!");
ClientSock.Close();
return FALSE;
}
etre
2005-05-23
打赏
举报
回复
支持https的代理就可以啊
shicheng521
2005-05-23
打赏
举报
回复
没有做过,
up
dongfa
2005-05-23
打赏
举报
回复
先看看解释吧
什么是HTTP代理:www对于每一个上网的人都再熟悉不过了,www连接请求就是采用的http协议,所以我们在浏览网页,下载数据(也可采用ftp协议)是就是用http代理。它通常绑定在代理服务器的80、3128、8080等端口上。
什么是socks代理:相应的,采用socks协议的代理服务器就是SOCKS服务器。是一种通用的代理服务器。Socks是个电路级的底层网关,是DavidKoblas在1990年开发的,此后就一直作为Internet RFC标准的开放标准。Socks 不要求应用程序遵循特定的操作系统平台,Socks 代理与应用层代理、 HTTP 层代理不同,Socks 代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)。所以,Socks代理比其他应用层代理要快得多。它通常绑定在代理服务器的1080端口上。
如果您在企业网或校园网上,需要透过防火墙或通过代理服务器访问 Internet就可能需要使用SOCKS。一般情况下,对于拨号上网用户都不需要使用它。注意,浏览网页时常用的代理服务器通常是专门的http代理,它和SOCKS是不同的。因此,您能浏览网页不等于 您一定可以通过SOCKS访问Internet。 常用的防火墙,或代理软件都支持SOCKS,但需要其管理员打开这一功能。如果您不确信您是否需要SOCKS或是否有SOCKS可用,请与您的网络管理员联系。为了使用socks,您需要了解一下内容:
① SOCKS服务器的IP地址
② SOCKS服务所在的端口
③ 这个SOCKS服务是否需要用户认证?如果需要,您要向您的网络管理员申请一个用户和口令
知道了上述信息,您就可以把这些信息填入“网络配置”中,或者在第一次登记时填入,您就可以使用socks代理了。
在实际应用中SOCKS代理可以用作为:电子邮件、新闻组软件、网络传呼ICQ、网络聊天MIRC和各种游戏应用软件当中。
使用
socks
5实现简易
代理
服务器
SOCKS
5 是
一个
代理
协议,它在
使用
TCP/IP协议通讯的前端机器和
服务器
机器之间扮演
一个
中介角色,使得内部网中的前端机器变得能够
访问
Internet网中的
服务器
,或者使通讯更加安全。
SOCKS
5
服务器
通过将前端发来的请求...
netty系列之:从零到壹,搭建
一个
SOCKS
代理
服务器
文章目录简介
使用
SSH搭建
SOCKS
服务器
...有了
SOCKS
消息的封装之后,我们还需要做些什么工作才能搭建
一个
SOCKS
服务器
呢?
使用
SSH搭建
SOCKS
服务器
其实最简单的办法就是
使用
SSH工具来建立
SOCKS
代理
服务器
。 先看下SSH建立
iOS
使用
socks
5
代理
服务器
iOS
使用
socks
5
代理
服务器
本文关键词:
socks
5
代理
,
socks
5
代理
服务器
借由着苹果公司发布春节新品发布会的空挡,我们今天就捞点干货,说点和苹果有关系的主题,咱们就说说IOS配合其他工具的相关
使用
说到这,我们就...
ios设备
使用
socks
代理
_iOS
使用
socks
5
代理
服务器
iOS
使用
socks
5
代理
服务器
本文关键词:
socks
5
代理
,
socks
5
代理
服务器
借由着苹果公司发布春节新品发布会的空挡,我们今天就捞点干货,说点和苹果有关系的主题,咱们就说说IOS配合其他工具的相关
使用
说到这,我们就先...
ios设备
使用
socks
代理
_iOS
使用
socks
5
代理
服务器
说点和苹果有关系的主题,咱们就说说IOS配合其他工具的相关
使用
说到这,我们就先说说咱现在要提的ios配合的工具是啥,那就是我们接下来要说到的
socks
5
代理
那么啥是
socks
5
代理
,来我们简单说说
socks
5
代理
采用
socks
...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章