http代理和socks代理的实现有什么区别?

magicing 2009-06-10 10:26:38
我想实现一种纯数据转发程序,就是不管你发来什么数据给我,我都不处理,而是把它转发给另外一个客户端,等效是在两个客户端之间建立一个透明的数据通道,我目前已经实现了可以正常传输http的数据,原理大致是用一个server socket在一个端口监听,有了连接以后就accept,然后用一个char*的变量接受数据,然后就把这个数据转发到你想要的地址就可以了。在http代理中,这些char*的数据都是可见的,即使是https的我的程序也能正常工作,因为我只管原发原送,就跟你这两个客户端直接相连的一样,可是现在如果换成socks代理,接受到的数据似乎不对,只有一点点,我知道socks代理是比较底层的,那现在如果我要接受socks的数据然后转发该怎么做呢?似乎char*的变量是不能完全收到数据的,那应该用什么类型的才能实现socks的数据接收和转发呢?
...全文
276 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahao 2009-06-12
  • 打赏
  • 举报
回复
你就是想写http和socks代理服务器吧?
去看相应协议
na_he 2009-06-10
  • 打赏
  • 举报
回复
Char*难不成你传传送了个地址,概念不对,你可以将你传输的是字符才对,发送的是字符buffer,结束也要定义buffer来接收呀。
driverstudent 2009-06-10
  • 打赏
  • 举报
回复

up
Conry 2009-06-10
  • 打赏
  • 举报
回复
你这种做法应该跟协议没什么关系啊
跟字符可见不可见也没有关系
你接受数据到到char*,同时还有个长度
你再把char* 按这个长度发出去就行了

难道你的http协议的是根据strlen来判断数据长度?
Wenxy1 2009-06-10
  • 打赏
  • 举报
回复
http代理和socks代理的区别


SOCKS其实是一种网络代理协议。该协议所描述的是一种内部主机(使用私有ip地址)
通过SOCKS服务器获得完全的Internet访问的方法。具体说来是这样一个环境:用一台运行S
OCKS的服务器(双宿主主机)连接内部网和Internet,内部网主机使用的都是私有的ip地址
,内部网主机请求访问Internet时,首先和SOCKS服务器建立一个SOCKS通道,然后再将请求
通过这个通道发送给SOCKS服务器,SOCKS服务器在收到客户请求后,向客户请求的Internet
主机发出请求,得到相应后,SOCKS服务器再通过原先建立的SOCKS通道将数据返回给客户。
当然在建立SOCKS通道的过程中可能有一个用户认证的过程。

SOCKS和一般的应用层代理服务器完全不同。一般的应用层代理服务器工作在应
用层,并且针对不用的网络应用提供不同的处理方法,比如HTTP、FTP、SMTP等,这样,一旦
有新的网络应用出现时,应用层代理服务器就不能提供对该应用的代理,因此应用层代理服
务器的可扩展性并不好;与应用层代理服务器不同的是,SOCKS代理服务器旨在提供一种广义
的代理服务,它与具体的应用无关,不管再出现什么新的应用都能提供代理服务,因为SOCK
S代理工作再线路层(即应用层和传输层之间),这和单纯工作在网络层或传输层的ip欺骗(
或者叫做网络地址转换NAT)又有所不同,因为SOCKS不能提供网络层网关服务,比如ICMP包

socks4和socks5都属于socks协议,只是由于所支持的具体应用不同而存在差异。socks4代理只支持TCP应用,而socks5代理则可以支持TCP和UDP两种应用。不过由于socks5代理还支持各种身份验证机制,服务器端域名解析等,而socks4代理没有,所以通常对外开放的socks代理都是socks4代理,因此,UDP应用通常都不能被支持。也就是说,socks4能干的socks5都可以干,反过来就不行了。
Wenxy1 2009-06-10
  • 打赏
  • 举报
回复
http://zhidao.baidu.com/question/5539189.html?fr=qrl&fr2=query

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧