socks协议详解

news2024/11/25 6:27:55

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客户端向服务端发起协商请求,数据包格式如下:

VERNMETHODSMETHODS
111to255
  • 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返回给客户端,数据包格式如下:
VERMETHOD
11
  • VER(1字节):协议版本,socks5为0x05

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

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

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

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

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

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

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

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

VER(1字节):版本号

STATUS(1字节):状态码

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

  1. 协商完毕后客户端向socks服务器发起请求,数据包格式如下:
VERCMDRSVATYPDST.ADDRDST.PORT
11X’00’1Variable2
  • 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),然后向客户端返回一个响应,响应数据包格式如下:
VERREPRSVATYPBND.ADDRBND.PORT
11X’00’1Variable2
  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/765156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习 day28(模型评估)

为什么需要模型评估 我们可以借助图像来判断模型是否良好。但当我们用单一特征来绘制f(x)图像时,模型容易出现过拟合现象。但如果增加一些输入特征的种类,绘制图像又会变得很困难。而模型评估可以解决这一痛点。 模型评估 通常我们将数据集的一大半…

[C语言]if语句详解

C语言初阶系列 分支语句和循环语句(1) 目录 C语言初阶系列 前言 一,什么是语句? 1.1如何理解语句? 二,分支语句(选择结构) 2.1,if语句 2.2,if语句的错误的条件写法 2.2,if语…

Houdini Vex 补缺

一. transorm —— move—— scale—— rot1.这里 补2 个函数 quaternion( ) (角度(弧度制), 轴) 获取4元数 qroate( ) (quaternion ,点坐标) 进行旋转 案例: 参考 视频连接 般 b站…

【山河送书第三期】:《Python机器学习:基于PyTorch和Scikit-Learn 》赠书四本!!

【山河送书第三期】:《Python机器学习:基于PyTorch和Scikit-Learn 》 前言内容简介作者简介参与方式 前言 近年来,机器学习方法凭借其理解海量数据和自主决策的能力,已在医疗保健、 机器人、生物学、物理学、大众消费和互联网服务…

如何向资深开发人员寻求帮助(并获得帮助)

在程序开发过程中,我们时常会遇到让人挠头的问题。如何寻求帮助,尤其是如何向资深开发人员寻求帮助,是一门值得学习的技艺。这并不只是简单地把问题抛出来,而是需要学会在何时求助,如何提问,如何理解答案&a…

股票量化系统QTYX选股框架实战案例集|越强的龙头出分歧,越大可能出反包-230717...

前言 “实战案例个股画像”系列和大家分享我基于QTYX选股框架,在实战中选股的案例,和大家一起见证QTYX选股框架逐步完善的过程,帮助大家理解QTYX的精髓。 关于QTYX的使用攻略可以查看链接:QTYX使用攻略 关于QTYX初衷和精髓可以查看…

怎么用Midjourney制作表情包

要使用Midjourney制作表情包,可以按照以下步骤进行操作: 1. 打开Midjourney的官方网站或下载Midjourney应用程序,并登录你的账户。 2. 在Midjourney中,选择创建新项目或表情包。 3. 在项目中,你可以选择使用预设的模…

【学习笔记】浅谈最小生成树及重构树

板子传送门 定义 生成树 一个连通图的生成树是一个极小的连通子图,它包含图中全部的 n n n 个顶点,但只有构成一棵树的 n − 1 n-1 n−1 条边。 最小生成树 其实就是一个图中最小的一个生成树 所谓一个 带权图 的最小生成树,就是原图中…

Label基本用法

作用:是一个标签,可以用来显示文本; 常用属性: 常用事件: 后台代码示范: //d单击标签时触发private void label1_Click(object sender, EventArgs e){MessageBox.Show("标签被单击");//获取标签…

Python(十九)python中的注释

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

优化算法之梯度下降|Matlab实现梯度下降算法

题目要求: 使用Matab实现梯度下降法 对于函数: min ⁡ f ( x ) 2 x 1 2 4 x 2 2 − 6 x 1 − 2 x 1 x 2 \min f(x)2 x_{1}^{2}4 x_{2}^{2}-6 x_{1}-2 x_{1} x_{2} minf(x)2x12​4x22​−6x1​−2x1​x2​ 试采用 MATLAB实现最速下降法求解该问题, 给…

深度学习路线

深度学习路线 机器学习视频 吴恩达 http://open.163.com/special/opencourse/machinelearning.html 神经网络深度学习在线教程 共六章 http://neuralnetworksanddeeplearning.com 《神经网络设计》 国外经典教程 第十一章 反向传播 CNN:《Notes On Convolutional Neutral Netw…

h5live 2.0.1 合入测试

直接超过1个G 有消息进来,就是不显示

SpringBoot 整合 RabbitMQ demo

Rabbit Windows安装教程 本文只做Demo案例的分享,具体只是需自行百度 一、生产者 1.application.properties 配置Rabbit的基本信息 #rabbit 主机IP spring.rabbitmq.host127.0.0.1 #rabbit 端口 spring.rabbitmq.port5672 #rabbit 账号 可自行创建 这里是默认的 …

秀offer:大学老师15w、工商银商20w、字节40w,去哪个?

一个粉丝小伙伴给我发消息: 孟哥,想问下三个offer如何选择,我和家里人的意见不一样。我是双非的小硕。比较喜欢大学的氛围,才应聘了下。是一个三本的民办的,二本的完全够不上。工商在南京,待遇还算不错。字…

安卓进程间通信浅谈

Case: /Users/lucas/AndroidStudioProjects/aidldemo-master 一:操作系统 从操作系统原理去看,进程通信主要有三个方法:共享存储、消息传递、管道通信。 二:安卓中的IPC 进程间通信的几种方式:Intent(Bu…

使用Visual Studio打造强大的程序,从添加第三方库开始

使用Visual Studio打造强大的程序,从添加第三方库开始 博主简介一、引言二、理解第三方库三、下载和安装第三方库四、示例代码和演示五、总结 博主简介 💡一个热爱分享高性能服务器后台开发知识的博主,目标是通过理论与代码实践的结合&#x…

Vscode自定义注释模板

首先安装插件Doxygen Documentation Generator,安装完成之后点击Doxygen插件的设置,按照下面的步骤打开settings.json进行编辑: 在settings.json中追加如下代码: "doxdocgen.file.copyrightTag": ["Copyright (C),…

如何在Arch Linux上安装最新的GNOME Alpha/Beta版本

导读这是为那些想在 Arch Linux 上安装下一个主要版本的 GNOME 桌面环境的 alpha 或 beta 开发版的用户提供的快速而又肮脏的教程,仅供测试之用。 每次有新的 GNOME alpha 版本发布,人们都会问我如何在各种 GNU/Linux 发行版上安装。我总是告诉他们&…

SUM(整除分块)

题目描述 给定 x ,y , 求 的值 . 其中 , 代表向下取整 输入描述 第一行一个正整数 T(1≤T≤100), 表示测试用例的数目。每个测试用例占一行。 接下来的 T 行,每行两个正整数 x, y 。 输出描述 输出共 T 行,…