socks协议详解

2023-11-17

0x01 socks协议简介

Socks(Socket Secure)协议是一种网络协议,处于会话层,用于管理网络连接并提供安全性和隐私保护。通过使用Socks代理服务器,客户端可以隐藏其真实IP地址和其他身份信息,从而匿名地访问互联网上的资源。

0x02 socks协议连接过程

socks建立连接的过程可以简单的分成四个步骤:

  1. 客户端向socks服务器发起请求,告诉服务器自己支持的认证方法。

  2. socks服务器选择一种支持的认证方式并告诉客户端,如果没有支持的则中断连接。

  3. 客户端发送请求,告诉socks服务器需要访问的目标服务器的IP和端口。

  4. socks服务器响应请求,告诉客户端连接状态码以及自己与目标服务器通信的IP和端口,此时建立连接完毕。

下面详细介绍一下socks连接的过程:

在这里插入图片描述

  1. socks客户端和服务端通过TCP三次握手建立连接。

  2. socks客户端向服务端发起协商请求,数据包格式如下:

VER NMETHODS METHODS
1 1 1to255
  • VER(1字节):协议版本,socks5为0x05

  • NMETHODS(1字节):支持认证方法的数量。

  • METHODS(可变长度,NMETHODS字节):

    • X’00’ 不用认证

    • X’01’ GSSAPI认证

    • X’02’ 账号密码认证

    • X’03’ to X’7F’ IANA分配

    • X’80’ to X’FE’ 私有方法保留

    • X’FF’ 无支持的认证方法

  1. socks5服务器选中一个METHOD返回给客户端,数据包格式如下:
VER METHOD
1 1
  • VER(1字节):协议版本,socks5为0x05

  • NMETHOD(1字节):选中的方法。

当客户端收到0x00时,会跳过认证阶段直接进入请求阶段,当收到0xFF时,直接断开连接,收到0x02则进入认证阶段,也叫子协商。

  1. 客户端发起认证请求,这里以0x02为例,数据包如下:
VER ULEN UNAME PLEN PASSWD
1 1 1to255 1 1to255
  • VER(1字节): 版本号

  • ULEN(1字节): 用户名长度

  • UNAME(ULEN字节): 对应用户名的字节数据

  • PLEN(1字节): 密码长度

  • PASSWD(PLEN字节): 密码对应的数据

  1. socks服务器收到认证请求后判断账号密码是否正确,并返回响应结果,数据包格式如下:
VER STATUS
1 1

VER(1字节):版本号

STATUS(1字节):状态码

状态码为0x00表示认证成功,否则认证失败。认证失败的响应后将会断开连接。

  1. 协商完毕后客户端向socks服务器发起请求,数据包格式如下:
VER CMD RSV ATYP DST.ADDR DST.PORT
1 1 X’00’ 1 Variable 2
  • VER(1字节): 版本号,socks5的值为0x05
  • CMD(1字节):连接方式
    • 0x01表示CONNECT请求
    • 0x02表示BIND请求
    • 0x03表示UDP转发
  • RSV(1字节):保留字段,值为0x00
  • ATYP(1字节):目标主机地址类型
    • 0x01表示IPv4地址,DST.ADDR为4个字节
    • 0x03表示域名,DST.ADDR第一个字节表示域名长度,后面的数据表示域名。(没写错,就是没有0x02
    • 0x04表示IPv6地址,DST.ADDR为16个字节长度
  • DST.ADDR(可变长度):表示主机地址
  • DST.PORT(2字节):表示目标主机端口
  1. CMD=0x01:TCP连接模式,socks服务器向目标服务器发起TCP三次握手,连接成功后向客户端发送确认数据包。

  2. CMD=0x02:BIND定模式,这种模式一般是双向监听,也就是说客户端也要开启一个端口监听来自目标服务器的数据。socks服务器开启监听端口并通过请求响应数据包告诉客户端,客户端把数据包中的地址和端口写在应用层协议的数据包里,当目标主机从数据包中取出IP和端口(socks服务器的IP和端口)就会向这个IP和端口发送数据。

  3. CMD=0x03:UPD模式,直接转发。

  1. 当socks服务器收到请求后,判断连接类型(CMD字段)后与目标服务器建立连接(TCP或BIND)或直接转发(UDP),然后向客户端返回一个响应,响应数据包格式如下:
VER REP RSV ATYP BND.ADDR BND.PORT
1 1 X’00’ 1 Variable 2
  • VER(1字节):socks版本号,socks为0x05
  • REP(1字节):返回状态码:
    • X’00’ 成功
    • X’01’ 代理服务器出错
    • X’02’ 连接不允许
    • X’03’ 网络不可达
    • X’04’ 主机不可达
    • X’05’ 连接被拒绝
    • X’06’ TTL 到期
    • X’07’ 命令 (CMD) 不支持
    • X’08’ 地址类型不支持
    • X’09’ to X’FF’ 目前没有分配
  • RSV(1字节):保留字段
  • ATYPE(1字节): 与请求的ATYPE相同
  • BND.ADDR(可变长度):服务器绑定的地址
  • BND.PORT(2字节):服务器绑定的端口DST.PORT
  • BND.ADDR和BND.PORT分别代表socks接收目标服务器数据的地址和端口。

  • BIND模式下socks服务器的响应包有两个,第一个数据包是在socks服务器建立并绑定后发送,此时socks服务器仅创建了套接字,还未与目标主机建立连接。第二个数据包是在目标主机到socks服务器连接建立完成后。

    • 第一个数据包:发送socks绑定的地址和端口。

    • 第二个数据包:发送目标服务器的地址和端口,目标服务器提供服务的IP和端口可能和请求时的IP和端口不同。

  1. 客户端收到服务器的响应后进入转发阶段。此时开始向socks服务器发送数据包,服务器收到数据包后转发到目标服务器上,收到目标服务器的数据也会转发到客户端。

总结

这篇文章介绍了Socks协议的基本概念和连接过程。Socks协议是一种网络协议,位于会话层,用于管理网络连接并提供安全性和隐私保护。文章详细介绍了Socks客户端和服务器之间建立连接的步骤。此外,文章还介绍了Socks协议中常用的数据包格式和状态码,以及Socks协议的应用场景和优势。

参考文章

  1. 理解socks5协议的工作过程和协议细节

  2. # Socks 5 协议解析

  3. Username/Password Authentication for SOCKS V5

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

socks协议详解 的相关文章

  • KB2871997补丁绕过

    KB2871997补丁绕过 微软为了防止用户的明文密码在内存中泄露 发布了KB2871997补丁 关闭了Wdigest功能 Windows Server2012及以上版本默认关闭Wdigest 使攻击者无法从内存中获取明文密码 Window
  • 防范明文密码和散列值抓取

    一 单机密码抓取的防范方法 微软为了防止用户密码在内存中以明文形式泄露 发不了补丁KB2871997 关闭了Wdigest功能 windows server 2012以上版本默认关闭Wdigest 使攻击者无法从内存中获取明文密码 对于wi
  • sockjs-node请求一直报错

    今天在运行本地项目时候 一直提示sockjs node info 请求失败 我一直在想本地并没有这个请求接口 这个是哪里来的 后来经过查阅资料发现 sockjs node 是一个JavaScript库 提供跨浏览器 JavaScript 的
  • 宝塔 + SSRPanel 前端安装教程

    一 安装宝塔及环境 安装宝塔面板 登录 SSH 后 直接安装宝塔 yum install y wget wget O install sh http download bt cn install install sh sh install
  • Windows主机信息搜集

    注意 一切内容仅用于信息技术分享 切勿用于其他用途 一切后果与作者无关 前言 通过命令执行使用cs拿到了内网的一台主机 接下来我们进行内网的信息搜集 1 内网环境分析 内网渗透 在拿到webshell的时候 想办法获取系统信息拿到系统权限
  • git fatal: unable to access  Failed to connect to localhost port 1080: Connection refused

    git 拉取 更新子模块失败 提示失败 Submodule libXesBase https git xxxxx com xesoa libXesBase git registered for path libXesBase Cloning
  • Linux上配置http上网代理

    有些局域网环境上网需要使用代理上网 图形界面的很好解决就设置一下浏览器的代理就好了 但是linux纯命令行的界面就需要手动配置了 如果要全局用户使用应用于所有的Shell 就需要修改 etc profile 文件 vi etc profil
  • 第5章域内横向移动分析及防御

    域内横向移动投不定在夏杂的内网攻击中被广泛使用的一种技术 尤其是在高级持续威胁 Advanced Persistent Threats APT中 攻击者会利用该技术 以被攻陷的系统为跳板 访问其他域内主机 扩大资产范围 包括跳板机器中的文档
  • Windows命名管道&getsystem原理学习记录

    前言 出品 博客 ID moon flower 以下内容 来自博客的moon flower作者原创 由于传播 利用此文所提供的信息而造成的任何直接或间接的后果和损失 均由使用者本人负责 长白山攻防实验室以及文章作者不承担任何责任 命名管道基
  • 如何用Flask和Redis来动态维护代理池

    我们在爬虫时可能会遇到封IP的问题 那么利用代理就可以进行IP的伪装 然后进行爬虫的请求 我们有时会需要非常多的ip 那么维护一个代理池 代理的队列 可以存入或取出 需要对整个池进行定期的检查和更新 以此来保证代理的高质量 也就是代理的检测
  • (四)Loadrunner 代理录制

    1 代理录制主要是为了解决浏览器兼容性问题导致的脚本录制问题 包括录制时浏览器打不开 录制脚本为空 2 代理录制主要步骤为 lr录制选项设置代理 lr录制选择代理的exe 开启浏览器代理 代理的端口号跟loadrunner里设置的代理端口号
  • proxyee-down代理

    https github com proxyee down org proxyee down wiki E4 BD BF E7 94 A8 E6 95 99 E7 A8 8B
  • Postern中配置和使用Socks5代理指南

    在Postern中配置和使用Socks5代理 可以为你的爬虫项目提供更灵活 更可靠的网络连接 本文将向你分享如何在Postern中配置和使用Socks5代理的方法 解决可能遇到的问题 配置和使用Socks5代理的步骤 1 了解Socks代理
  • Unity 委托 (Delegate) 的简单理解以及实现

    委托相当于把某一个方法当成参数 当执行委托的时候就相当于执行了方法 所以这个方法必须和委托具有相同的参数类型 委托的简单实现 using UnityEngine 委托 代理 是存有对某个方法的引用的一种引用类型变量 委托语法 delegat
  • 【渗透测试笔记】之【内网渗透——Windows系统散列值获取与防范】

    拓扑图 Windows系统散列值获取 1 通过CS模块获取用户凭证信息 在获取到目标主机权限后 我们可以抓取hash和dump明文密码 这两项功能都需要管理员权限 如果权限不足 先要进行提权操作 抓取密码哈希 右键被控主机 gt Acces
  • 【centos8.2下载安装netcat监听工具】——关注紫灵小姐姐不踩坑

    下载 wget https sourceforge net projects netcat files netcat 0 7 1 netcat 0 7 1 tar gz 解压 安装 cd netcat 0 7 1 configure 如果报
  • 抓取微信文章:使用代理来处理反爬虫措施

    参考 崔庆才老师教程 目标网站分析 我们将从搜狗 微信这个网址来爬取微信的文章 https weixin sogou com 输入 程序员 并搜索 可以看到上方的URL有许多的信息 我们只保留query type page这几个参数即可 修
  • 在 Internet Explorer 中启用 SOCKS 4a/5

    出于匿名目的 我们希望使用不断变化的代理服务器 在搜索过程中 我们偶然发现了 TOR 项目 它非常适合正常浏览 但是我们还需要软件的代理 遗憾的是 这个第三方软件使用互联网浏览器作为基础 因此我们无法使用推荐的浏览器 更糟糕的是 IE 的代
  • 为什么 HTTP 代理能够支持 IRC 和 FTP 等协议?

    据我了解 SOCKS 代理仅在 TCP 级别建立连接 而 HTTP 代理则在 HTTP 级别解释流量 因此 SOCKS 代理可以适用于任何类型的协议 而 HTTP 代理只能处理 HTTP 流量 但是为什么像 Squid 这样的 HTTP P
  • Maven 对特定存储库使用 SOCKS 代理

    我试图将 Maven 配置为在访问特定存储库时使用袜子代理 但不将其用于 Maven 中央存储库 我用过export MAVEN OPTS DsocksProxyHost

随机推荐

  • 如何从神品屋下载废柴道士2并放入kindle

    神品屋不需要注册 没有目录 一通到底 所以对于下载来说 是比较方便的 这里以废柴道士2为例 展示整个下载txt 转换mobi 存入kindle 完美观看的过程 1 修改url 可以指定你需要的文章 神品屋 coding utf 8 from
  • Java获取自增主键ID值

    附注 相信很多小伙伴在学习mybatis的时候 会有疑问 在插入数据后 怎么获取主键的id值 后续利用这个ID值 应用在其他方面 比如前端 本文根据如何获取自增主键ID值 提出相应的解决办法 背景 在开发过程中 我们有时会用到自增主键的值来
  • day3笔记

    1 4 mkdir指令 创建目录 mkdir d1 在当前目录下创建d1目录 mkdir d3 d4 在当前目录下创建多个目录 mkdir dir1 dir2 p 在当前目录下创建目录dir1下的dir2目录 1 5 rmdir命令 作用
  • Flask+mysql 实现增删改查接口开发+测试(图文教程附源码)

    目录 一 前言 二 环境准备 2 1 安装python 2 2 安装mysql 三 工具准备 3 1 安装pycharm 3 2 安装Navicat 3 3 安装postman 四 mysql数据库准备 4 1 Navicat连接 4 2
  • 离散型制造业MES系统的需求分析

    实现车间信息化的改革 离散制造企业期盼着 MES系统 能够大幅度推进制造业信息化的进程 下面以数控生产为例 分析离散型制造业MES系统的需求 从原理上讲MES并没有区分流程制造业与离散制造业 但由于生产模式的不同 对执行层的控制方式和控制频
  • 多选按钮(CheckBox)

    1 多选按钮 CheckBox 的基本概念 2
  • ggplot2读书笔记7:第五章 通过图层构建图像

    Build a Plot Layer by Layer 5 1 简介 略 5 2 创建图表 以汽车耗油量mpg数据集为例 当我们使用ggplot 创建图表时 最基本的代码是 ggplot mpg aes displ hwy geom poi
  • video标签在安卓下微信x5浏览器的一些问题

    强制全屏播放视频 非腾讯视频 Click事件不能触发 play 方法 只能通过video标签自己的播放按钮进行播放 因为播放只能通过video标签自己的播放按钮 所以readyState和canplaythrough视频就绪状态也没用 不能
  • nginx 请求头转发

    前言 网站安全 开始审查了 之前我们的项目 是通过 ip port 直接访问tomcat的 内部使用嘛 然而 现在需要使用 https 协议访问 以增强网站的安全性 本来没有这么麻烦的 但是写代码的人 竟然这样写的资源请求 现在访问模式 是
  • django中配置xadmin时报错metaclass conflict: the metaclass of a derived class must be a (non-strict) subcla

    报错信息如下 原因 没有修改我们定义的ModelAdmin的继承对象为object或去掉继承 错误代码如下 xadmin sites register Comment class CommentAdmin admin ModelAdmin
  • 华为OD机试真题-字符串比较-2023年OD统一考试(B卷)

    题目描述 给定字符串A B和正整数V A的长度与B的长度相等 请计算A中满足如下条件的最大连续子串的长度 1 该连续子串在A和B中的位置和长度均相同 2 该连续子串 A i B i 之和小于等于V 其中 A i B i 表示两个字母ASCI
  • 【转】密封类

    10 3 1 密封类概述及声明 10 3 密封类与密封方法 如果所有的类都可以被继承 那么很容易导致继承的滥用 进而使类的层次结构体系变得十分复杂 这样使得开发人员对类的理解和使用变得十分困难 为了避免滥用继承 C 中提出了密封类的概念 本
  • XStream 实现 javabean 与 xml 互转

    XStream 是什么 XStream 是一个 java类库 实际上是一个转换器 XStream 作用 实现 java bean 与 xml 互转 XStream 如何使用 主要通过 xStream 实现 转换 具体测试示例代码如下 源码
  • 运维工具

    环境部署 部署软件 如Apache Nginx tomcat JDK PHP MySQL等等 还需要测试吧 那就还需要部署一套测试环境 有些时候 开发环境也是需要运维来部署的 排错和调优 运维的事 尽快定位问题 解决问题才是王道 定位问题
  • 谁说毕业即失业?爬虫就业月入13000+第一个不服!

    不知道是Python太火爆 还是年轻人太卷 最近一段时间 老有刚毕业的年轻人向我请教Python问题 问题还相对比较专业 其中不乏有 财务小年轻请教Python数据统计 新媒体的朋友问Python爬虫 当然更多的还是来咨询Python爬虫就
  • Java监听器(重点)

    监听器 Listener 是一个实现特定接口的 Java 程序 这个程序专门用于监听另一个 Java 对象的方法调用或属性改变 当被监听对象发生上述事件后 监听器某个方法将立即自动执行 监听器的相关概念 事件 方法调用 属性改变 状态改变等
  • windows 安装linux子系统详细步骤

    1 dism exe online enable feature featurename Microsoft Windows Subsystem Linux all norestart 2 dism exe online enable fe
  • 对课程学习的期待

    我希望通过学习这门课程之后 自己可以设计出一些简单的程序 有利于之后的学习 例如 网络爬虫和一些有关于数据 图像处理的程序 我希望在理论课上老师可以通过一些有趣的示例来讲解课程内容 我认为这样可以更好的抓住学生的注意力而且可以使我们更容易理
  • 【无需显卡】AI绘画入门教程

    前言 Hello 各位端午节快乐呀 不好意思拖更两个月 最近实在是太忙了 也想不到有什么好玩的 之前介绍过了几个好玩的ai网站 非常适合新手尝鲜 但很多都有额度限制 而且还开始收费了 所以有了这期教程 还没看过上期可以看一下 除了ChatG
  • socks协议详解

    0x01 socks协议简介 Socks Socket Secure 协议是一种网络协议 处于会话层 用于管理网络连接并提供安全性和隐私保护 通过使用Socks代理服务器 客户端可以隐藏其真实IP地址和其他身份信息 从而匿名地访问互联网上的