Socks4协议

SOCKS4协议主要是如下几个RFC标准:
http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol
http://www.rfc-editor.org/rfc/rfc1928.txt
http://www.smartftp.com/Products/SmartFTP/RFC/socks4a.protocol

SOCKS 4只支持TCP转发。

请求报文格式如下:

VNCDDSTPORTDSTIPUSERID     Null
1124variable    1

VN    SOCKS协议版本号,应该是0x04
CD    SOCKS命令,可取如下值:
        0x01    CONNECT
        0x02    BIND
DSTPORT CD相关的端口信息
DSTIP   CD相关的地址信息
USERID  客户方的USERID
NULL    0x00


响应报文格式如下:

VN  CD  DSTPORTDSTIP                
1124

VN      响应应该为0x00而不是0x04
CD      可取如下值:
        0x5A    允许转发
        0x5B    拒绝转发,一般性失败
        0x5C    拒绝转发,SOCKS 4 Server无法连接到SOCS 4 Client所在主机的
                IDENT服务
        0x5D    拒绝转发,请求报文中的USERID与IDENT服务返回值不相符
DSTPORT CD相关的端口信息
DSTIP   CD相关的地址信息

1) CONNECT命令
对于CONNECT请求,DSTIP/DSTPORT指明转发目的地。
SOCKS 4 Server根据源IP、DSTPORT、DSTIP、USERID以及可从SOCS 4 Client所在主
机的IDENT服务(RFC 1413)获取的信息进行综合评估,以决定建立相应连接还是拒绝
转发。

假设CONNECT请求被允许,SOCKS 4 Server试图建立到转发目的地的TCP连接,然后向
SOCKS 4 Client发送响应报文,指明是否成功建立转发连接。

如果CONNECT请求被拒绝,SOCKS 4 Server也向SOCKS 4 Client发送响应报文,随后
立即关闭连接。

CONNECT响应包中只有VN、CD字段有意义,DSTPORT、DSTIP字段被忽略。如果CD等于
0x5A,表示成功建立转发连接,之后SOCKS 4 Client直接在当前TCP连接上发送待转
发数据。

2) BIND命令
FTP协议在某些情况下要求FTP Server主动建立到FTP Client的连接,即FTP数据流。
FTP Client - SOCKS 4 Client - SOCKS 4 Server - FTP Server

a. FTP Client试图建立FTP控制流。SOCKS 4 Client向SOCKS 4 Server发送CONNECT
   请求,后者响应请求,最终FTP控制流建立。
   CONNECT请求包中指明FTPSERVER.ADDR/FTPSERVER.PORT。


b. FTP Client试图建立FTP数据流。SOCKS 4 Client建立新的到SOCKS 4 Server的
   TCP连接,并在新的TCP连接上发送BIND请求。


   BIND请求包中仍然指明FTPSERVER.ADDR/FTPSERVER.PORT。


   SOCKS 4 Server收到BIND请求,根据这两个信息以及USERID对BIND请求进行评估。
   创建新套接字,侦听在AddrA/PortA上,并向SOCKS 4 Client发送第一个BIND响应
   包。


   BIND响应包中CD不等于0x5A时表示失败,包中DSTPORT、DSTIP字段被忽略。

   BIND响应包中CD等于0x5A时,包中DSTIP/DSTPORT对应AddrA/PortA。如果DSTIP等
   于0(INADDR_ANY),SOCKS 4 Client应将其替换成SOCKS 4 Server的IP,当SOCKS
   4 Server非多目(multi-homed)主机时就可能出现这种情况。

c. SOCKS 4 Client收到第一个BIND响应包。

   FTP Client调用getsockname(不是getpeername)获取AddrA/PortA,通过FTP控制
   流向FTP Server发送PORT命令,通知FTP Server应该主动建立到AddrA/PortA的
   TCP连接。

d. FTP Server收到PORT命令,主动建立到AddrA/PortA的TCP连接,假设TCP连接相关
   四元组是:

   AddrB,PortB,AddrA,PortA

e. SOCKS 4 Server收到来自FTP Server的TCP连接请求,检查这条入连接的源IP(
   AddrB)是否与FTPSERVER.ADDR匹配,然后向SOCKS 4 Client发送第二个BIND响应
   包。

   源IP不匹配时第二个BIND响应包中CD字段设为0x5B,然后SOCKS 4 Server关闭这
   条用于发送第二个BIND响应包的TCP连接,同时关闭与FTP Server之间的TCP连接,
   但主TCP连接(与CONNECT请求相关的那条TCP连接)继续保持中。

   源IP匹配时CD字段设为0x5A。然后SOCKS 4 Server开始转发FTP数据流。

   无论如何,第二个BIND响应包中DSTPORT、DSTIP字段被忽略。

对于CONNECT、BIND请求,SOCKS 4 Server有一个定时器(当前CSTC实现采用两分钟)。
假设定时器超时,而SOCKS 4 Server与Application Server之间的TCP连接(出连接或
入连接)仍未建立,SOCKS 4 Server将关闭与SOCKS 4 Client之间相应的TCP连接并放
弃相应的转发。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Socks4a 是一种 SOCKS 协议的变种,它允许用户通过代理服务器访问内部网络的主机和服务。在使用 Socks4a 进行内网扫描主机端口时,我们可以按照以下步骤进行: 1. 首先,需要准备一台可以访问代理服务器的主机,这台主机可以是位于内网或者外部网络的机器。我们需要在该主机上配置好 Socks4a 代理,以便让我们可以使用此代理进行连接。 2. 接下来,我们需要选择一个可以进行扫描的目标主机或一组主机。通常,我们需要明确知道要扫描的主机的 IP 地址。 3. 通过配置代理服务器的设置,我们需要将扫描工具的流量路由到 Socks4a 代理服务器。这可以通过设置扫描工具或操作系统的网络代理设置来实现。 4. 然后,使用端口扫描工具,例如 Nmap 工具,指定目标主机的 IP 地址和要扫描的端口范围。在 Nmap 命令中,可以通过添加 `-Pn` 参数来禁用主机的 Ping 操作,因为在内网环境中有可能无法 Ping 通目标主机。 5. 在扫描过程中,工具将通过配置的 Socks4a 代理服务器向目标主机发送扫描请求。如果代理服务器已正确配置,并且目标主机处于局域网中并可访问,那么扫描工具将能够获取目标主机的开放端口信息。 需要注意的是,在使用 Socks4a 进行内网扫描主机端口时,必须具备合法的权限才能对内部网络进行扫描。同时,为了维护网络安全,应严格遵守相关规定,并获得所在网络环境的授权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值