Socks v5 及其相关协议

2024-06-14 17:18
文章标签 协议 相关 socks v5

本文主要是介绍Socks v5 及其相关协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Socks v5 及其相关协议

  • SOCKS Protocol Version 5
      • 1. 简介
      • 2. 现有的协议
      • 3. 基于 TCP 的客户端
      • 4. 请求
      • 5. 地址
      • 6. 应答
      • 7. 基于 UDP 的客户端
      • 8. 安全性
      • 9. 参考
  • GSS-API Authentication for SOCKS V5
  • Username/Password Authentication for SOCKS V5
      • 1. 简介
      • 2. 协商
      • 3. 安全性
  • Socks 服务器参考实现
      • 1. 协商
      • 2. 请求及处理
      • 3. 转发


SOCKS Protocol Version 5

参考自 RFC1928 SOCKS Protocol Version 5。

1. 简介

  在愈来愈多的网络系统中,可以使用防火墙将内部网络从外部网络(如因特网)中脱离隔绝。这种防火墙一般以应用层网关的形式工作在两网络之间,并能提供应用层协议的访问;但随着愈来愈常见的、愈来愈复杂的应用层协议的到来,有必要提供一个通用框架使得这些应用层协议能穿透防火墙。

  这个框架(指 Socks)是为了 TCP/UDP 应用程序更方便地使用防火墙服务而设计的。它在概念上是处于应用层与传输层之间的“中介层”,因此其并不提供网络层等的相关服务(如 ICMP)。

2. 现有的协议

  目前,已存在一个 Socks v4 协议,但它为应用程序所提供的防火墙穿透是不安全的。Socks v5 扩展了旧的协议,增加了 UDP 转发、IPv6 等的支持。

  若无特别说明,所有出现在“消息格式表格”中的十进制数字均代表相应的字段的长度(以字节为单位);而某个字段的值以“X’hh’”十六进制的方式进行表示;文字“可变”则表示该字段的(值,或内容)长度是可变长的,或该长度是由数据类型字段决定的。

3. 基于 TCP 的客户端

  (基于TCP的)客户端要与防火墙外的终端进行通信之前,需要先与 Socks 服务器(默认端口:1080)建立一个 TCP 连接。建立连接后:客户端与服务端握手(Negotiation,协商)——即选择认证方式并进行验证,并以此决定接受或拒绝该连接。

  客户端连接到服务器后,需要立即发送“协商版本”与“认证方式”:

VersionN_MethodMethods
1字节1字节1~255字节

  在该版本中,Version 字段总是为 X'05;N_Method 字段表明了 Methods 字段的长度(以字节为单位)。服务器需要在 Methods 字段中选一个方法并返回以下消息给客户端。

VersionMethod
1字节1字节

  若服务器返回的 Method 是 X'FF',则客户端必须关闭该连接(这表明服务端不支持客户端所列出的所有方法)。

  其中,当前已定义的方法有:

  • X'00':无需认证;
  • X'01':GSSAPI;
  • X'02':用户名/密码;
  • X'03' ~ X'7F':由IANA所分配的;
  • X'80' ~ X'FE':为私人方法所保留的;
  • X'FF':没有可支持的方法;

  之后,客户端与服务端将根据所选定的验证方法进入一个“子协商过程(Sub-Negotiation)”。符合标准的 Socks v5 实现必须支持 GSSAPI 方式验证,并应支持用户名/密码方式认证。

4. 请求

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

  Socks v5 的请求格式如下:

VersionCommandReserveAddressTypeDestinationAddressDestinationPort
1字节1字节1字节,总为 X'00'1字节可变长度2字节

  其中:

  • Version:

这篇关于Socks v5 及其相关协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061026

相关文章

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines