socks代理

之前的一篇文章,介绍代理服务器  http://lingdandan.blog.51cto.com/10697032/1773489

SOCKS是一种网络传输协议(位于会话层),主要用于客户端与外网服务器之间通讯的中间传递。

当防火墙后的客户端要访问外部的服务器时,就跟SOCKS代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。

Socks不要求应用程序遵循特定的操作系统平台,Socks 代理与应用层代理、 HTTP 层代理不同,Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)。所以,Socks代理比其他应用层代理要快得多。它通常绑定在代理服务器的1080端口上。

为了使用socks,需要了解以下内容:
① SOCKS服务器的IP地址
② SOCKS服务所在的端口
③ 这个SOCKS服务是否需要用户认证?如果需要,您要向您的网络管理员申请一个用户和口令

墙:GFW

    DNS劫持(google ...)

    IP地址黑名单

    基于内容拦截

翻墙

   是指绕过相应的IP封锁、内容过滤、域名劫持、流量限制等,实现对网络内容的访问。

利用网络防火墙可以将组织内部的网络结构从外部网络中有效地隔离。

在实际应用中还需要一种安全的认证方式用以穿越防火墙。这个要求起源于 两个组织的网络中客户/服务 器关系的出现,这个关系需要得到控制并要求有安全的认证。

这个协议从概念上来讲是介于 应用层和传输层 之间的“中介层”。

基于TCP协议的客户 

当一个基于TCP 协议的客户端希望与一个只能通过防火墙可以到达的目标(这是由实现所决定的)建立连接,它必须先建立一个与SOCKS 服务器上SOCKS 端口的TCP 连接。通常这个TCP 端口是1080。当连接建立后,客户端进入协议的“握手(negotiation)”过程:认证方式的选择,根据选中的方式进行认证,然后发送转发的要求。SOCKS 服务器检查 这个要求,根据结果,或建立合适的连接,或拒绝。

除非特别注明,所有出现在数据包格式图中的十进制数字均以字节表示相应域的长度。

1、客户端连到服务器后,然后就发送请求来协商版本和认证方法:

        VER     NMETHODS     METHODS 

          1        1       1 to 255 

这个版本的SOCKS 协议中,VER 字段被设置成X‘05‘。NMETHODS 字段包含了在METHODS字段中出现的   方法标示的数目(以字节为单位)(客户端可以指定多个方法组成一个方法列表供服务器端选择,这   里的NMETHODS 代表方法个数)。

2、服务器从这些给定的方法中选择一个并发送一个方法选中的消息回客户端:

 VER    METHOD 

           1       1 

如果选中的消息是X’FF’,这表示客户端所列出的方法列表中没有一个方法被选中,客户端必须关    闭连接。当前定义的方法有:

X’00’       不需要认证

X’01’       GSSAPI

X’02’      用户名/密码

X’03’-- X’7F’ 由IANA 分配

X’80’-- X’FE’ 为私人方法所保留的

X’FF’       没有可以接受的方法

3、然后客户和服务器进入由选定认证方法所决定的子协商过程。

4、请求

一旦子协商过程结束后,客户端就发送详细的请求信息。

如果协商的方法中有以完整性检查 和/或安全性为目的的封装,这些请求必须按照该方法所定义的   方式进行封装。

SOCKS 请求的格式如下:

VER    CMD    RSV    ATYP    DST.ADDR    DST.PROT 

1      1   X’00’   1      Variable      2

VER  协议版本: X’05’

CMD

CONNECT:X’01’

BIND:X’02’

UDP ASSOCIATE:X’03’

RSV 保留

ATYP 后面的地址类型

IPV4:X’01’

域名:X’03’

IPV6:X’04’

DST.ADDR 目的地址

DST.PORT 以网络字节顺序出现的端口号

SOCKS 服务器会根据源地址和目的地址来分析请求,然后根据请求类型返回一个或多个应答。

ATYP 字段中描述了地址字段(DST.ADDR,BND.ADDR)所包含的地址类型:

X‘01‘ 基于IPV4 的IP 地址,4 个字节长

X‘03‘ 基于域名的地址,地址字段中的第一字节是以字节为单位的该域名的长度,没有结尾的NUL字节

X‘04‘ 基于IPV6 的IP 地址,16 个字节长

5、应答

一旦建立了一个到SOCKS 服务器的连接,并且完成了认证方式的协商过程,客户机将会发送一个SOCKS 请求信息给服务器。服务器将会根据请求,以如下格式返回:

       VER   REP   RSV   ATYP   BND.ADDR   BND.PORT 

        1    1   X’00’  1    Variable    2 

 VER 协议版本: X’05’

REP 应答字段:

X’00’ 成功

X’01’ 普通的 SOCKS 服务器请求失败

X’02’ 现有的规则不允许的连接

X’03’ 网络不可达

X’04’ 主机不可达

X’05’ 连接被拒

X’06’ TTL 超时

X’07’ 不支持的命令

X’08’ 不支持的地址类型

X’09’ – X’FF’ 未定义

RSV 保留

ATYP 后面的地址类型

IPV4:X’01’

域名:X’03’

IPV6:X’04’

BND.ADDR 服务器绑定的地址

BND.PORT 以网络字节顺序表示的服务器绑定的段口

标识为RSV 的字段必须设为X’00’

如果选中的方法中有以完整性检查和/或安全性为目的的封装,这些应答必须按照该方法所定义的方式进行封装。

《完》

时间: 2024-08-26 10:15:40

socks代理的相关文章

BadVPN详解之--始记:透明socks代理与tun2socks

上周六晚上闲来无事跟以前的同事聊天,问之最近有没有接触到什么比较好玩的技术,答曰tun2socks.这个正合我的胃口,我所谓的好玩的技术是那种简单,有用的技术点或者技术框架,能在10分钟内领略其原理和思想,能在20分钟内跑起来,能在半天内彻底剖析它的结构,能在此后很久的时间受益无穷.OpenVPN就是这样的"好玩"的东西,网卡点灯也算,tun2socks是另一个,当然还有一个更好玩的,那就是BadVPN,我要在另外的文章中单独介绍.本文先来介绍tun2socks,它其实是BadVPN的

Mac Aria2 使用Privoxy将socks代理转化为http代理

安装Privoxy 打开终端安装privoxy来实现这里我是通过brew来进行的安装 brew install privoxy 看到这行已经安装成功 ==> Caveats To have launchd start privoxy at login: ln -sfv /usr/local/opt/privoxy/*.plist ~/Library/LaunchAgents Then to load privoxy now: launchctl load ~/Library/LaunchAgen

redsocks 将socks代理装换成全局代理

redsocks 需要手动下载编译.前置需求为libevent组件,当然gcc什么的肯定是必须的. 获取源码 git clone https://github.com/darkk/redsocks 安装 libevent 组件 centos 下 yum install libevent libevent-devel  -y 编译完,拷贝到/sbin 目录下,修改配置文件 vim /etc/redsocks/redsocks.conf base{ log_debug = on; log_info

Bash终端命令行,使用privoxy将socks代理转成http代理

安装privoxy # Ubuntu/debian sudo apt-get install privoxy # Centos sudo yum install privoxy # Mac osx sudo port install privoxy 修改配置文件 vi /etc/privoxy/config # HTTP parent looks like this: # forward-socks4 / 127.0.0.1:1080 . # # To chain Privoxy and Tor

正向反向与动态socks代理的SSH隧道介绍

正文请见附件.谢谢! 正向反向与动态socks代理的SSH隧道介绍

使用ssh正向连接、反向连接、做socks代理的方法

ssh -L 219.143.16.157:58080:172.21.163.32:8080 用户名@localhost -p 10142 在 219.143.16.157机器执行   将ssh隧道打通 将172.21.163.32:8080 映射到本机58080上 1.用ssh做正向连接 啥叫正向连接?就是client连上server,然后把server能访问的机器地址和端口(当然也包括server自己)镜像到client的端口上. 命令: ssh -L [客户端IP或省略]:[客户端端口]:

让scrapy变相支持socks代理和代理池

上一篇文章中写了如何让scrapy支持HTTP代理 不过scrapy默认是不支持socks代理的,有时候纯HTTP代理又容易被G F W拦截,采集国外被屏蔽的网站又需要用到代理,好吧,能力是被需求逼出来的. 下面说一个解决方案 在美国或香港部署一台linux vps 以debian为例 安装必要组件 apt-get install build-essential autoconf libtool libssl-dev gcc -y 安装git apt-get install git -y 下载s

百度云管家使用socks代理无法上传下载解决办法

像前几篇随笔描述的那样,笔者在学校里通过shadowsocks使用ipv6访问双栈vps来免费使用外网,但是在设置百度云管家的代理时发现:使用socks代理客户端可以访问文件列表,但是无法上传下载. 问题解决方法:下载使用http代理privoxy软件,只需要在主要配置文件里边加一行 forward-socks5 / 127.0.0.1:1080 . 保存即可. 这样privoxy就开始在127.0.0.1:8118端口代理http流量(通过将流量通通转发到我们以前安装过的shadowsocks

Xshell添加ssh隧道SOCKS代理

Xshell是一个功能强大的终端模拟器,支持SSH,SFTP.TELNET.RLOGIN和SERIAL 下载地址:http://www.netsarang.com/products/xsh_overview.html Xshell创建SOCKS代理必须打开一个可用SSH帐号服务器,并且配置SSH隧道. 只要服务器能访问的地址,代理后本地都可以访问. Xshell内置三种隧道方式: Local (Outgoing)  把远程端口映射到本地 说明:源主机是请求端本地主机地址(任何可访问本机的IP或域